Python编程骰子游戏?

时间:2011-11-21 01:01:35

标签: python python-3.x

我正在尝试为Pig骰子游戏进行模拟。我希望它模拟用户想要的游戏数量(每个游戏达到100分),并报告每个玩家的平均积分和胜率。我的程序正在运行但它只运行一个游戏。我认为我的循环有问题,但我无法分辨。感谢您的帮助和时间,这是我的计划:

from random import randrange    # Use "randrange(1, 7)" to get a random
                                # number between 1 and 6.

# Takes one turn in the game of pig.  Keeps rolling until either
# the holdAmount is reached or a pig (1) is rolled.  Returns the
# score accumulated during the turn.
def takeTurn(holdAmount):
    totalScore = 0
    while totalScore < holdAmount:
        rollValue = randrange(1,7)
        if rollValue == 1:
            totalScore = 0
            break
        else:
            totalScore = totalScore + rollValue
    return totalScore 

    # Start with turn score equal to 0.  Repeatedly roll die, adding
    # roll value to score each time, until score reaches holdAmount.
    # If at any time a pig (1) is rolled, set score to 0 and end the
    # turn early.


# Tests the takeTurn function.
def main():
    first = eval(input("How many points should the first player try for in each turn?"))
    second =  eval(input("How many points should the second player try for in each turn?"))
    games = eval(input("How many games should be simulated?"))
    firstScore = 0
    secondScore = 0
    turnCount = 0
    score = 0
    score1 = 0
    won = 0
    won1 = 0
    for i in range(games):
        while firstScore < 100 and secondScore < 100:
            firstScore = takeTurn(first) + firstScore
            secondScore = takeTurn(second) + secondScore
            turnCount = turnCount + 1
        if firstScore >= 100:
            won = won + 1
        elif secondScore >= 100:
            won1 = won1 + 1
        score = score + firstScore
        score1 = score1 + secondScore
    percent = won / games
    percent1 = won1 / games
    points = score / games
    points2 = score1 / games
    print("The average points for player one is",points)
    print("The percent of games won for player one is",percent)
    print("The average points for player two is",points2)
    print("The percent of games won for player two is",percent1)



if __name__ == "__main__":
    main()

3 个答案:

答案 0 :(得分:1)

当我第一次看到这个时,我感到很困惑。原因是每个游戏以相同的分数结束,因为您不会每次都重置firstScore等值。如果你在for循环开始时将每个都设置为0,那么你就不会有任何问题。

更具体地说,如果您将for循环中的firstScore,secondScore和turnCount移到最顶部,则代码可以正常运行。

答案 1 :(得分:0)

更好地理解程序正在做什么的传统方法是在循环和分支点添加一些打印语句。

更高级的技术是使用pdb跟踪程序。

答案 2 :(得分:0)

您的for循环中需要firstScoresecondScore