我决定在很长一段时间内编写python 2有点乐趣,并决定尝试制作一些可玩的Go游戏。
在尝试为游戏制作功能时,我很快就遇到了这个问题,我似乎并不了解raw_input或函数是如何工作的。我在这里删除了给我带来麻烦的部分代码。当我尝试运行它时,我可以提供输入,但之后我得到NameError:name' crd_x'在石头线中没有定义。代码在不使用该函数的情况下工作,但是当我尝试像这样清理它时,我得到了上述错误。
返回crd究竟给出了什么以及我实际上应该如何从def函数中提供变量?
def checkplayerinput():
if player_on_turn == 0:
crd = raw_input("Place Black stone (X-Y): ").split("-")
elif player_on_turn == 1:
crd = raw_input("Place White stone (X-Y): ").split("-")
crd_x = int(crd[1])
crd_y = int(crd[0])
return crd_x, crd_y
def stoneplacement(crd_x, crd_y, player_on_turn):
if board[crd_x][crd_y] == "+" and player_on_turn == 0:
board[crd_x][crd_y] = "B"
elif board[crd_x][crd_y] == "+" and player_on_turn == 1:
board[crd_x][crd_y] = "W"
stop = 0
while stop == 0:
#User input and derive coordinates
checkplayerinput()
# Stone placement
stoneplacement(crd_x, crd_y, player_on_turn)
修改。刚刚切换了crd_x和crd_y的位置,就像它们在实际代码中一样。然而,它产生完全相同的NameError。
答案 0 :(得分:0)
因此crd将根据用户输入的内容为您提供一系列字符串,以“ - ”符号分隔。例如,如果player_on_turn == 0,并且您输入了例如“X-Y”(无论您的游戏需要什么),checkplayerinput()将返回crd为[“X”,“Y”]。
另外,请记住,数组从0开始编制索引。因此,在此示例中,crd [0] ==“X”。
运行代码,这是否解释了为什么你的stoneplacement()函数会抛出NameError?即你输入正确的raw_input来产生crd [1]吗?
另外,你在代码中的def checkplayerinput()之前定义了crd吗?根据python范围规则,如果在函数内部定义变量crd,它将不具有其外部的全局值(并且如果在另一个函数中引用它将抛出错误)。这可能是您在没有函数定义的情况下运行代码的原因。尝试在函数外部的某处添加一行“global crd”或“crd = []”,它将允许您访问stoneplace中的crd((函数。