Задать вопрос
@nihi1ist

Задача на Python. Как найти число?

Решаю задачу. Надо написать код, с помощью которого можно вычислить число (от 1 до 100) отвечая на вопросы (1 — равно, 2 — больше, 3 — меньше.). При этом число надо угадать в пределах 7 попыток. Логически я представляю как это сделать, но как реализовать в коде до меня не доходит.
Начальная цифра 50, шаг допустим 24. Как отследить, что если сначала было больше, число уменьшилось на 24 и стало меньше. То надо сократить шаг в половину?
  • Вопрос задан
  • 410 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@antares4045
Ваша задача называется бинарный поиск
def binsearch(min, max, check):
    support = (min + max) // 2
    result = check(support)
    if result == 'меньше':
        return binsearch(support+1, max, check)
    if result == 'больше':
        return binsearch(min, support-1, check)
    return support

def guess(num):
    print('загадано', num)
    def check(req):
        result = 'равно' if req == num else 'меньше' if req < num else 'больше'
        print(f'это {req}?', '-', 'Да' if result=='равно' else f'Нет, твоё число {result}')
        return result
    return check


binsearch(0, 100, guess(10))
print('='*30)
binsearch(0, 100, guess(27))
print('='*30)
binsearch(0, 100, guess(50))
print('='*30)
binsearch(0, 100, guess(100))


загадано 10
это 50? - Нет, твоё число больше
это 24? - Нет, твоё число больше
это 11? - Нет, твоё число больше
это 5? - Нет, твоё число меньше
это 8? - Нет, твоё число меньше
это 9? - Нет, твоё число меньше
это 10? - Да
==============================
загадано 27
это 50? - Нет, твоё число больше
это 24? - Нет, твоё число меньше
это 37? - Нет, твоё число больше
это 30? - Нет, твоё число больше
это 27? - Да
==============================
загадано 50
это 50? - Да
==============================
загадано 100
это 50? - Нет, твоё число меньше
это 75? - Нет, твоё число меньше
это 88? - Нет, твоё число меньше
это 94? - Нет, твоё число меньше
это 97? - Нет, твоё число меньше
это 99? - Нет, твоё число меньше
это 100? - Да
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@lirostin
nihi1ist советую для закрепления материала порешать легкие задачки на leetcode. Вот раздел с задачами на бинарный поиск: https://leetcode.com/tag/binary-search/ ; )
Вы же поняли из примера решения как его реализовывать? Сможете написать решение задачи:
Дан массив arr и число K. Необходимо вывести True если число есть в массиве или вывести False если его нет.
Примеры:
Input:
K = 6
arr = [1,2,3,4,6]
Output: True

Input:
K = 2
arr = [1,3,4,5,6]
Output: False
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы