当前位置:嗨网首页>书籍在线阅读

37-掷硬币的连胜

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.11.2 掷硬币的连胜

在本练习中,我们将尝试做一个实验。如果你掷硬币100次,并在每次正面时写下“H”,在每次反面时写下“T”,就会创建一个看起来像“T T T T T H H H H T T”这样的列表。如果你要求一个人进行100次随机掷硬币,你可能会得到交替正反的结果,例如“H T H T H H T H T T T”,(对人类而言)这看起来是随机的,但在数学上并不是随机的。即使极有可能发生在真正随机的硬币翻转中,人类也几乎永远不会写下连续6个正面或6个反面。可以预见,人类在随机性方面会很糟糕。

编写一个程序,查找随机生成的正面和反面列表中出现连续6个正面或6个反面的频率。你的程序将实验分为两部分:第一部分生成随机选择的“正面”和“反面”值的列表,第二部分检查其中是否有连胜。将所有这些代码放入一个循环中,重复该实验10 000次,这样我们就可以找出掷硬币中包含连续6个正面或反面的百分比。作为提示,函数调用 random.randint(0,1) 将在50%的时间返回0值,在另外50%的时间返回1值。

你可以从以下模板开始:

import random 
numberOfStreaks = 0
for experimentNumber in range(10000):
    # Code that creates a list of 100 'heads' or 'tails' values.
    # Code  that checks if there is a streak of 6 heads or tails in a row. 
print('Chance of streak: %s%%' % (numberOfStreaks / 100))

当然,这只是一个估计,但是10 000是一个不错的样本量。一些数学知识可以为你提供准确的答案,并且可以节省编写程序的麻烦,但是有些程序员在数学方面稍弱。