Что произойдёт, если передать строку в функцию проверки чётности на Python?

Почему выражение n % 2 для строки не проверяет чётность и как явно разделить проверку числа и разбор пользовательского ввода.

Короткий ответ

Что ответить на собеседовании

Если функция делает n % 2, строковый n включает операцию строкового форматирования, а не остаток от деления: обычно возникает TypeError либо получается строка. Поэтому тип нужно проверить или заранее разобрать ввод. Для целочисленного контракта неподходящий тип отклоняют; для текстового ввода используют int с обработкой ValueError.

Подробный разбор

Ответ с пояснениями

Для функции return n % 2 == 0 результат зависит от типа аргумента. У строки оператор % означает старое форматирование. Например, "4" % 2 вызывает TypeError, а "%s" % 2 возвращает строку "2", сравнение которой с числом 0 даст False. Это не надёжная валидация чисел.

Строгий целочисленный контракт

def is_even(n: int) -> bool:
    if isinstance(n, bool) or not isinstance(n, int):
        raise TypeError("Ожидается целое число")
    return n % 2 == 0

Здесь bool отклонён намеренно: в Python это подкласс int. Аннотация n: int сама по себе не выполняет проверку при вызове. Не стоит безусловно делать int(n) внутри функции: например, 4.9 превратится в 4, и ошибка входного контракта останется незаметной.

Если вход по договорённости текстовый

def is_even_text(text: str) -> bool:
    if not isinstance(text, str):
        raise TypeError("Ожидается строка")
    try:
        n = int(text, 10)
    except ValueError as exc:
        raise ValueError("Введите целое число") from exc
    return is_even(n)

" -4 " будет принято, а "4.5" и пустая строка — нет. Если продукт требует более строгого формата, например только ASCII-цифры без пробелов и разделителей, его проверяют отдельно до преобразования. Невалидный ввод не следует возвращать как False: это смешало бы ошибку с корректным ответом «число нечётное».

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку