我正在完成一个作业,但问题是它说'重启'是未定义的,即使它是在整个作业定义。你知道吗
我在它是本地的地方有错误,所以我把它设为全局的,但现在它说“重启”是未定义的
def main():
global restart
def changeMyList(myList):
for i in range(len(myList)):
myList[i] = myList[i].title()
myList.sort()
soccer_teams = ["Arsenal", "Chelsea", "Liverpool", "Barcelona", "Juventus", "Manchester City", "Atletico Madrid", "Borussia Dortmund"]
team_length = len(soccer_teams)
changeMyList(soccer_teams)
print("|||||" + str(team_length) + " TEAMS" + "|||||")
import random
for team in soccer_teams:
print(team)
shuffle_user = input("Reshuffle? Y/N: ")
if shuffle_user == 'y':
random.shuffle(soccer_teams)
print("List after first shuffle: ", soccer_teams)
random.shuffle(soccer_teams)
print("List after second shuffle: ", soccer_teams)
restart = input("Run Again? Y/N: ").lower()
if restart == 'y':
main()
elif restart == 'n':
exit
main()
当我按“n”时,它要求重新排列,它说“name‘restart’is not defined”第32行;第40行
此代码中唯一定义
restart
的地方是:在
if shuffle_user == 'y':
块中。因此,如果您对reshuffle提示符回答no,则不会将任何值赋给restart
变量,并且尝试读取它会产生NameError
。你知道吗restart
是在if
中定义的,这就是为什么您无法访问它,范围在if:所以你必须把它向上和向外移动,如果:
您很少需要使用全局关键字。在您的例子中,最简单的解决方案是将restart作为参数传递给main()。你知道吗
更新
我把你的完整代码修改了,所以没有任何混乱。另外,我还将restart命名为
some_globally_accessible_var
,以明确到底发生了什么。在您的确切情况下,实际上并不需要全局定义restart
。你知道吗如果您仍然对变量作用域感到困惑,this似乎是一个不错的解释。另外,here是关于
if
语句中变量作用域的一个很好的StackOverflow问题。你知道吗请参阅pppery的答案,以解释您的错误。你知道吗
相关问题 更多 >
编程相关推荐