题目描述:有一个函数func1能返回0和1两个值,返回0和1的概率都1/2,问怎么利用这个函数得到另外一个函数func2, 使func2也只能返回0和1,且返回的概率为1/4,返回1的概率为3/4.
分析与解答:func得到1与0的概率都为1/2,因此,可以调用两次func1,分别生成两个值a1与a2,用这两个数组成一个二进制a2a1,它的取值可能性为00, 01,10, 11,并且每一个取值的概率为1/4, 因此,如果得到的结果为00, 那么返回0,其他值返回1,即可。
import random
def func1():
return int(round(random.random()))
def func2():
a1 = func1()
a2 = func1()
tmp = a1
tmp |= (a2 << 1)
if tmp == 0:
return 0
else:
return 1
if __name__ == "__main__":
i = 0
while i < 16:
print(func2(), end="")
i += 1
print('\n')
i = 0
while i < 16:
print(func2(), end="")
i += 1