为什么我在传递函数时出现语义错误rollDie()
,checkPascal(numTrials, roll)
但是当我传递它的名称,然后将括号放在变量之后,它会按预期工作?(请看一下代码)。我已经尝试过使用它并且也在寻找,但我似乎无法正确地用它来找到任何地方的答案。
这将不胜感激,因为我似乎无法弄清楚。这不是什么大问题,这个问题甚至不是课堂作业的一部分。我们正在我的 OpenCourseWare MITx 课程中学习蒙特卡罗方法,我偶然发现了这一点。我不知道为什么括号在他们所在的地方。我认为它们应该在 def 行中。我正在参加以前录制的免费在线课程,所以我没有可以告诉我的讲师。谢谢。
import random
def rollDie():
"""returns a random int between 1 and 6"""
return random.choice([1,2,3,4,5,6])
def checkPascal(numTrials, roll):
yes = 0.0
for i in range(numTrials):
for j in range(24):
d1 = roll #correct line would be d1 = roll()
d2 = roll #d2 = roll()
if d1 == 6 and d2 == 6:
yes += 1
break
print 'Probability of losing =', 1.0 - yes/numTrials
checkPascal(10000, rollDie()) #incorrect code
#correct code would be checkPascal(10000, rollDie)
据我了解,“滚动”只是一个变量,变量不能有参数,至少我是这么认为的。这似乎在直觉上是错误的。这是因为它是弱类型语言吗?我很好奇。谢谢。