给一个概率p代表生成0的概率,则1-p代表生成1的概率。这类似于一枚硬币投出去结果为正面和反面的概率是不同的。下段代码将不等概率转换为等概率,即转换后的硬币投正面和反面的概率是相同的。
话不多说,上代码
# 不等概率转等概率
# 随机给一个概率p
# p代表生成0的概率
# 1-p 代表生成1的概率
# function core 等概率的返回0或1
def core(p):
import random
re_dict = {
'01':0,
'10':1
}
re_temp = []
while True:
for i in range(2):
if random.random() <= p:
re_temp.append('0')
else:
re_temp.append('1')
rand_result = re_dict.get("".join(re_temp))
if rand_result == None:
re_temp.clear()
continue
else:
return rand_result
#test code
import random
timesOfZero = 0
timesOfOne = 0
p = round(random.random(),2) #随机生成范围为(0,1)的小数p 代表概率
print("生成的概率为:",p)
#测试10万次
for i in range(100000):
if core(p) == 1:
timesOfOne += 1
else:
timesOfZero += 1
print("生成的0为{}次".format(timesOfZero))
print("生成的1为{}次".format(timesOfOne))