Python 面试题
参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。
编程证明计算换门与否的概率
import random
def MontyHall(select, change):
doors = [1, 2, 3]
car = random.choice(doors)
# 主持人开一个不是车、没被选中的门
left = []
for d in doors:
if d != car and d != select:
left.append(d)
open = random.choice(left)
if change == 1:
select = 6 - open - select
return select == car
win_change, win_nochange, win_randchange = 0, 0, 0
for i in range(10000):
select = random.randint(1, 3)
change = random.randint(0, 1)
win_randchange += MontyHall(select, change)
win_change += MontyHall(select, 1)
win_nochange += MontyHall(select, 0)
print('不一定换门的中奖概率 =', win_randchange / 10000)
print('换门的中奖概率 =', win_change / 10000)
print('不换门中奖概率 =', win_nochange / 10000)