生日悖论是指如果一个房间里有23个人或以上,那么至少有两个人生日相同的概率大于50%。编写程序,输出在不同随机样本数量下,23个人中至少两个人生日相同的概率。
思路:对于23个人中每个人的生日我们可以使用random库生成,然后把月份乘以100加上天处理成一个数字存储在列表中,之后利用集合元素的唯一性判断是否至少有两个元素相同。
具体代码如下:
from random import randint
def randbirth(): #产生随机生日
mon = randint(1,12)
if mon in [4,6,9,11]:
day = randint(1,30)
elif mon == 2:
day = randint(1,28)
else:
day = randint(1,31)
return mon*100+day
def judge():
ls = []
for i in range(23): #产生23个随机生日
ls.append(randbirth())
if len(ls) != len(set(ls)): #ls中至少有两个元素不相等
return 1
else:
return 0
def main():
try:
cnt = 0;
num = eval(input("请输入样本数量:"))
for i in range(num):
if judge() == 1:
cnt += 1
print("23个人中至少有两个人生日相同的概率是:{:.2f}%".format(cnt*100/num))
except:
print("输入有误!")
main()