Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何仅使用“生成1/3成功概率的有偏硬币”;“公平硬币”;_Python - Fatal编程技术网

Python 如何仅使用“生成1/3成功概率的有偏硬币”;“公平硬币”;

Python 如何仅使用“生成1/3成功概率的有偏硬币”;“公平硬币”;,python,Python,这是我作业中的一个问题: 编写一个函数(不带参数)并仅使用“公平硬币”生成一个有偏差的硬币 我发现了一个需要使用二进制数字流的解决方案,因为二进制中的1/3是0.010101。。。 然而,我想知道是否有一种不用二进制数字流就能解决这个问题的方法?下面是使用二进制数字流的代码 def fairCoin(): return random.choice([0,1]) def oneThird(): while True: yield 0 yield 1 d

这是我作业中的一个问题: 编写一个函数(不带参数)并仅使用“公平硬币”生成一个有偏差的硬币

我发现了一个需要使用二进制数字流的解决方案,因为二进制中的1/3是0.010101。。。 然而,我想知道是否有一种不用二进制数字流就能解决这个问题的方法?下面是使用二进制数字流的代码

def fairCoin():
    return random.choice([0,1])  

def oneThird():
   while True:
      yield 0
      yield 1

def biasedCoin(binaryDigitStream, fairCoin):
   for d in binaryDigitStream:
      if fairCoin() != d:
         return d

希望我正确理解了这个问题

我要用T表示成功,用F表示失败。我已将下一位放入代码框中以正确格式化。它显示了结果是什么,以及如果只针对特定结果重新调整,则累积概率是什么

.                                     T %       F %
First fair coin flip                  50%       50%
Reflip only if the result was T       25%       75%
Reflip AGAIN only if F                37.5%     62.5%
Reflip AGAIN only if T                31.25%    68.75%
etc, etc
你知道我要去哪里吗?如果你这样做了,现在就去编码


您需要一个Reflip函数,该函数将最后一次翻转的结果和一枚硬币作为参数。如果结果与上一个结果相同,它将掷硬币并返回结果,否则它将使用新结果再次调用自己。对它的第一次调用应该使用F作为初始结果。从理论上讲,函数可以无限延伸,但这是你需要生成的1/3,因为它是不合理的。

到目前为止,你对家庭作业问题做了哪些尝试?您发布的代码似乎来自。请参阅。@Carcigenicate仅通过掷硬币不可能生成6个相等加权的概率。你只能生成2^n个相等加权的概率,其中n是翻转的次数。我投票将这个问题作为离题题结束,因为这是一个家庭作业问题,投入的精力最少。