<p>您很少需要使用全局关键字。在您的例子中,最简单的解决方案是将restart作为参数传递给main()。你知道吗</p>
<h2>更新</h2>
<p>我把你的完整代码修改了,所以没有任何混乱。另外,我还将restart命名为<code>some_globally_accessible_var</code>,以明确到底发生了什么。在您的确切情况下,实际上并不需要全局定义<code>restart</code>。你知道吗</p>
<p>如果您仍然对变量作用域感到困惑,<a href="https://python-textbok.readthedocs.io/en/1.0/Variables_and_Scope.html" rel="nofollow noreferrer">this</a>似乎是一个不错的解释。另外,<a href="https://stackoverflow.com/questions/2829528/whats-the-scope-of-a-variable-initialized-in-an-if-statement">here</a>是关于<code>if</code>语句中变量作用域的一个很好的StackOverflow问题。你知道吗</p>
<pre><code>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)
</code></pre>
<p>请参阅pppery的答案,以解释您的错误。你知道吗</p>