Python贪吃蛇游戏开发:'playerNumber'未定义NameError问题求助
贪吃蛇游戏NameError问题解决
问题根源与修复方案
- 变量作用域错误:
start()函数里定义的playerNumber是局部变量,未声明为全局变量。playerColour()中使用global playerNumber尝试调用全局变量,但这个全局变量从未被初始化。需要在start()里也添加global playerNumber声明,将变量提升为全局作用域。 - 变量名拼写错误:
playerColour()里所有判断分支用的playerno都是拼写错误,正确变量名应为playerNumber,这是直接触发NameError的关键原因。 - 递归调用隐患:
start()中不符合玩家数要求时递归调用自身,多次错误输入会导致栈溢出。改用while循环实现输入校验更安全。 - 冗余分支清理:
start()已经限制玩家数在2-4之间,playerColour()里的playerNumber ==1分支永远不会触发,直接删除即可。
修正后的完整代码
import turtle gt = turtle.Turtle() t1 = turtle.Turtle() t2 = turtle.Turtle() t3 = turtle.Turtle() t4 = turtle.Turtle() turtle.bgcolor("White") # 声明全局变量 playerNumber = 0 def start(): global playerNumber print("Welcome to python Snake! A game made by Kippo and inspired by the famous game: Snake!") while True: try: playerNumber = int(input("How many players are going to play? (2-4)")) if 2 <= playerNumber <=4: break elif playerNumber >=5: print("Too many players! Try again.") else: print("Too few players! Try again.") except ValueError: print("请输入有效的数字!") playerColour() def playerColour(): global playerNumber if playerNumber == 2: player1colour = input("player 1, what colour do you want to be?") player2colour = input("player 2, what colour do you want to be?") elif playerNumber == 3: player1colour = input("player 1, what colour do you want to be?") player2colour = input("player 2, what colour do you want to be?") player3colour = input("player 3, what colour do you want to be?") elif playerNumber == 4: player1colour = input("player 1, what colour do you want to be?") player2colour = input("player 2, what colour do you want to be?") player3colour = input("player 3, what colour do you want to be?") player4colour = input("player 4, what colour do you want to be?") else: print("Too many players, try again.") quit() def gridSize(): gridsize = int(input("What size do you want your grid to be?")) gt.circle(2) start()
内容的提问来源于stack exchange,提问作者Kippo
相关产品推荐
相关产品推荐

