L'objet 'int' n'a pas d'attribut 'append'`
Le message d'erreur répertorié ci-dessus apparaît et j'ai essayé de le corriger, mais je ne sais pas ni pourquoi il le fait. J'ai d'autres sections dans mon code qui sont exactement comme ça, moins les noms de variables, et elles fonctionnent bien.
Comment puis-je corriger ce code?
def vf(): q2 = input("How many questions (number) : ") i = list() i2 = list() for i in range(0, int(q2)): x2 = input("Enter question : ") y2 = input ("Enter answer. (True or false?) : ") i.append(x2) i2.append(y2) list(zip(x2, y2)) vfqr = input("Would you like to save? (yes or no) ") if (vfqr == 'yes' ) : print ("Saving...") from time import sleep sleep(1.5) x2 = i import pickle pickle.dump(x2, open("vfx.dat", "wb")) y2 = i2 import pickle pickle.dump(y2, open("vfy.dat", "wb")) q2 = q2 import pickle pickle.dump(q2, open("vfqr.dat", "wb")) print ("Enregistré!") print("Sélectionner «ouvrir» puis «vrai ou faux» pour utiliser ces données.") if (vfqr == 'no' ) : print ("Pleas try another option or close the programme")
4 Réponses :
J'ai trouvé l'erreur dans votre code.
Vous avez:
def vf():
q2 = input("How many questions (number) : ")
iter_list = list()
i2 = list()
for i in range(0, int(q2)):
x2 = input("Enter question : ")
y2 = input ("Enter answer. (True or false?) : ")
iter_list.append(x2)
i2.append(y2)
list(zip(x2, y2))
vfqr = input("Would you like to save? (yes or no) ")
if (vfqr == 'yes' ) :
print ("Saving...")
from time import sleep
sleep(1.5)
x2 = i
import pickle
pickle.dump(x2, open("vfx.dat", "wb"))
y2 = i2
import pickle
pickle.dump(y2, open("vfy.dat", "wb"))
q2 = q2
import pickle
pickle.dump(q2, open("vfqr.dat", "wb"))
print ("Enregistré!")
print("Sélectionner «ouvrir» puis «vrai ou faux» pour utiliser ces données.")
if (vfqr == 'no' ) :
print ("Pleas try another option or close the programme")
vf()
, ce qui pose problème, car vous définissez votre variable de liste sur i code >, mais vous utilisez également i pour itérer dans la boucle for! (pour clarifier, vous avez i = list () et for i in range ).
J'ai pris votre code et changé la variable en autre chose et cela fonctionne très bien.
def vf():
q2 = input("How many questions (number) : ")
i = list()
i2 = list()
for i in range(0, int(q2)):
x2 = input("Enter question : ")
y2 = input ("Enter answer. (True or false?) : ")
i.append(x2)
Merci beaucoup pour votre aide! Tout fonctionne bien. Très appréciée!
Vous êtes redéfini la variable i dans la boucle for et elle devient non pas une liste mais un entier. Vous devez soit changer le nom de la var de la liste, soit utiliser quelque chose comme ceci dans votre boucle for:
range(0, int(q2))
Il y a d'autres problèmes que vous rencontrez, comme du code redondant avec un résultat jamais assigné à la variable:
list(zip(x2, y2))
Ou en utilisant l'entrée utilisateur sans aucune validation dans la boucle for (que se passe-t-il si l'utilisateur saisit une lettre ou un zéro?):
for idx in range(0, int(q2)): ...
Merci beaucoup pour votre aide! Très appréciée!
La prochaine fois, il serait utile de donner tout le message d'erreur car parfois dans de gros codes, et même dans de petits codes, il peut être déroutant de trouver exactement où se trouve l'erreur. Si vous donnez toute l'erreur, ce genre de choses peut être trouvé plus rapidement.
Quoi qu'il en soit, votre problème ici est quelque chose que beaucoup de gens rencontrent à un moment donné. Vous affectez d'abord i à list () , puis vous le réaffectez dans la boucle for. La fonction range le fait être un int à chaque fois qu'elle exécute la boucle, d'où l'erreur, 'int' object n'a pas d'attribut 'append' . Je suggère qu'à l'avenir, vous utilisiez des variables plus descriptives. Non seulement cela rendra votre code plus facile à comprendre, mais si vous voulez le trouver et le remplacer par une autre variable, il sera plus facile de trouver uniquement cette variable au lieu d'autres également.
def vf():
q2 = int(input("How many questions (number) : "))
i_list = []
i2_list = []
for i in range(0, q2):
x2 = input("Enter question : ")
y2 = input ("Enter answer. (True or false?) : ")
i_list.append(x2)
i2_list.append(y2)
list(zip(i_list, i2_list))
vfqr = input("Would you like to save? (yes or no) ")
if (vfqr == 'yes' ) :
print ("Saving...")
from time import sleep
sleep(1.5)
x2 = i_list
import pickle
pickle.dump(x2, open("vfx.dat", "wb"))
y2 = i2_list
import pickle
pickle.dump(y2, open("vfy.dat", "wb"))
q2 = q2
import pickle
pickle.dump(q2, open("vfqr.dat", "wb"))
print ("Enregistré!")
print("Sélectionner «ouvrir» puis «vrai ou faux» pour utiliser ces données.")
if (vfqr == 'no' ) :
print ("Pleas try another option or close the programme")
Merci beaucoup pour votre aide! Très appréciée!
Cela semble utile, mais cela pourrait être beaucoup amélioré avec l'ajout d'une explication de ce que vous avez changé et pourquoi vous l'avez changé.
Salut Jonathan, en cas d'erreurs, veuillez fournir la trace complète. Quoi qu'il en soit, votre problème est probablement dans la ligne
i.append (x2)cariest, enfin, un int. Ceci est dû à la lignefor i in range (0, int (q2)):. Cela signifie qu'à chaque itération,iobtiendra la valeur suivante dans larange. Je recommanderais de travailler avec des noms significatifs pour les variables, qui vous aideront à suivre le programme et les erreursPuisque vous utilisez
i = list (), vous avez besoin d'une variable de boucle différente dans votre boucle for, c'est-à-direfor i in range (0, int (q2)):Les instructions d'importation doivent aller en haut du fichier et vous n'avez besoin d'importer pickle qu'une seule fois. Je recommanderais d'utiliser des gestionnaires de contexte pour gérer les objets de fichier. Vous n'avez pas besoin des parenthèses autour des instructions if.