← Все вопросы

хочу наоборот: я загадал число, а комп угадывает. как?

Задан 13 месяцев назад1.1к просмотров2 ответа
5

Сделал обычную «угадай число», теперь хочу прикольную версию: я загадываю число от 1 до 100 в голове, а комп угадывает и спрашивает «больше/меньше/угадал». Не понимаю как комп должен соображать, не перебирать же все числа подряд? Это же тупо будет.

2 ответа

12
✓ Принятый ответ — помог автору

Перебирать всё подряд и правда тупо. Хитрость в том, чтобы комп каждый раз называл середину диапазона — так он отрезает половину вариантов за раз (это называется бинарный поиск, но по-простому — деление пополам). Вот:

low = 1
high = 100
print("Загадай число от 1 до 100, я угадаю!")
input("Загадал? Нажми Enter...")

while True:
    guess = (low + high) // 2
    answer = input(f"Твоё число {guess}? (б — больше, м — меньше, у — угадал): ")
    if answer == "у":
        print("Ха, я знал!")
        break
    elif answer == "б":
        low = guess + 1
    elif answer == "м":
        high = guess - 1

Как работает: guess — это середина между low и high. Если ты говоришь «больше» — значит число в верхней половине, и комп поднимает нижнюю границу low. Если «меньше» — опускает high. Диапазон каждый раз сужается вдвое, поэтому любое число до 100 угадывается максимум за 7 шагов!

Как улучшить: посчитай попытки и в конце выведи «угадал за N вопросов» — друзья офигеют, что так быстро.

3

Прикольно, что комп всегда побеждает за 7 шагов максимум. Можешь ещё добавить защиту от вранья: если low > high — значит ты где-то соврал, и комп ловит тебя:

if low > high:
    print("Ты меня обманываешь :)")
    break

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект