在Python中掷出2个骰子,如果它们相同,则再次掷出并继续

时间:2018-10-11 16:20:22

标签: python python-3.x random dice

因此,我需要编写一个Python程序,在其中我需要掷2个骰子并打印2个骰子的总和。到目前为止,我已经知道了:

import random
def monopoly():
x = random.randrange(1,7)
y = random.randrange(1,7)
while True:
    if x != y:
        print(x, '+', y, '=', x+y)
        break

现在,每次2个骰子数字相同(2 + 2或3 + 3等)时,您可以再次抛出。如果连续3次骰子相同,则需要入狱。我以为我必须像这样使用while循环来处理while循环:

    else:
    if x == y:
        print(x + y)
        continue
#continuation of the code above

现在,如果我确实有一个骰子相同的结果,它会一遍又一遍地打印出总和,直到我自己停止程序为止。但是我不知道为什么。

该如何解决??,因为我不知道该怎么做。

3 个答案:

答案 0 :(得分:1)

每个 循环迭代中需要新的随机数:

while True:
    x = random.randrange(1,7)
    y = random.randrange(1,7)
    if x != y:
        print(x, '+', y, '=', x+y)
        break

否则,xy将永远不会改变,因此您的破损状况将永远不会成立。

答案 1 :(得分:0)

程序继续循环的原因是因为它处于while循环中。

因为总是要True,所以没有办法打破循环。 起初这可能很奇怪,但是当您看到xy在循环之外定义时,它们将始终相同。

因此,如果它们相同,它将始终相同。

您必须在x部分或y语句的开始处将elsewhile重新定义为不同的变量,以便为这两个变量,否则每次都给出相同的值。

答案 2 :(得分:0)

这里是一种结构,您可以用来在滚动之间改变玩家的回合,然后将玩家送进监狱以滚动3次双打。对于双打,我们可以使用一个连续计数,如果它达到3,将print('Go to jail')。这是一个总体思路,供您使用

from random import choice
from itertools import cycle

die = [1, 2, 3, 4, 5, 6]
doubles = 0
players = cycle(['player1', 'player2'])
turn = iter(players)
player = next(turn)

while True:
    x, y = choice(die), choice(die)
    if x == y:
        print(f'{player} folled {x + y}, Doubles!')
        print(f'It is {player}\'s turn\n')
        doubles += 1

    else:
        doubles = 0 
        print(f'{player} rolled {x + y}')
        player = next(turn)
        print(f'It is {player}\'s turn\n')

    if doubles == 3:
        print(f'{player} rolled 3 Doubles! Go to jail.\n')
        player = next(turn)
        break
player1 rolled 3
It is player2's turn

player2 rolled 3
It is player1's turn

player1 folled 12, Doubles!
It is player1's turn

player1 folled 10, Doubles!
It is player1's turn

player1 folled 2, Doubles!
It is player1's turn

player1 rolled 3 Doubles! Go to jail.