蒙蒂霍尔悖论游戏 假设你正参加一个有奖游戏节目,并且有 3 道门可选:其中一个后面是汽车,另外两个 后面是山羊。你选择一个门,比如说 1 号门,主持人当然知道每个门后面是什么并且打开了 另一个门,比如说 3 号门,后面是一只山羊。这时,主持人会问你"你想改选 2 号门吗?", 然后根据你的选择确定最终要打开的门,并确定你获得山羊(输)或者汽车(赢) 编写程序,模拟上面的游戏。 参考代码: from random import randrange def init(): result = {i: 'goat'for i in range(3)} r = randrange(3) result[r] = 'car' return result def startGame(): doors = init() while True: try: firstDoorNum = int(input('Choose a door to open:')) assert 0<= firstDoorNum <=2 break except: print('Door number must be between {} and {}'.format(0, 2)) for door in doors.keys()-{firstDoorNum}: if doors[door] == ‘goat’: print(‘“goat”behind the door’, door) thirdDoor = (doors.keys()-{door, firstDoorNum}). pop( ) change = input('Switch to {}?(y/n)'.format(thirdDoor)) finalDoorNum = thirdDoor if change=='y' else firstDoorNum if doors[finalDoorNum] == 'goat': return 'I Win!' else: return 'You Win.' while True: print('='*30) print(startGame()) r = input('Do you want to try once more?(y/n)') if r == 'n': break
时间: 2023-06-18 14:07:09 浏览: 171
蒙蒂霍尔悖论模拟:我需要一种动手方法来了解蒙蒂霍尔悖论背后的概率。-matlab开发
这是一个比较经典的悖论问题,看起来非常简单,但是却有一些令人困惑的地方。在这个游戏中,我们有三个门,其中一个后面是汽车,另外两个后面是山羊。参赛者需要选择一个门,然后主持人会打开其中一个后面是山羊的门。然后,参赛者可以选择改变他们的选择,或者保持原来的选择。最后,主持人会打开参赛者选择的门,如果是汽车,则参赛者赢得比赛,否则,参赛者输掉比赛。
这个程序的实现比较简单,首先我们需要一个函数来初始化三扇门,其中一个门后面是汽车,其他两个门后面是山羊。然后,我们进入一个循环,等待参赛者选择一个门。选择一个门的代码块中,我们需要确保参赛者输入的门号在合法范围内。然后,我们需要打开其中一个后面是山羊的门,这样参赛者就可以选择改变他们的选择或者保持原来的选择。最后,我们需要检查参赛者选择的门是否是汽车,如果是,参赛者赢得比赛,否则,参赛者输掉比赛。
代码如下:
```python
from random import randrange
def init():
result = {i: 'goat' for i in range(3)}
r = randrange(3)
result[r] = 'car'
return result
def startGame():
doors = init()
while True:
try:
firstDoorNum = int(input('Choose a door to open:'))
assert 0 <= firstDoorNum <= 2
break
except:
print('Door number must be between {} and {}'.format(0, 2))
for door in doors.keys() - {firstDoorNum}:
if doors[door] == 'goat':
print('“goat”behind the door', door)
thirdDoor = (doors.keys() - {door, firstDoorNum}).pop()
change = input('Switch to {}?(y/n)'.format(thirdDoor))
finalDoorNum = thirdDoor if change == 'y' else firstDoorNum
if doors[finalDoorNum] == 'goat':
return 'I Win!'
else:
return 'You Win.'
while True:
print('=' * 30)
print(startGame())
r = input('Do you want to try once more?(y/n)')
if r == 'n':
break
```
这个程序比较简单,但是需要注意一些细节,比如输入门号时需要确保输入的是一个整数,并且在合法的范围内。此外,在打开后面是山羊的门时,我们需要确保打开的门不是参赛者选择的门。最后,我们需要让参赛者选择是否改变他们的选择,如果他们选择改变,我们需要确保选择的是另外一扇门。
阅读全文