Проблема с простой игрой в кости с использованием python - PullRequest
0 голосов
/ 06 августа 2020

Я новичок в python, поэтому я решил сделать простую игру в кости, используя while l oop, просто чтобы провести простой тест. В игре я использую модуль random и метод random.randint(1, 6) для вывода случайного целого числа любого значения от «1 до 6», что, очевидно, так работает в реальной жизни. Но чтобы сделать это игрой, если напечатанное целое число - четное (random.randint(1, 6) % 2 ==0), то будет напечатано «вы выиграете». Если целое число нечетное, печатается «вы проиграли». После этого консоль спрашивает, хотите ли вы снова бросить кубик, и если вы ответите «да» (без учета регистра, следовательно, .lower()), он снова бросит, и l oop продолжится, но если вы скажете что-нибудь еще, l oop breaks.

Я думал, что это будет так, но время от времени, когда выпадает четное число, печатается «вы проигрываете», а для нечетных чисел - наоборот, что не то, что я думал, что я закодировал свой l oop, чтобы сделать. Очевидно я что-то не так делаю. Кто-нибудь может помочь?

Это мой код:

import random
min = 1
max = 6

roll_again = True
while roll_again:
    print(random.randint(min, max))
    if random.randint(min, max) % 2 == 0:
        print('you win')

    else:
        print('you lose')

    again = input('roll the dice? ').lower()
    if again == ('yes'):
        continue
    else:
        print('ok')
        break

Ответы [ 5 ]

1 голос
/ 06 августа 2020

Вы генерируете случайное число дважды, напечатанное число не совпадает с числом, которое вы проверяете в условии if.

Вы можете сохранить число, сгенерированное в такой переменной, как проверьте, работает ли ваш код:

import random
min = 1
max = 6

roll_again = True
while roll_again:
    number = random.randint(min, max)
    print(number)
    if number % 2 == 0:
        print('you win')

else:
    print('you lose')

again = input('roll the dice? ').lower()
if again == ('yes'):
    continue
else:
    print('ok')
    break
1 голос
/ 06 августа 2020
print(random.randint(min, max))
if random.randint(min, max) % 2 == 0:
    print('you win')

Это два отдельных звонка на randint(), вероятно, с получением двух разных номеров.

Вместо этого позвоните randint() один раз и сохраните результат, затем используйте этот результат в обоих местах:

roll = random.randint(min, max)
print(roll)
if roll % 2 == 0:
    print('you win')
0 голосов
/ 06 августа 2020

random.randint (min, max) при каждом выполнении возвращает разные значения. Итак, лучшее, что вы можете сделать, - это сохранить значение при самом первом выполнении и проверить это сохраненное значение на выигрыш или проигрыш.

Вы можете попробовать эту версию кода:

import random

while(True):
    value = random.randint(1,6)
    print(value)
    if(value % 2 == 0):
        print("You Win!")
    else:
        print("You Lose!")

    again = input("Want to roll Again? Type 'Yes' or 'No'")
    if(again.lower() != 'yes'):
        break
0 голосов
/ 06 августа 2020

Вам нужно присвоить переменной случайное число, прямо сейчас напечатанное, а другое - это разные числа.

import random
min = 1
max = 6
dice = 0

while True: 
    dice = random.randint(min, max) 
    print(dice) 
 
    if dice % 2 == 0: 
        print('you win') 
    else: 
        print('you lose') 

    again = input('roll the dice? ').lower() 
    if again == ('yes'): 
        continue 
    else: 
        print('ok') 
        break 
0 голосов
/ 06 августа 2020

Проблема в том, что вы печатаете одно случайное число, но затем основываете результаты на другом случайном числе. Вы можете решить эту проблему, используя переменную, например:

import random
min = 1
max = 6

roll_again = True
while roll_again:
    dice_roll = random.randint(min, max)
    print(dice_roll)
    if dice_roll % 2 == 0:
        print('you win')
    else:
        print('you lose')

    again = input('roll the dice? ').lower()
    if again == ('yes'):
        continue
    else:
        print('ok')
        break
...