Python中的垃圾

2024-05-28 23:10:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着模拟n个垃圾游戏。代码对我来说似乎很有意义,但我从来没有得到正确的结果。例如,如果我输入n=5,即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)

Tags: orgamefalsereturnifdef玩家sim
3条回答

别这样做

    for i in range(n):
        if game():
            wins = wins + 1
        if not game():
            losses = losses + 1

结果一点也不好。

在这个代码中

for i in range(n):
    if game():
        wins = wins + 1
    if not game():
        losses = losses + 1

你给game()打两次电话,所以你就在那里玩两个游戏。你想要的是一个else块:

for i in range(n):
    if game():
        wins = wins + 1
    else:
        losses = losses + 1

顺便说一下,您可以使用in简化逻辑:

def game():
    dice = roll()

    if dice in (2,3,12):
        return False

    if dice in (7,11):
        return True

    # keep rolling
    while True:
        new_roll = roll()

        # re-rolled the initial value => win
        if new_roll==dice:
            return True

        # rolled a 7 => loss
        if new_roll == 7:
            return False

        # neither won or lost, the while loop continues ..

代码与您给出的描述完全一致。

问题在于

        if game():
            wins = wins + 1
        if not game():
            losses = losses + 1

相反,应该是

        if game():
            wins = wins + 1
        else:
            losses = losses + 1

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

相关问题 更多 >

    热门问题