概率问题是最方便使用计算机计算的问题。因为计算机可以模拟大量的重复计算工作,难以理解的概率问题,通过计算机代码一算就很容易算出正确结果出来。
今天就为大家讲解下如何通过python来计算一道很有名的酒鬼概率问题。
问题:
已知某酒鬼有90%的日子都会出去喝酒,
喝酒只去固定三家酒吧。
今天警察找了其中两家酒吧都没有找到酒鬼。
问:
酒鬼在第三家酒吧的几率?
我是通过如下方式计算这个概率问题的。注释也写了,不清楚的同学请在评论区留言。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/3/23 14:46
# @Author : Lihua
# @Version : 1.0
# @Contact : heei3k@hotmail.com
# @File : drunkard.py
# @Software: PyCharm
# 酒鬼的概率问题,已知一个酒鬼一天会去酒吧的概率是90%,而他会去三个酒吧。警察去酒吧抓人,去了两个酒吧都没抓到他,那么请问,警察去第三个酒吧抓到他的概率有多大。
# 这个问题可以用概率这么算,随机给一个10以内的数,如果这个数为10,则为不在酒吧,如果为1到9,则在酒吧。然后将这9个数分成三个段,叫A段,B段,C段
# 然后随机取三个段,然后分别判断这个数是否在这个段以内,取10000次,第一次在则不计算,第二次在则不计算,第三次不管在不在都要计算。
# 最后计算的结果就是0.75
import random
list=[[1,2,3],[4,5,6],[7,8,9]]
def drunkard():
n = 100000
m1 = 0 # 在第三家和家里总数
m2 = 0 # 在第三家酒吧的总数
for i in range(n):
# 随机取一个数,这个数决定了这个人是否在酒吧,如果为10则不在酒吧
a=random.randint(1,10)
print(a)
# 将list打乱,打乱后的顺序就是警察访问酒吧的顺序,警察会依次访问list[0]和list[1]的酒吧
random.shuffle(list)
print(list)
# 遍历两个list
for x in range(2):
in_bar=False
for y in list[x]:
if y==a:
# 如果在酒吧,则判定在前两个酒吧为true,将不计算此次数据
in_bar=True
break
if in_bar:
break
# 只有前两个酒吧都没人,才将总计算数据+1
if not in_bar:
m1 += 1
print("m1",m1)
# 当在第三个酒吧的时候,在酒吧的数据加1
for z in list[2]:
if a==z:
m2 += 1
print("在第三个酒吧")
# 最后相除,计算出最终结果
print("m1",m1,"m2",m2,"结果是",m2/m1)
if __name__ == '__main__':
drunkard()