Программа "Угадай число" на Python. Отгадать случайное число

Программа "Угадай число"

Решение задачи на языке программирования Python

Напишите программу, которая предлагает пользователю отгадать "загаданное компьютером" (случайно сгенерированное) число. После каждой неудачной попытки программа выводит сообщение о том, больше или меньше введенное человеком число, чем загаданное. Программа должна подсчитывать количество попыток, за которые человек угадывает число.

Программа "Угадай число" на языке программирования Python (исходный код)
#
×

Пример выполнения программы:

Отгадай число от 1 до 100
1-я попытка: 50
Много
2-я попытка: 25
Мало
3-я попытка: 37
Много
4-я попытка: 31
Мало
5-я попытка: 34
Правильно. Я загадал 34

Чтобы отгадать число за как можно меньшее число попыток, надо диапазон допустимых чисел всегда делить на 2. Так, если неизвестное число лежит в диапазоне от 1 до 100, то его середина — это 50. Если становится известно, что число меньше 50-ти, значит, оно лежит в диапазоне от 1 до 50, середина которого — это 25.

Поскольку человек должен вводить числа до тех пор, пока не угадает "загаданное", задача решается через цикл, который будет выполняться, пока числа не станут равны друг другу.

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

from random import randint

secret_number = randint(1, 100)
print('Отгадай число от 1 до 100')

user_number = 0
try_count = 0

while user_number != secret_number:
    try_count += 1
    user_number = int(input(f'{try_count}-я попытка: '))
    if user_number > secret_number:
        print('Много')
    elif user_number < secret_number:
        print('Мало')
    else:
        print(f'Правильно. Я загадал {secret_number}')

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

while user_number != secret_number:
    try_count += 1
    user_number = int(input(f'{try_count}-я попытка: '))
    if user_number > secret_number:
        print('Много')
    elif user_number < secret_number:
        print('Мало')
    elif user_number == secret_number:
        print(f'Правильно. Я загадал {secret_number}')

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

from random import randint

secret_number = randint(1, 100)
print('Отгадай число от 1 до 100')

user_number = 0
try_count = 0

while user_number != secret_number:
    try_count += 1
    user_number = int(input(f'{try_count}-я попытка: '))
    if user_number > secret_number:
        print('Много')
    elif user_number < secret_number:
        print('Мало')

print(f'Правильно. Я загадал {secret_number}')

Здесь последнее выражение программы сможет выполниться только после завершения работы цикла. Но цикл завершится только при условии, что числа (загаданное и введенное) совпадут.