Не начинается заново цикл 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 шт):
Добавь принты перед вторым циклом, тогда станет понятно, что при повторном выполнении второго цикла у тебя не будет выполняться условие 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("спасибо за игру!")