变量已定义但未定义。

2024-10-04 11:33:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在完成一个作业,但问题是它说'重启'是未定义的,即使它是在整个作业定义。你知道吗

我在它是本地的地方有错误,所以我把它设为全局的,但现在它说“重启”是未定义的

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行


Tags: informaindef作业randomteamrestart
3条回答

此代码中唯一定义restart的地方是:

restart = input("Run Again? Y/N: ").lower()

if shuffle_user == 'y':块中。因此,如果您对reshuffle提示符回答no,则不会将任何值赋给restart变量,并且尝试读取它会产生NameError。你知道吗

restart是在if中定义的,这就是为什么您无法访问它,范围在if:

restart = input("Run Again? Y/N: ").lower()

所以你必须把它向上和向外移动,如果:

    restart = "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)
        input("Run Again? Y/N: ").lower()

您很少需要使用全局关键字。在您的例子中,最简单的解决方案是将restart作为参数传递给main()。你知道吗

更新

我把你的完整代码修改了,所以没有任何混乱。另外,我还将restart命名为some_globally_accessible_var,以明确到底发生了什么。在您的确切情况下,实际上并不需要全局定义restart。你知道吗

如果您仍然对变量作用域感到困惑,this似乎是一个不错的解释。另外,here是关于if语句中变量作用域的一个很好的StackOverflow问题。你知道吗

some_globally_accessible_var = ''

def main(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(restart) #remember to pass restart to your function here!

        elif restart == 'n':
                        exit



main(some_globally_accessible_var)

请参阅pppery的答案,以解释您的错误。你知道吗

相关问题 更多 >