一、谁是小偷问题
1.问题描述:
警察局抓了啊,a,b,c,d,4名偷窃嫌疑犯,其中只有一人是小偷。审问中
a说:我不是小偷
b说:c是小偷
c说:小偷肯定是d
d说:c在冤枉人
现在已知四人中有3人在说真话,一人说假话,问到底谁是小偷。
2.Python代码:
#!/usr/bin/python
# # Created by 老刘 on 2020/5/14
# # Author: Lao Liu <412842374@qq.com>
def thief_is():
for thief in ('a', 'b', 'c', 'd'):
sum = ('a'!= thief)+(thief == 'c')+(thief == 'd')+(thief != 'd')
if sum == 3:
print("thief is %s"%thief)
if __name__ == '__main__':
thief_is()
3.运行结果:
thief is c
二、三门问题
1.问题描述
三门问题(Monty Hall problem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目 Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。
参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。
当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊(主持人肯定会开一扇有羊的门)。主持人其后会问参赛者要不要换另一扇仍然关上的门。
2.问题分析:
当选择了一扇门的时候,选择的这扇门有车的概率是1/3,那么其它两扇门有车的概率是2/3,这时主持人会在后两扇门中打开一扇有山羊的门,也就是后面的2/3中又有一扇门被确定了,那么此时的2/3的概率会收缩到最后一扇门上,所以在后一扇门上的出现汽车的概率(2/3)会大于第一扇门。下面我们来编写程序来验证下:
3.Python代码
我们先设置实验次数为10000次,随机在这1万次里选择换门还是不换门,然后通过实验统计换门获胜的次数和不换门获胜的次数。
# #!/usr/bin/python
# # Created by 老刘 on 2020/5/14
# # Author: Lao Liu <412842374@qq.com>
from random import choice
#首先是不换门的方法stay():
def stay():
doors = ['car','goat','goat'] #设置三扇门,其中两扇门后面是山羊,一扇门后是汽车
choose = choice(doors) #随机选择一扇门
if choose == 'car': #不换门则直接判断
return 'win'
else:
return 'lose'
#换门的方法switch()
def switch():
doors = ['car', 'goat', 'goat']
choose = choice(doors)
doors.remove(choose) #选择的门放一边
doors.remove('goat') #剩下的门,去掉一只山羊
if doors == ['car']: #换门
return 'win'
else:
return 'lose'
if __name__ == '__main__':
#设置实验次数为10000次
total = 10000
#统计随机选择换门的次数
count_switch = 0
#统计换门获得车辆的次数
win_switch = 0
#统计不换门的次数
count_stay = 0
#统计不换们获胜的次数
win_stay = 0
for i in range(total):
choose = choice([1,2]) #随机选择换门还是不换门
if choose == 1:
count_switch += 1
if switch() == 'win':
win_switch += 1
else:
count_stay += 1
if stay() == 'win':
win_stay += 1
print('系统随机分配的换门次数:',count_switch)
print('换门后得到汽车次数 :',win_switch,' 获胜概率为:%.2f%%'%(100*win_switch/count_switch))
print('系统随机分配的不换门次数:',count_stay)
print('不换门后得到汽车次数:',win_stay,' 获胜概率为:%.2f%%'%(100*win_stay/count_stay))
4.运行结果:
系统随机分配的换门次数: 4946
换门后得到汽车次数 : 3276 获胜概率为:66.24%
系统随机分配的不换门次数: 5054
不换门后得到汽车次数: 1715 获胜概率为:33.93%
无论是从理论分析和实验结果来看,换门后人们中奖的概率比不换门中奖的概率高一倍,这就是学好数学和编程的优势。