Нужна помощь сообщение об ошибке 'int' объект не имеет атрибута 'append' - PullRequest
0 голосов
/ 26 января 2020

'int' объект не имеет атрибута 'append'`

Появляется вышеприведенное сообщение об ошибке, и я пытался его исправить, но не знаю и почему Является ли это. В моем коде есть другие разделы, которые точно такие же, за исключением имен переменных, и они отлично работают.

Как я могу исправить этот код?

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 ]

2 голосов
/ 26 января 2020

Я нашел ошибку в вашем коде.

У вас есть:

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)

, что проблематично c, потому что вы установили переменную списка в i, но вы ' также используйте i для итерации для l oop! (чтобы уточнить, у вас есть i = list() и for i in range).

Я взял ваш код и изменил переменную на что-то другое, и она работает просто отлично.


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()
1 голос
/ 26 января 2020

В следующий раз будет полезно, если вы дадите полное сообщение об ошибке, так как иногда в больших кодах и даже в маленьких кодах может быть затруднительно определить, где именно находится ошибка. Если вы укажете всю ошибку, такие вещи можно найти быстрее.

В любом случае, ваша проблема в том, что многие люди сталкиваются в какой-то момент. Сначала вы назначаете i на list(), а затем переназначаете его в для l oop. Функция range заставляет его быть int каждый раз, когда запускает l oop, поэтому вы ошибаетесь, 'int' object has no attribute 'append'. Я предлагаю в будущем использовать более описательные переменные. Это не только облегчит понимание вашего кода, но если вы захотите найти и заменить его другой переменной, вам будет легче найти только эту переменную вместо других.

1 голос
/ 26 января 2020

Вы переопределены i переменная в for l oop, и она становится не списком, а целым числом. Вам следует либо изменить имя списка var, либо использовать что-то подобное в вашей команде для l oop:

for idx in range(0, int(q2)): ...

Есть и другие проблемы, такие как избыточный код с результатом, никогда не присваиваемым переменной:

list(zip(x2, y2))

Или используя пользовательский ввод без какой-либо проверки для l oop (что если пользователь введет букву или ноль?):

range(0, int(q2))
0 голосов
/ 26 января 2020
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")
...