硬币连续10次翻转的可能性

时间:2016-11-16 23:40:09

标签: python

我可以很容易地找到100个头中的头数,以及硬币翻转100个翻转头的机会。该代码如下。但是,我无法弄清楚如何轻松获得硬币连续10次连续翻转的几率。

import random

n = int(input("Enter the number of flips: "))

sum = 0
heads = 0
tails = 0
for n in range(1, n + 1):
    number = random.randrange(0,2)
    if number == 0:
        heads += 1
    else:
        tails += 1
    sum += number
    odds = sum / n


print("No. of heads: ", heads)
print("No. of tails: ", tails)
print("Odds: ", odds)

2 个答案:

答案 0 :(得分:2)

你需要翻转硬币10次,但只有当他们所有出现时才报告成功。使用反向逻辑执行此操作:如果有任何一个出现尾部,请将您的标志设置为False。

all_heads = True
for i in range(10):
    number = random.randrange(0,2)
    if number != 0:
        all_heads = False

或者,更简洁

all_heads = True
for i in range(10):
    all_heads &= random.randrange(0,2) == 0

......甚至更多的pythonic

all_heads = all(random.randrange(0,2) == 0 for i in range(10))

无论您选择哪种方式,您都需要做足够的时间来近似统计世界。由于您希望在1024次试验中只取得一次成功,因此您需要10,000到100,000次试验。计算成功次数,除以试验次数。你已经知道该怎么做了。

<强> SPOILER:

考虑到头部的长度, n 以及试验次数,这会减少到

print (sum(all(random.randrange(0,2) for _ in range(n)) \
          for _ in range(trials))                       \
       / float(trials) )

欢迎使用Python。 : - )

答案 1 :(得分:0)

现在一个实验将达到十次翻转。你必须经常重复这一点,以便经常得到你想要的结果(10个头):

import random

n = int(input("Enter the number of tries: "))  # 1 try = 10 flips
ten_head_count = 0

for _ in range(n):
    if all(x==0 for x in (random.randrange(0,2) for _ in range(10))):
        ten_head_count += 1

print("No. of ten heads: ", ten_head_count)
print("No. of tries: ", n)
print("Odds: ", ten_head_count/n)