在python中模拟掷骰子的n场比赛

时间:2013-11-12 04:13:36

标签: python-3.x simulation

我是python的新手,我一直在尝试制作这个模拟器,为#34;游戏"掷骰子我的教授希望它以最基本的形式制作,这就是有一个功能可以滚动一个骰子而另一个骰子的原因。出于某种原因,我无法让我的simOneGame函数合作,我甚至无法在为其分配变量时打印一个值,尽管它应该打印1或0.这是我的代码:

def main():
    x = eval(input("how many games will be played?: "))
    y = simNGames(x)
    print(y)

def simOneGame():
    win = 0
    lose = 0
    x = rollDice()
    if x == 2 or x == 3 or x == 12:
        lose += 1
    elif x == 7 or x == 11:
        win += 1
    y = rollDice()
    while y != 7 or y != x :
        y = rollDice()
    if y == x:
        win += 1
    elif y == 7 :
        lose += 1

    if win > lose:
        return(1)
    else:
        return(0)

def simNGames(n):
    wins = 0
    loses = 0
    x = simOneGame()
    for i in range(n):
        if x > 0:
            wins += 1
        else:
            pass
    frac = wins / n
    return float(frac)

def rollDice():
return rollDie() + rollDie()

def rollDie():
return randrange(1,7)

除非输入一个大于100的数字并且它始终为1.0

,否则我无法得到答案

1 个答案:

答案 0 :(得分:0)

我在您的代码中看到了几个问题。

首先,您的simNGames实际上只模拟一个游戏,但随后它会将该游戏的结果加n次。您需要在循环内移动x = simOneGame()行,以便重复调用它。

simOneGame函数的逻辑存在单独的问题。单个掷骰子游戏要么赢了,要么丢失,没有得分。这意味着您不需要添加赢或输值。您应该更改win += 1执行return 1的所有地点,而lose += 1的所有地点应该return 0(这意味着您可以删除其余的代码也处理winlose变量。)

您也可以考虑返回TrueFalse而不是1和0,但这可能是由您的老师决定的,而且它更像是设计风格点而不是错误。

最后,我认为simOneGame中的while循环需要and而不是or才能使逻辑正常工作。