首页 > 解决方案 > 2 名玩家以 6 个标记开始。每轮掷出 3 个标准骰子。找到游戏的获胜者并估计玩家 2 获胜的概率

问题描述

如果掷出 11,则玩家 2 给玩家 1 一个标记,如果掷出 14,玩家 1 给玩家 2 一个标记。第一个收集到 12 个标记的人获胜。玩家 2 获胜的确切概率是 0.0286。这是我到目前为止所拥有的,但是当我运行它时没有任何反应。

import random
i = 0
player1 = 6
player2 = 6
rolls = 10000
while player1 != 12 or player2 != 12:
    for i in range(rolls):
        total = random.randint (1,6) + random.randint(1,6) + random.randint (1,6)
        if total == 11:
            player2 = player2 - 1
            player1 = player1 + 1
        if total == 14:
            player1 = player1 - 1
            player2 = player2 +1
        else:
            player1 = player1 + 0
            player2 = player2 + 0            
if player1 == 12:
    print('Player 1 wins')
if player2 == 12:
    print('Player 2 wins')

标签: pythonpython-3.xdice

解决方案


只要至少一名玩家没有 12 个令牌,您的 while 循环就会运行。

情况总是如此,因为总共只有 12 个令牌。

如果一个人拥有它,另一个人拥有的更少,所以你while player1 != 12 or player2 != 12是真实的,它会转来转去。

尝试

while player1 != 12 and player2 != 12:

要将游戏总共限制为 10k 轮,请在 while 循环之前初始化一个计数器,在 while 循环内增加它,如果计数器超过 10000:breakwhile 循环。

永远摆脱 for 循环,它根本不需要。


import random
i = 0
player1 = 6
player2 = 6
rolls = 10000
c = 0
while player1 != 12 and player2 != 12 and c < rolls:
    c += 1
    total = random.randint (1,6) + random.randint(1,6) + random.randint (1,6)
    if total == 11:
        player2 = player2 - 1
        player1 = player1 + 1
    if total == 14:
        player1 = player1 - 1
        player2 = player2 +1

if player1 == 12:
    print('Player 1 wins')
if player2 == 12:
    print('Player 2 wins')

推荐阅读