0

rollDie()関数をに渡すとセマンティック エラーが発生するのに、関数checkPascal(numTrials, roll)の名前を渡し、変数の後にかっこを置くと、意図したとおりに機能するのはなぜですか? (コードを見てください)。私はそれをいじってみましたが、どこでも答えを見つけるためにそれを正しく言葉にすることができないようです.

私はそれを理解できないように見えるので、これは非常に高く評価されます。それは大したことではなく、この質問は授業の一部でもありません. 私の OpenCourseWare MITx クラスでモンテカルロ法について学んでいますが、たまたまこれに出会いました。なぜ括弧がどこにあるのかわかりませんでした。私はそれらが定義ラインにあるはずだと思いました。以前に録画した無料のオンライン クラスを受講しているので、教えてくれる講師がいません。ありがとう。

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)

私が理解しているように、「ロール」は単なる変数であり、変数は引数を持つことはできません。少なくとも私はそう思いました。直感的に間違っているように思えます。これは、型付けが弱い言語だからですか?とても興味があります。ありがとう。

4

1 に答える 1