You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 11:25:18