Python-硬币翻转条纹,返回的概率是原来的两倍



我是一个初学者,对编码和Python都很陌生,我正在使用这本书"用Python自动处理无聊的事情";学习;第一章的实践项目之一如下:

编写一个程序,了解在随机生成的头部和尾部列表中出现六个头部或六个尾部的频率。你的程序将实验分成两部分:第一部分生成一个随机选择的"头"one_answers"尾"值的列表,第二部分检查其中是否有条纹。将所有这些代码放在一个循环中,重复实验10000次,这样我们就可以找出硬币翻转中有多大百分比包含连续六个头或尾的条纹。

我的程序返回的百分比是它应该返回的百分比的两倍。(预期:79-80%,返回159%(。我试图通过将代码与我发现的其他回复进行比较来修复代码,但由于我使用了不同的方法,我仍然不明白为什么会发生这种情况,因为一切看起来都很正常。

import random
Total = []  # Defines the list in which there will be all of the throws
Throw = ("H", "T")  # Cases
for x in range(10000):  # Repeats the 100 throws 10 000 times
for i in range(100):
Total.append(random.choice(Throw))  # Adds a random throw to the list "Total";
Join = " ".join(Total)  # Creates a string to easily count the groups of T and H
N_T = Join.count("T T T T T T")  # Counts the Numbers of groups of six Tails
N_H = Join.count("H H H H H H")  # Counts the Numbers of groups of six Heads
print('Chance of streak: %s%%' % ((N_H + N_T) / 100))  # Probability

我希望这不是一个愚蠢的问题。。。谢谢你的帮助。

您需要为搜索词设置边界,如下所示:

N_T = Join.count("H T T T T T T H")  # Counts the Numbers of groups of six Tails
N_H = Join.count("T H H H H H H T")  # Counts the Numbers of groups of six Heads

因为否则,如果你有以下序列会发生什么:

"T T T T T T T T T T T T"

它可以在更大的序列中多次找到你的模式,这会导致超过100%的命中率,当然在这种情况下这是合理的。

最新更新