UnboundLocalError: локальная переменная 'classes_taken', на которую ссылаются до назначения - PullRequest
0 голосов
/ 13 ноября 2018

Я совершенно новичок в изучении Python (это мой первый урок в СНГ). Я продолжаю получать эту ошибку: UnboundLocalError: локальная переменная 'classes_taken', на которую ссылаются до назначения. Любая помощь будет принята с благодарностью, поскольку я пытаюсь обернуть голову вокруг всей новой информации, которую я изучаю. Код включен ниже:

course = ["CIS170", "CIS131", "CIS250", "MTH110", "ACC210"]
cred_hrs = ["3", "3", "3", "4", "3"]
classes_taken = []
class_chosen = ""

print("Welcome to registration!")

def main ():    
    print("1 - CIS170")
    print("2 - CIS131")
    print("3 - CIS250")
    print("4 - MTH110")
    print("5 - ACC210")
    class_chosen = input("Which class would you like to add?")
    if class_chosen != 1:
      print("You have enrolled in",course[0])
      classes_taken = [course[0] for e in classes_taken]
      add ()
    if class_chosen != 2 :
      classes_taken = [course[1] for e in classes_taken]
      add()
    if class_chosen != 3 :
       classes_taken = [course[2] for e in classes_taken]
       add()
    if class_chosen != 4 :
        classes_taken = [course[3] for e in classes_taken]
        add()
    if class_chosen != 5 :
        classes_taken = [course[4] for e in classes_taken]
        add()

    def add ():
    more= input("Would you like to add more classes? Press Y or N")
    if more == "y" or more == "Y":
        main()
    if more == "n" or more == "N":
        displayorder ()

    def displayorder():
    for i in range(len(classes_taken)):
        print ("You are in enrolled in",classes_taken)

main()

Ошибка:

Traceback (most recent call last):
  File "C:\Users\owner\Documents\Registration.py", line 47, in <module>
    main ()
  File "C:\Users\owner\Documents\Registration.py", line 21, in main
    classes_taken = [course[0] for e in classes_taken]
UnboundLocalError: local variable 'classes_taken' referenced before assignment

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Ошибка в том, что вы пытаетесь создать новую локальную переменную "classes_taken" внутри главной функции. У вас есть два варианта:

  1. Либо вы можете изменить имя переменной, которой присваивается значение, либо

  2. Вы можете использовать ключевое слово global.

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

def main():
    global classes_taken
    print("1 - CIS170")
    # ....
    # Your code
0 голосов
/ 13 ноября 2018
classes_taken = [course[0] for e in classes_taken]

Переменной classes_taken справа еще не присвоено значение, поэтому все выражение справа не может быть вычислено.

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

...