month = [
"Январь",
"Февраль",
"Март",
"Апрель",
"Май",
"Июнь",
"Июль",
"Август",
"Сентябрь",
"Октябрь",
"Ноябрь",
"Декабрь"
]
while True:
try:
date = input("Дата: ").strip()
if date.find("/"):
if int(date.split("/")[0]) < 13 and int(date.split("/")[1]) < 32:
date = date.split("/")
print(f"{date[2]}-{int(date[0]):02}-{int(date[1]):02}")
break
elif date.find(","):
if len(date) == 3 and date[0] in month:
date[1] = date.replace(",", "")
date[0] = month.index(date[0]) + 1
print(f"{date[2]}-{int(date[0]):02}-{int(date[1]):02}")
break
except ValueError:
continue
введите описание изображения здесь
Когда я пишу 8 сентября 1636 года, вывода нет.
Я хочу написать код, который преобразует ввод = 8 сентября 1636 года в вывод = 1636-09-08, ввод = 10/9/1701 в вывод = 1701-10-09, ввод = 10 декабря 1815 года, запрашивает повторный ввод.
Ответ
Заказчик, проблема в вашем коде заключается в том, что он не правильно обрабатывает входные данные в формате "месяц день, год" и "/". По вашему описанию видно, что вы хотите, чтобы ввод на типа "Сентябрь 8, 1636" приводил к выходу "1636-09-08", а ввод в формате "10/9/1701" выдавал "1701-10-09".
Я исправлю ваш код, чтобы он правильно работал с обоими форматами входных данных. Вот исправленная версия:
month = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
]
while True:
try:
date = input("Date: ").strip()
# Проверка на формат месяца/дня/года
if "/" in date:
month_day_year = date.split("/")
if (1 <= int(month_day_year[0]) <= 12) and (1 <= int(month_day_year[1]) <= 31):
print(f"{int(month_day_year[2])}-{int(month_day_year[0]):02}-{int(month_day_year[1]):02}")
break
# Проверка на формат "месяц день, год"
elif "," in date:
month_day_year = date.split(" ")
month_name = month_day_year[0]
day = month_day_year[1].replace(",", "")
year = month_day_year[2]
if month_name in month:
month_index = month.index(month_name) + 1
if 1 <= int(day) <= 31:
print(f"{year}-{month_index:02}-{int(day):02}")
break
# Если формат неверен, спрашиваем повторный ввод
print("Неверный формат даты, попробуйте еще раз.")
except ValueError:
print("Введены неверные значения, попробуйте еще раз.")
Объяснение изменений:
- Проверка форматирования дат: Убедитесь, что если разделитель — это "/", то оба месяца и дни находятся в заданных пределах.
- Проверка формата "месяц день, год": Использую
split(" ")
для разбиения ввода на части. Если месяц найден и день соответствует диапазону, код форматирует дату в нужный формат. - Вывод сообщения об ошибке: Если ввод некорректен, пользователю предлагается ввести дату повторно.
Теперь скрипт будет корректно обрабатывать оба типа ввода и выдавать нужный формат.