我正在尝试创建一个可以在一个类中添加/删除/显示学生的程序,这5个类是列表中的5个列表。
非常感谢帮助。
当我运行此代码时:
global classes
def intro():
print("Welcome to Powerschool v2.0!")
print("Actions:")
print("1. Add Student")
print("2. Delete Student")
print("3. Show Students in a Class")
print("4. Show All Students")
x = int(input())
while x<1 or x>4:
print ("Please choose an action, 1-4.")
x = int(input())
if x == 1:
action1()
elif x == 2:
action2()
elif x == 3:
action3()
elif x == 4:
action4()
classes = [[],[],[],[],[]]
return classes
def action1():
print("Which Class? 1-5")
a = int(input())
print("Please enter the student's name.")
z = input()
classes[a-1].append(z)
again()
def action2():
print ("Which Class? 1-5")
print ("Which student?")
again()
def action3():
print ("Which Class? 1-5")
y = int(input())
if y == 1:
print (classes[0])
elif y == 2:
print (classes[1])
elif y == 3:
print (classes[2])
elif y == 4:
print (classes[3])
elif y == 5:
print (classes[4])
again()
def action4():
print (classes)
again()
def again():
print("Would you like to do something else? y/n")
h = input()
if h == "y":
intro()
else:
quit
def main():
intro()
main()
我的错误是:
Traceback (most recent call last):
File "C:\Documents and Settings\user1\My Documents\Downloads\az_studenttracker.py", line 67, in <module>
main()
File "C:\Documents and Settings\user1\My Documents\Downloads\az_studenttracker.py", line 65, in main
intro()
File "C:\Documents and Settings\user1\My Documents\Downloads\az_studenttracker.py", line 19, in intro
action1()
File "C:\Documents and Settings\user1\My Documents\Downloads\az_studenttracker.py", line 33, in action1
classes[a-1].append(z)
NameError: name 'classes' is not defined
我在介绍()结束时做了return classes
,但我发现这不起作用。
我遵循了一些建议,没有发生任何事情:/
答案 0 :(得分:5)
您在classes
方法中定义了intro
,即使它返回了它,您的action1
方法也看不到任何变量在任何地方命名classes
。
答案 1 :(得分:2)
return
并不能按照您的想法行事。 return
语句是一种将执行控制传递回上下文的方法(例如,从intro()
到main()
),能够发回一些信息以供更高的上下文使用。虽然您已将classes
传递回main()
,但您在此背景下从未对其进行任何操作,因此它会消失。
解决问题的一种方法是将classes
声明为全局变量。这是最简单的事情,但通常不是好的设计。您可以在global
中声明局部变量classes
之前使用intro()
关键字执行此操作(请参阅this问题以获取有关global
的指导),或者在你的任何职能之外宣布classes
。
另一种解决方案是将classes
作为参数传递给action
函数。
在任何一种情况下,您都需要在调用classes
函数之前声明action
。
答案 2 :(得分:1)
classes
仅存在于intro():
中,您必须将其声明为global
变量才能在其他函数中访问它或在函数外声明它。
classes = [[],[],[],[],[]] # can be accessed by action3() ,action4()
def intro():
答案 3 :(得分:1)
这是因为classes
超出了后两种方法的范围。因此,您有两种选择:
将类传递给方法action1(), action2(), etc
,如下所示:
def action1(classes)
......以及你打电话的时候:
action1(classes) //with the classes var you just made
只需将classes
var放在方法之外或将其声明为global
,如下所示:
global classes = [[],[],[],[],[]]
......就在之前:
def intro()
一般来说,您应该了解返回的工作原理;在您编写的代码中没有必要