问答题 4.  有一个函数func1能返回0和1两个值,返回0和1的概率都是1/2,问怎么利用这个函数得到另一个函数func2,使func2也只能返回0和1,且返回0的概率为1/4,返回1的概率为3/4。
【正确答案】func1得到1与0的概率都为1/2。因此,可以调用两次func1,分别生成两个值a1与a2,用这两个数组成一个二进制a2a1,它的取值的可能性为00,01,10,11,并且得到每个值的概率都为(1/2)*(1/2)=1/4,因此,如果得到的结果为00,那么返回0(概率为1/4),其他情况返回1(概率为3/4)。实现代码如下:
   import random
   #返回0和1的概率都为1/2
   def func1():
   return int(round(random.random())
   #返回0的概率为1/4, 返回1的概率为3/4
   def func2():
   a1=func1()
   a2=func1()
   tmp=a1
   tmp1=(a2<<1)
   if tmp==0:
   return 0
   else:
   return 1
   if __name__=="__main__":
   i=0
   while i<16:
   print func2(),
   i+=1
   print'\n'
   i=0
   while i<16:
   print func2(),
   i+=1
   程序的运行结果为:
   1 1 1 0 1 1 0 1 1 0 1 1 1 1 0 1
   1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 0
   由于结果是随机的,调用的次数越大,返回的结果就越接近1/4与3/4。
【答案解析】

[考点] 如何用一个随机函数得到另外一个随机函数。