Бросаем 2 кубика в Python и, если они совпадают, бросаем снова и продолжаем - PullRequest
0 голосов
/ 11 октября 2018

Итак, мне нужно написать программу на 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, используя continue следующим образом:

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

Теперь, если у меня есть результат, когда кости одинаковы, он продолжает печатать сумму снова и снова, пока я не перестанупрограмма сама.Но я не знаю почему.

Как мне это исправить ?, потому что я понятия не имею, как это сделать.

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Причина, по которой программа продолжает цикл, состоит в том, что она находится в цикле while.

Поскольку это всегда будет True, нет способа разорвать цикл.Сначала это может показаться странным, но когда вы посмотрите, вы увидите, что x и y определены вне цикла, они всегда будут одинаковыми.

Поэтому в случае их совпадения всегда будет одинаково.

Вам потребуется переопределить x и y как разные переменные в разделе else, илив начале оператора while для генерации новых значений для этих двух переменных, в противном случае одно и то же значение присваивается каждый раз.

0 голосов
/ 11 октября 2018

Вот структура, которую вы можете использовать, чтобы менять ходы игрока между бросками, а затем отправлять игрока в тюрьму за бросок 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.
0 голосов
/ 11 октября 2018

Вам нужны новые случайные числа в каждой итерации цикла :

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

В противном случае x и y никогда не изменятся, и поэтому ваше условие прерывания никогда не будет выполняться.

...