Python 蟒蛇3赢得';不能识别代码中的变量
我所有的代码都在下面 本周刚开始学习编程。我试图制作一个Monty Hall模拟器(仅文本),玩家通过选择1、2或3来选择一扇门。但是,由于某种原因,Python似乎无法识别输入 以下是针对新手的游戏链接: 我的程序尝试做的如下。首先,玩家选择一扇门,1、2或3。然后程序检查以确保玩家确实输入了这三个数字中的一个。如果没有,那么这个人需要再次选择 在此之后,游戏随机选择一个获胜的门。然后,根据游戏规则,程序需要显示一个虚拟奖品(山羊)。因此,程序随机选择其中一扇门作为“山羊门”。程序首先确保这扇门既不是获胜的门,也不是选定的门 以下是我在运行代码时遇到的错误:Python 蟒蛇3赢得';不能识别代码中的变量,python,variables,Python,Variables,我所有的代码都在下面 本周刚开始学习编程。我试图制作一个Monty Hall模拟器(仅文本),玩家通过选择1、2或3来选择一扇门。但是,由于某种原因,Python似乎无法识别输入 以下是针对新手的游戏链接: 我的程序尝试做的如下。首先,玩家选择一扇门,1、2或3。然后程序检查以确保玩家确实输入了这三个数字中的一个。如果没有,那么这个人需要再次选择 在此之后,游戏随机选择一个获胜的门。然后,根据游戏规则,程序需要显示一个虚拟奖品(山羊)。因此,程序随机选择其中一扇门作为“山羊门”。程序首先确保
line 52, in <module>
doors()
line 14, in doors
while goatDoor == chosenDoor or goatDoor == winningDoor:
NameError: name 'chosenDoor' is not defined
在你的职能中:
def checkWin():
if chosenDoor == winningDoor:
print('You win!')
if chosenDoor != winningDoor:
print('You lose!')
您试图将chosenDoor
与winningDoor
进行比较,但它们尚未定义。函数checkWin()
无法访问其他函数中本地定义的变量
你必须重构你的代码。最终,您可以将一些参数分配给函数checkWin
,并从其他函数返回一些值
此外:
可替换为:
if __name__ == "__main__":
# your actual game
这是运行Python程序的标准方法。如果将此模块中的任何内容导入到另一个文件中,则代码不会意外运行
编辑:
该错误实际上是由以下行引起的:
while goatDoor == chosenDoor or goatDoor == winningDoor:
在函数doors()
中定义了goatDoor
和winningDoor
,但未声明chosenDoor
在函数keepOrSwitch()
中,您也有同样的问题
不过,函数checkWin()
也会导致错误
您还必须重构函数chooseDoor()
。它在return
语句之后有一个print
语句。它进入while
循环,并将完成函数调用,永远不会到达最后一行
解决此问题的最简单方法是将chooseDoor
的返回值指定给一个变量:
choosenDoorByTheUser = chooseDoor()
然后以该变量作为参数调用其他函数。如果变量超出范围,则需要将正在生成的变量存储在while循环中,并从生成的方法返回值,然后将值传递给checkWin
keepOrSwitch
应返回selected
chooseDoor
应返回chosenDoor
doors
应返回winningdoor
/goatdoor
checkwin
应该采取chosenDoor
+winnodoor
+goatdoor
然后您就可以正确引用变量了您已经发布了很多代码,这看起来像是一个范围问题,您函数中的变量在其他函数中是不可见的 解决此问题的快捷方法是将导致错误的变量设置为全局变量,如下所示:
def chooseDoor(): # choose a door
global chosenDoor = ''
while chosenDoor != 1 and chosenDoor != 2 and chosenDoor != 3:
print('Choose a door. (1, 2 or 3)')
chosenDoor = input()
return chosenDoor
print('You chose door number ' + str(chosenDoor) + '.')
我认为这可能会解决问题,但这不是一个好的编码实践。在python程序中,您只在chooseDoor()函数中定义了chosenDoor,而没有将chosenDoor传递到下一个函数doors()。可以通过执行doors(chosenDoor)将chosenDoor传递给doors()
choosenDoorByTheUser = chooseDoor()
def chooseDoor(): # choose a door
global chosenDoor = ''
while chosenDoor != 1 and chosenDoor != 2 and chosenDoor != 3:
print('Choose a door. (1, 2 or 3)')
chosenDoor = input()
return chosenDoor
print('You chose door number ' + str(chosenDoor) + '.')