**实验内容:**假设你正参加一个有奖游戏节目,并且有 3 道门可选:其中一个后面是汽车,另外两个 后面是山羊。你选择一个门,比如说 1 号门,主持人当然知道每个门后面是什么并且打开了 另一个门,比如说 3 号门,后面是一只山羊。这时,主持人会问你"你想改选 2 号门吗?", 然后根据你的选择确定最终要打开的门,并确定你获得山羊(输)或者汽车(赢)。 编写程序,模拟上面的游戏
下面展示一些 内联代码片
。
from random import randrange
'''返回一个字典,键为 3 个门号,值为门后面的物品'''
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