python中的掷骰子

0 python dice

我正在尝试模拟n场比赛的掷骰子.代码似乎对我有意义,但我从来没有得到正确的结果.例如,如果我输入n = 5即五场比赛,则胜负总和大于5.

这是它应该如何工作:如果初始滚动是2,3或12,则玩家输掉.如果掷骰是7或11,则玩家获胜.任何其他初始滚动都会导致玩家再次滚动.他继续滚动,直到他掷出7或初始掷骰的价值.如果他在滚动7之前重新滚动初始值,那就是胜利.首先滚动7​​是一个损失.

from random import randrange

    def roll():
        dice = randrange(1,7) + randrange (1,7)
        return dice

    def sim_games(n):
        wins = losses = 0
        for i in range(n):
            if game():
                wins = wins + 1
            if not game():
                losses = losses + 1
        return wins, losses

    #simulate one game

    def game():

            dice = roll()
            if dice == 2 or dice == 3 or dice == 12:
                return False
            elif dice == 7 or dice == 11:
                return True
            else:
                dice1 = roll()
                while dice1 != 7 or dice1 != dice:
                    if dice1 == 7:
                        return False
                    elif dice1 == dice:
                        return True
                    else:
                        dice1 = roll()

    def main():

        n = eval(input("How many games of craps would you like to play? "))
        w, l = sim_games(n)

        print("wins:", w,"losses:", l)
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 5

问题在于

        if game():
            wins = wins + 1
        if not game():
            losses = losses + 1
Run Code Online (Sandbox Code Playgroud)

相反,它应该是

        if game():
            wins = wins + 1
        else:
            losses = losses + 1
Run Code Online (Sandbox Code Playgroud)

在您的代码中,您正在模拟两个游戏而不是一个游戏(通过调用game()两次).这给出了四种可能的结果而不是两种(赢/输),给出了不一致的总体结果.