/
IvanKhabarov
/
python
Обзор
Документация
Войти
/
IvanKhabarov
/
python
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
Practice/pw6/task7.py
66 строк
3 KB
Ivan-Khabarov
Добавлена работа на уроке 6
10 сен 2024, 20:24
10 сен 2024, 20:24
f34d3eb
Код
Авторство
О чём код?
# Задание №7 # � Создайте модуль и напишите в нём функцию, которая # получает на вход дату в формате DD.MM.YYYY # � Функция возвращает истину, если дата может существовать # или ложь, если такая дата невозможна. # � Для простоты договоримся, что год может быть в диапазоне # [1, 9999]. # � Весь период (1 января 1 года - 31 декабря 9999 года) # действует Григорианский календарь. # � Проверку года на високосность вынести в отдельную # защищённую функцию. def _is_leap_year(year): """ Защищённая функция для проверки, является ли год високосным. Високосный год делится на 4, но не делится на 100, кроме тех, что делятся на 400. """ return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0) def is_valid_date(date_str): """ Функция принимает дату в формате DD.MM.YYYY и проверяет её корректность. Возвращает True, если дата существует, иначе False. """ try: # Разбиваем дату на день, месяц и год day, month, year = map(int, date_str.split('.')) # Проверка диапазона годов if year < 1 or year > 9999: return False # Проверка диапазона месяцев if month < 1 or month > 12: return False # Количество дней в каждом месяце days_in_month = { 1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31 } # Если февраль и год високосный, то дней 29 if month == 2 and _is_leap_year(year): days_in_month[2] = 29 # Проверка диапазона дней if day < 1 or day > days_in_month.get(month, 0): return False return True except ValueError: # Если дата не может быть преобразована в числа (например, неправильный формат) return False if __name__ == '__main__': # Примеры использования print(is_valid_date("29.02.2020")) # True, високосный год print(is_valid_date("29.02.2021")) # False, не високосный год print(is_valid_date("31.04.2021")) # False, в апреле 30 дней print(is_valid_date("01.13.2021")) # False, месяца 13 не существует print(is_valid_date("31.12.9999")) # True, допустимая дата print(is_valid_date("00.01.2021")) # False, 0 дня не существует