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

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

Решение задачи на языке программирования 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}')


Решение задач на Python




Все разделы сайта