Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 蟒蛇3赢得';不能识别代码中的变量_Python_Variables - Fatal编程技术网

Python 蟒蛇3赢得';不能识别代码中的变量

Python 蟒蛇3赢得';不能识别代码中的变量,python,variables,Python,Variables,我所有的代码都在下面 本周刚开始学习编程。我试图制作一个Monty Hall模拟器(仅文本),玩家通过选择1、2或3来选择一扇门。但是,由于某种原因,Python似乎无法识别输入 以下是针对新手的游戏链接: 我的程序尝试做的如下。首先,玩家选择一扇门,1、2或3。然后程序检查以确保玩家确实输入了这三个数字中的一个。如果没有,那么这个人需要再次选择 在此之后,游戏随机选择一个获胜的门。然后,根据游戏规则,程序需要显示一个虚拟奖品(山羊)。因此,程序随机选择其中一扇门作为“山羊门”。程序首先确保

我所有的代码都在下面

本周刚开始学习编程。我试图制作一个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) + '.')