写一个程序来模拟抛硬币100次并计算头数。重复此模拟10 ** 5次以获得头数的分布。
我写了下面的代码来计算头数100次,而外环应该重复我的函数100K次以获得头部的分布:import random
def coinToss():
return random.randint(0, 1)
recordList = []
for j in range(10**5):
for i in range(100):
flip = coinToss()
if (flip == 0):
recordList.append(0)
print(str(recordList.count(0)))
但是每次我运行我的程序,而不是获得100K头概率的列表,我没有更高的#s,有人能告诉我我做错了吗?
42
89
136
...
392
442
491
答案 0 :(得分:4)
这是一个带有numpy的版本,可让您更优雅地生成随机数,因为您还可以指定尺寸属性。
{{1}}
答案 1 :(得分:1)
由于原始问题要求分配头数,您需要跟踪两个列表:一个用于每100次试验的头数,另一个用于当前100次试验的头数
import random
def coinToss():
return random.randint(0, 1)
experiments = [] # Number of heads per 100-toss experiment
for j in range(10**5):
cnt = [] # Number of heads in current 100-toss experiment
for i in range(100):
flip = coinToss()
if (flip == 0):
cnt.append(0)
experiments.append(cnt.count(0))
print(str(cnt.count(0)))
但是,我强烈建议在numpy
这样做,这将大大提高性能。您可以使用numpy
执行此操作:
import numpy as np
experiments = np.random.binomial(n=100, p=0.5, size=10**5)
然后,您可以使用您想要的任何工具分析/绘制头部分布的分布(例如numpy
,matplotlib
)。
答案 2 :(得分:1)
您可能会注意到每次头部的头部数量大约多50个。这是因为每次循环时都不会将记录计数器重置为[]。如果添加" recordList = []"在你的print语句之后,并且使用相同的缩进,它基本上会修复你的代码。
另一种很好的方法是将100枚硬币翻转实验包裹在一个函数中,然后将函数调用10 ** 5次。您还可以使用列表理解来使一切变得简洁明了:
{{1}}
答案 3 :(得分:-1)
您可以使用所有硬币翻转模拟一个矩阵,然后在该矩阵上进行计算。
var array = $scope.myArray.split(',');