我是Python的新手,并且想根据几何分布生成一些数字。我在互联网上找到了此代码,但无法正常工作:
import random from math import ceil, log def geometric(p): # p should be in (0.0, 1.0]. if ((p <= 0.0) or (p >=1.0)): raise ValueError("p must be in the interval (0.0, 1.0]") elif p == 1.0: # If p is exactly 1.0, then the only possible generated value is 1. # Recognizing this case early means that we can avoid a log(0.0) later. # The exact floating point comparison should be fine. log(eps) works just # dandy. return 1 # random() returns a number in [0, 1). The log() function does not # like 0. U = 1.0 - random.random() # Find the corresponding geometric variate by inverting the uniform variate. G = int(ceil(log(U) / log(1.0 - p))) return G p=1.0/2.0 for i in range(10): print geometric(p)
当我尝试运行时,它告诉我以下错误:
File "test.py", line 8 if (p <= 0.0) or (p >=1.0): ^ IndentationError: expected an indented block
有什么错误,我该如何解决?
在Python中,缩进很重要。PEP 8涵盖了良好的压痕样式。
以您的功能之一为例,它应如下所示:
def geometric(p): # p should be in (0.0, 1.0]. if ((p <= 0.0) or (p >=1.0)): raise ValueError("p must be in the interval (0.0, 1.0]") elif p == 1.0: # If p is exactly 1.0, then the only possible generated value is 1. # Recognizing this case early means that we can avoid a log(0.0) later. # The exact floating point comparison should be fine. log(eps) works just # dandy. return 1
如果缩进不正确,则它不是有效的Python代码。