Напишите программу на Python, которая анализирует множество древних текстов и проверяет правильность дат, указанных

  • 30
Напишите программу на Python, которая анализирует множество древних текстов и проверяет правильность дат, указанных в них. Если при переписывании дат произошла ошибка, программа должна вывести "Некорректная" для данной даты. В противном случае, программа должна вывести "Корректная". В конце программа должна вывести общее количество корректных дат. Для анализа даты используйте функцию check_date(). Введите строки с датами до появления символа точки. Пример входных данных: 19.05.2016 05.13.2010 21.12.2012 01.01.1000 32.04.2003. Пример выходных данных: Корректная Некорректная Корректная Корректная Некорректная.
Изумрудный_Пегас_183
4
Конечно! Вот одно из возможных решений задачи:

python
import re

def check_date(date):
# Проверяем, соответствует ли дата формату DD.MM.YYYY
if not re.match(r"^\d{2}\.\d{2}\.\d{4}$", date):
return False

# Разделяем дату на день, месяц и год
day, month, year = map(int, date.split("."))

# Проверяем корректность дня, месяца и года
if day < 1 or day > 31:
return False
if month < 1 or month > 12:
return False
if year < 0 or year > 9999:
return False

# Проверяем корректность даты с учётом количества дней в каждом месяце
if month in [4, 6, 9, 11] and day > 30:
return False
if month == 2:
if day > 29:
return False
elif day == 29 and not (year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)):
return False

return True

# Ввод исходных данных
dates = input("Введите строки с датами, разделяя их пробелами или переносами строк: ").split()

# Переменные для отслеживания количества правильных и неправильных дат
correct_dates = 0
incorrect_dates = 0

# Анализ дат
for date in dates:
if date == ".":
break

if check_date(date):
print("Корректная")
correct_dates += 1
else:
print("Некорректная")
incorrect_dates += 1

# Вывод общего количества корректных дат
print("Количество корректных дат:", correct_dates)


Позвольте мне объяснить некоторые моменты решения:

- Мы используем регулярное выражение `r"^\d{2}\.\d{2}\.\d{4}$"`, чтобы проверить, соответствует ли дата формату DD.MM.YYYY.
- Мы разделяем входные данные на отдельные строки с датами, используя метод `split()`.
- Затем мы последовательно проверяем каждую дату с помощью функции `check_date()`.
- Функция `check_date()` разделяет дату на составляющие (день, месяц, год) и проверяет их корректность.
- Мы проверяем, чтобы день был от 1 до 31, месяц от 1 до 12, а год от 0 до 9999.
- Для проверки корректности количества дней в месяце мы проверяем специфические случаи, такие как февраль в високосном году или месяцы с 30 днями.
- Если дата проходит все проверки, мы выводим "Корректная" и увеличиваем счетчик корректных дат. В противном случае, выводим "Некорректная" и увеличиваем счетчик некорректных дат.
- В конце выводим общее количество корректных дат.

Это одно из возможных решений задачи. Удачи в программировании! Если у вас возникнут вопросы, не стесняйтесь задавать их.