Не начинается заново цикл While в Python

Простой код игры "Угадай число" Игра проходится нормально, но при вопросе "хотите сыграть еще раз" ( и ответе "да") - игра не начинается заново. Хотя при ответе "нет" - игра заканчивается с принтом "Спасибо за игру" В чем может быть проблема?

вот исходный код:

import random
max_number = 2
random_number = random.randint(1, max_number)
user_number = 0
attempts = 0
start_game = True
restart = 0
while bool(start_game):

    while user_number != random_number:
        user_number = int(input("угадай число (от 1 до 100):"))
        attempts += 1
        if user_number > random_number:
            print(f"число {user_number} больше, чем загаданное")
        elif user_number < random_number:
            print(f"число {user_number} меньше, чем загаданное")
        else:
            print()
            print(f"Поздравляю, правильное число {random_number}!")
            print()
            print(f"количество попыток : {attempts}")
            print("Игра окончена")
            print()



    restart = input("хочешь сыграть еще раз? \"y\" или \"n\"")
    
    if restart == "n":
        start_game = False
    if restart == "y":
        start_game = True

print("спасибо за игру!")

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

Автор решения: Brain of Мadness

Добавь принты перед вторым циклом, тогда станет понятно, что при повторном выполнении второго цикла у тебя не будет выполняться условие user_number != random_number. Так как значения random_number и user_number не сброшены (user_number = random_number / 1 = 1), цикл в таком случае пропускается.

while bool(start_game):
    print(random_number)
    print(user_number)
    while user_number != random_number:

Вывод в консоли:

1
0
угадай число (от 1 до 100):1

Поздравляю, правильное число 1!

количество попыток : 1
Игра окончена

хочешь сыграть еще раз? "y" или "n"y
1
1
хочешь сыграть еще раз? "y" или "n"

Для исправления ошибки нужно снова выбрать рандомно новое число, сбросить введенное пользователем число и количество попыток при выборе "y":

    if restart == "y":
        start_game = True
        random_number = random.randint(1, max_number)
        user_number = 0
        attempts = 0

В целом, код можно улучшить так:

import random

max_number = 2
random_number = random.randint(1, max_number)
user_number = 0
attempts = 0
start_game = True
# restart = 0 # это можно убрать, так как переменная создастся внутри цикла
while start_game: # bool() можно не писать

    while user_number != random_number:
        user_number = int(input("угадай число (от 1 до 100):"))
        attempts += 1
        if user_number > random_number:
            print(f"число {user_number} больше, чем загаданное")
        elif user_number < random_number:
            print(f"число {user_number} меньше, чем загаданное")
        else:
            # print()
            # print(f"Поздравляю, правильное число {random_number}!")
            # print()
            # print(f"количество попыток : {attempts}")
            # print("Игра окончена")
            # print()

            # Это можно заменить на:

            print(f"\nПоздравляю, правильное число {random_number}!\n\n"
                  f"количество попыток : {attempts}\n"
                  f"Игра окончена\n\n")

    restart = input("хочешь сыграть еще раз? \"y\" или \"n\"")

    if restart == "n":
        start_game = False

    if restart == "y":
        start_game = True
        random_number = random.randint(1, max_number)
        user_number = 0
        attempts = 0

print("спасибо за игру!")
→ Ссылка