python - Python - 6 个或更多尾部/头部代码的概率
问题描述
我让我的学生在 comp sci 中编写一个代码来模拟掷硬币 100 次,并将结果存储在一个列表中。寻找连续 6 个正面(或更多)或 6 个反面(或更多)。如果您发现连胜,则认为试验成功。重复此实验 10,000 次。使用它来确定找到连续 6 个正面或 6 个反面的概率。
理论上这个概率应该是~80%。
编辑:我可能误解了这个理论概率。我在这里找到了这个概率:https ://math.stackexchange.com/questions/2736117/what-is-the-probability-of-getting-6-or-more-heads-or-tails-in-a-row-翻转后
我的代码给了我大约 54% 的概率,即连续获得 6 个的概率。但是,如果我连续获得 7、8、9 或更多,我的代码应该将其标记为成功,对吗?
我了解我的代码会检查 6 条牛排,但如果有 7、8、9 条……它仍然会将其标记为成功。一定有我在这里想念的东西......
附上我的代码:
import random
numberofstreaks = 0
for experimentnumber in range(10000):
result = []
for i in range(100):
flip = random.randint(0,1)
result.append(flip)
for i in range(len(result)-6):
if result[i:i+6] == ([0,0,0,0,0,0] or [1,1,1,1,1,1]):
numberofstreaks += 1
break
print(numberofstreaks)
print('Chance of steak:',(numberofstreaks/100))
注意:他们目前正在学习列表,这就是为什么他们的代码必须包含列表的使用。
提前谢谢!
解决方案
据我了解,您的代码并未考虑给定 100 次投掷硬币中的多个条纹。您可以通过将 i 移动 6 位来实现这一点,一旦它发现一个条纹,这样它就不会将 > 6 的条纹算作多个条纹。
推荐阅读
- node.js - 需要一个文件并在任何地方使用它
- github - 是否可以在 GitHub 个人资料上显示电子邮件,同时将其他电子邮件保密?
- c - 有没有办法在程序达到一定数量的帧后中断程序?
- python-3.x - 来自两个输入源的自定义 TensorFlow 层
- python - python:根据键值条件从dict列表中删除元素
- compare - Statmodels 比较模型的结果
- javascript - 如何让 Typescript 对在 React 中将字符串转换为 HTML 元素感到满意?
- javascript - 在提交 Javascript/Jquery 时保存输入状态
- javascript - 当在 then 内部使用 setTimeout 时,Promises 将什么值传递给 then,为什么它会增加?
- python - 当其他命令正在运行时,Discord bot 不接受命令