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

0每次都会得到结果,因为您设置fract = countW/n了 when countWis 0countW总是,因为您每次都通过循环重置它 0您只想在循环外函数的开头设置一次。也一样fract;您希望在最后完成(或者更好的是,就return countW/n在最后并fract完全消除)。

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()nor 0,因为craps()只返回 a1或 a 0。你想要的是,n时间,调用craps()和评估结果。

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 循环的每次迭代开始时,您将重置countW0. 在 for 循环之外将其设置为零以保持运行计数。

您还希望将计算移到fractfor 循环之外。frac在所有循环完成后计算。

于 2013-05-23T20:22:30.640 回答