0

我对 python 还是很陌生,我一直在尝试制作这个模拟器,它可以为掷骰子的“游戏”创建一个模拟器。我的教授希望它尽可能以最基本的形式制作,这就是具有滚动一个骰子然后另一个骰子的功能的原因。出于某种原因,我无法让我的 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,否则我不会得到答案

4

1 回答 1

0

我看到你的代码有几个问题。

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

simOneGame您的函数逻辑存在一个单独的问题。一场掷骰子游戏要么输赢,要么输,不计分。这意味着您不需要将赢和输值相加。您应该更改所有您要做win += 1return 1地方,以及所有lose += 1应该做的地方return 0(这意味着您也可以摆脱处理winandlose变量的其余代码)。

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

最后,我认为 while 循环simOneGame需要一个and而不是一个or来使逻辑正常工作。

于 2013-11-12T04:31:02.397 回答