我可以很容易地找到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)
答案 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)