计算掷骰子中胜利的比例

时间:2013-05-22 20:56:06

标签: python-3.x count

我想编写一个函数,它将正整数n作为输入,模拟n掷骰子游戏,并返回玩家赢得的游戏比例。

模拟我编写的代码的底层craps如下:

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

我无法让计数器工作。???

2 个答案:

答案 0 :(得分:1)

您每次都会收到0,因为您在fract = countW/ncountW时设置了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()n0,因为craps()只返回10。您想要的是,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

答案 1 :(得分:0)

在for循环的每次迭代开始时,您正在将countW重置为0。在for循环外部将其设置为零以保持运行计数。

您还想在for循环之外移动fract的计算。完成所有循环后计算frac