Python UnboundLocalError:局部变量';上课';分配前参考

Python UnboundLocalError:局部变量';上课';分配前参考,python,python-3.6,local-variables,Python,Python 3.6,Local Variables,我对学习python一无所知(这是我的第一个CIS课程)。 我一直收到这样的错误:UnboundLocalError:赋值前引用的局部变量“classes\u take”。在我努力了解所有我正在学习的新信息时,任何帮助都将不胜感激。 代码如下: course = ["CIS170", "CIS131", "CIS250", "MTH110", "ACC210"] cred_hrs = ["3", "3", "3", "4", "3"] classes_taken = [] class_chose

我对学习python一无所知(这是我的第一个CIS课程)。 我一直收到这样的错误:UnboundLocalError:赋值前引用的局部变量“classes\u take”。在我努力了解所有我正在学习的新信息时,任何帮助都将不胜感激。 代码如下:

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
回溯(最近一次呼叫最后一次):
文件“C:\Users\owner\Documents\Registration.py”,第47行,在
主要()
文件“C:\Users\owner\Documents\Registration.py”,第21行,主目录
上课人数=[上课人数中e的课程[0]
UnboundLocalError:赋值前引用了局部变量“classes\U TAKED”
右侧的变量
classes\u
尚未赋值,因此无法计算右侧的整个表达式


但在此之前,你的算法有一个问题。你应该先复习那个问题。如果您不知道出了什么问题,请告诉我们您试图使用哪些变量来表示什么。

错误是因为您试图在主函数内创建一个新的局部“classes\u take”变量。您有两个选择:

  • 您可以更改要为其赋值的变量的名称,也可以更改

  • 您可以使用“全局”关键字

  • 您认为变量在主函数之外。您可以使用global关键字访问main函数中的class_take变量,如下所示:

    def main():
        global classes_taken
        print("1 - CIS170")
        # ....
        # Your code
    

    请阅读、回顾并改进缩进。我正试图通过从“课程”列表中提取元素并使用用户输入来创建一个新的数组,这是我希望从顶部的empy数组中获得的类。基本上是询问用户希望注册哪些课程,将这些课程保存到一个新数组中,并在用户选择了所有课程以及他们的学时数后将该数组打印回用户。除MTH110外,所有这些课程的学时均为3小时。查看此评论,并且您被多次询问是或否,我建议将
    if
    块更改为:
    if classes\u choosed==“1”
    新行,选项卡
    classes\u take=classes\u take+[课程[0]
    。其他
    if
    模块也一样。非常感谢你们的帮助!这一切对我来说仍然很陌生,但我很高兴他们有这样的小组供大家学习和分享知识!那很有效!对不起,如果这是一个愚蠢的问题。最后还有一个问题,在add()模块中,它一直在问我是输入y还是n?我是否遗漏了一些简单的内容?对于您当前的代码,在退出之前它将接受“n”或“n”4次,因为您使用了5个“if”循环(如果输入的数字介于1到5之间,其中一个循环将不会执行),并且每个循环都在调用add()函数。您可以使用if/elif/else循环来解决该问题
    def main():
        global classes_taken
        print("1 - CIS170")
        # ....
        # Your code