import random
# 等概率函数,随机取0,1,出来概率为不等概率
def equle_fun(p):
zero_num = [0] * int(p * 100)
one_num = [1] * int((1-p) * 100)
zero_num.extend(one_num)
return random.choice(zero_num)
# 0.5等概率
# 原始的随机数生成器,生成0 的概率为p,生成1的概率为1-p
# 构造上面两个独立的事件,序列是00,01,10,11概率分别为 p*p,p(1-p),(1-p)p,(1-p)*(1-p); 01和10,他们输出的概率均为p(1-p)。这2个作为等概率生成器,00和11情况丢弃
def half():
first = equle_fun(0.3)
second = equle_fun(0.3)
if first == 1 and second == 0:
return 1
elif first == 0 and second == 1:
return 0
else:
return half()
print(half())
### 其他等概率思路和前面一样,构造多次的独立事件