0

正の整数 n を入力として取り、n 回のクラップス ゲームをシミュレートし、プレイヤーが勝ったゲームの割合を返す関数を書きたいと思います。

私が書いたコードをシミュレートする基礎となるクラップスは次のとおりです。

import random
def craps():
    dice = random.randrange(1,7) + random.randrange(1,7)
    if dice in (7,11):
        return 1
    if dice in (2,3,12):
        return 0
    newRoll = random.randrange(1,7) + random.randrange(1,7)
    while newRoll not in (7,dice):
        newRoll = random.randrange(1,7) + random.randrange(1,7)
    if newRoll == dice:     
        return 1
    else:
        return  0

import random
def testCraps(n):
    count = 0
    fract = count/n
    games = n*craps()
    for i in range(games):
        if i == 1:
            count +=1
        else:
            pass
    return fract

usage:

>>> fracCraps(10000) 
0.4844
>>> fracCraps(10000)
0.492

実行時に得られるものは次のとおりです。

>>> testCraps(10000)
0.0

カウンターを機能させることができません。

4

2 に答える 2

1

when is0を設定したため、毎回結果として得られます。ループを介して毎回リセットするためですループ外の関数の先頭で、一度設定するだけです。同じことが言えます; あなたはそれが最後に行われることを望んでいます(または、さらに良いことに、ちょうど最後に、完全に排除します).fract = countW/ncountW0countW 0fractreturn countW/nfract

import random
def testCraps(n):
    countW = 0
    for i in range(n):
        # The rest of your code
    return countW/n

# Example output
print(testCraps(10000)) # 0.6972
print(testCraps(10000)) # 0.698

@new コンテンツを編集

ここで与えられた回答を半分しか実装していないため、質問を編集して別の質問をしたようです。正しいもの ( count/n) を返していることを確認し、意図したときにループ内で呼び出していることを確認する必要があります。またはのn*craps()いずれかです。単に aまたは a を返すためです。あなたが望むのは、時間、電話して結果を評価することです。n0craps()10ncraps()

def testCraps(n):
    count = 0
    for _ in range(n):
        if craps() == 1: # "play" a craps game and check the result
            count +=1
    return count/n

# Example output
print(testCraps(10000)) # 0.4971
print(testCraps(10000)) # 0.4929
于 2013-05-23T20:23:21.663 に答える
0

for ループの各反復の開始時に、 にリセットcountWしてい0ます。実行中のカウントを維持するには、for ループの外側で一度ゼロに設定します。

fractまた、 for ループの外に計算を移動したいと考えています。fracすべてのループが完了したら、 を計算します。

于 2013-05-23T20:22:30.640 に答える