街头取球游戏概率

取球问题

背景:抖音上看到一个视频:一个大爷在街上摆摊,用一个袋子装了红绿蓝各8个珠子。玩家把手伸进口袋摸出12个珠子,数出不同颜色珠子个数,就能够获得相应的奖金。这是个概率论问题,借这个机会可以顺手练一下python和概率知识
image.png

题目设计:

一个袋子装了红绿蓝各8个珠子,只取一次,每次取12个珠子,根据下方的颜色数量可以获得对应的奖金,如840 颜色只要红色为8个 绿色为4个 蓝色没有 或者蓝色为8 红色为4 蓝色没有 无颜色要求。,问:

1、综合中奖概率是多少?(中奖无论中多少都算中奖)

2、每次抽奖的期望收益是多少?这个游戏作为游玩的人,有可能稳赚吗?

'''
———————
导入各种库
———————
'''
#基础库
import os
import numpy as np
import pandas as pd

# 不显示科学计数法
pd.set_option('precision', 10)

题目1

1、计算每种组合的出现次数/总次数

# 导入并清洗数据
# 首先把下面的数据处理成这个样子,方便计算

data = pd.read_excel('D:\data\概率取球问题.xlsx')
data.head(50)
QQ截图20220127183829.png

计算思路

m1\m2\m3 = 对应颜色的球的个数
n = 一次取几个
N = 总共几个球
k = 有几种可能性
a1/a2/a3 = 对应目标要取的个数

排列组合公式

## 构建通用函数

# 先定义一个基础排列组合求解函数
def f1_pc(N,n):
    return np.math.factorial(N)/(np.math.factorial(n)*np.math.factorial(N-n))
    
# 共有三种组合情况,输出对应的排列组合数
# 3个数不同 6种排列组合 2个数不同 3种排列组合 三个数相同 1种排列组合
def f2_numprob(a,b,c):
    temp_list = [a,b,c]
    if len(set(temp_list)) == 3 :
        temp  = 6
    elif len(set(temp_list)) == 2 :
        temp = 3
    else:
        temp = 1
    return temp
for i in range(data.shape[0]):
    k  = f2_numprob(data.loc[i,"A"],data.loc[i,"B"],data.loc[i,"C"])
    prob = (k*(f1_pc(8,data.loc[i,"A"])*f1_pc(8,data.loc[i,"B"])*f1_pc(8,data.loc[i,"C"])))/f1_pc(24,12)
    
    # 计算并集
    data.loc[i,"概率"] = prob
data['期望收益'] = data['概率']*data['中奖金额']
# 题目1回答
# 可以求除-10外其他的概率总和 也可以 1- p不是失败的概率也就是中奖的概率
print("答案1,中奖概率%2f"%(1-0.4870724914))
答案1:0.512928
# 题目2 回答
data

肯定赚不到钱,每抽一次都是亏得


QQ截图202201271838292.png

你可能感兴趣的:(街头取球游戏概率)