Составное условие
Для логических значений and требует истинности обеих частей, or — хотя бы одной. Проверки можно объединять в выражение и возвращать его результат напрямую. Скобки помогают показать группировку и не полагаться на память о приоритетах.
Задание источника
Реализуйте проверку високосного года по правилу упражнения: год делится на 4, кроме делящихся на 100; делящиеся на 400 всё же считаются високосными.
def is_leap_year(year: int) -> bool:
return (year % 4 == 0 and year % 100 != 0) or year % 400 == 0
Четыре контрольных значения
| Год | Причина | Результат |
|---|---|---|
| 1900 | Делится на 100, но не на 400 | False |
| 2000 | Делится на 400 | True |
| 2024 | Делится на 4, не на 100 | True |
| 2025 | Не делится на 4 | False |
Эти примеры проверяют каждую смысловую ветвь, а не только обычный год, кратный четырём.
Почему одного остатка недостаточно
Проверка year % 4 == 0 не учитывает исключение столетий и ошибается на 1900. Проверка только делимости на 400 слишком строгая и исключает 2024. Нужна именно комбинация двух условий.
Что возвращают части
Каждое сравнение остатков даёт bool, поэтому итоговое выражение в этом решении тоже логическое. В более общем случае and и or могут возвращать сами операнды, а не обязательно bool; это рассматривается отдельно.
Задание реализует заданное арифметическое календарное правило. Оно не определяет, какая система летоисчисления исторически использовалась в конкретной стране и дате, и не проверяет допустимость отрицательных значений года.
Hexlet / Code Basics и участники · Исходный урок и решение · GNU AGPL v3. Правило упражнения сохранено; ветви проверены.