我想模拟抛一枚硬币500次。然后,我必须创建一个图表来显示在x轴上有倒装号码的硬币和在y轴上有倒装号码的硬币时头部的运行比例。我编写了Python代码,得到了以下错误:
Traceback (most recent call last):
File "E:\ProgramsPython\My\bayes\Coin Flip.py", line 22, in <module>
ylist = [coinFlip(x) for x in xlist]
File "E:\ProgramsPython\My\bayes\Coin Flip.py", line 16, in coinFlip
return heads / x
ZeroDivisionError: integer division or modulo by zero
我做错了什么?
# -*- coding: cp1251 -*-
import random
import pylab
from matplotlib import mlab
def coinFlip(size):
heads = 0
tails = 0
for x in xrange(size):
flip = random.randint(0,1)
if flip == 1: heads += 1
else: tails += 1
return heads / x
xmin = 1
xmax = 500
dx = 1
xlist = mlab.frange (xmin, xmax, dx)
ylist = [coinFlip(x) for x in xlist]
pylab.plot(xlist, ylist)
pylab.show()
x
可以等于零。当这种情况发生时(特别是当coinFlip(1)
被调用时)引发零分区错误。
顺便说一下,因为您使用的是
matplotlib
,所以必须安装NumPy
。因此,您可以像这样使用expresscoinFlip
:或者(使用@pjs的注释),查看在一次500个硬币的投掷中头部的比例是如何变化的:
要在对数刻度上绘制x轴:
嗯,错误是说你除以零。所以有一条线,可能在那里。
试着把你的回报改成这个(在我看来还是更有意义的):
相关问题 更多 >
编程相关推荐