Python: Как заставить программу повторно запрашивать ввод, пока пользователь не ответит "да" или "нет"?

Обучаюсь кодингу на Python, решил написать простенькую игру в кости с программой.

# Демонстрирует генерацию случайных чисел

import random   # создаем случайные числа из диапазона

x = input("Хотите сыграть? ")
if x == "да":
    while x == "да":
        dice_1 = random.randint(1, 6)
        dice_2 = random.randrange(6) + 1
        my_total = dice_1 + dice_2

        dice_3 = random.randint(1, 6)
        dice_4 = random.randrange(6) + 1
        enemy_total = dice_3 + dice_4

        print("При Вашем броске выпало", dice_1, "и", dice_2, "очков, в сумме:", my_total)
        print("При броске Вашего соперника выпало", dice_3, "и", dice_4, "очков, в сумме:", enemy_total)
        if my_total > enemy_total:
            print("Поздравляем! Вы выиграли! Попробуйте ещё раз!")
        elif my_total < enemy_total:
            print("К сожалению, Вы проиграли... Возьмите реванш!")
        else:
            print("Ничья! Попробуйте ещё раз, чтобы выяснить, на чьей стороне Госпожа Удача!")
        x = input("Хотите сыграть ещё? ")
        if x == "нет":
            print("Хорошо, тогда до встречи!")
            break
elif x == "нет":
    print("Хорошо, тогда до встречи!")

Хочу добавить фичу, чтобы при вводе любого другого ответа, кроме "да" или "нет", программа просила ответить "да" или "нет" до получения корректного ответа для дальнейшей работы кода.


Ответы (2 шт):

Автор решения: Evgenii Evstafev

Добавьте в начало, например, такой код:

x = ""
while x.lower() != "да" and x.lower() != "нет":
    print("Введите 'да' или 'нет'")
    x = input("Хотите сыграть? ")
→ Ссылка
Автор решения: Stanislav Volodarskiy

Я бы сделал такую спрашивалку:

def yes_or_no(prompt):
    while True:
        answer = input(prompt)
        if answer == "да":
            return True
        if answer == "нет":
            return False
        print("Не понял. Ответьте \"да\" или \"нет\".")

Тогда программу можно записать так:

if yes_or_no("Хотите сыграть? "):
    while True:
        dice_1 = random.randint(1, 6)
        dice_2 = random.randrange(6) + 1
        my_total = dice_1 + dice_2

        dice_3 = random.randint(1, 6)
        dice_4 = random.randrange(6) + 1
        enemy_total = dice_3 + dice_4

        print("При Вашем броске выпало", dice_1, "и", dice_2, "очков, в сумме:", my_total)
        print("При броске Вашего соперника выпало", dice_3, "и", dice_4, "очков, в сумме:", enemy_total)
        if my_total > enemy_total:
            print("Поздравляем! Вы выиграли! Попробуйте ещё раз!")
        elif my_total < enemy_total:
            print("К сожалению, Вы проиграли... Возьмите реванш!")
        else:
            print("Ничья! Попробуйте ещё раз, чтобы выяснить, на чьей стороне Госпожа Удача!")

        if not yes_or_no("Хотите сыграть ещё? "):
            break
print("Хорошо, тогда до встречи!")
→ Ссылка