Как организовать ввод данных в одной строке и определить их тип?
На вход принимается либо дата в формате "ДД.ММ.ГГГГ" либо текстом в формате "первое января двадцатьпервогогода". Суть программы - конвертация формата даты в зависимости от формата ввода. К примеру:
input - 15.03.2004
output - пятнадцатое марта дветысячичетвёртогогода
либо
input - пятнадцатое марта дветысячичетвёртогогода
output - 15.03.2004
Вопрос: как организовать ввод с определением формата (число это или строка) и разделением по дню, месяцу и году. Спасибо
//////////////////////////////////////
я пришёл к тому, что проще всего проверить третий символ ввода, если он является точкой:
date = input()
if date[2]=='.':
l = list(map(int, date.split('.')))
d = l[0]
m = l[1]
y = l[2]
else:
l = list(map(str, date.split()))
d = l[0]
m = l[1]
y = l[2]
Ответы (1 шт):
создай массив для тех данных, которые ты хочешь принимать и обрабатывать
day_dict = {
1: 'первое',
2: 'второе',
...
31: 'тридцать первое',
}
month_dict = {
1: 'января',
2: 'февраля',
...
}
с годами посложней нужно разбить число на составляющие
year_thousands = {
1: 'одна',
2: 'две',
...
}
year_hundred = {
100: 'сто',
200: 'двести',
...
900: 'девятьсот'
}
year_decades = {
20: 'двадцать',
30: 'тридцать'
90: 'девяносто'
}
в единицы так же проще закинуть все значения до 19
year_numbers = {
1: 'первого',
...
19: 'девятнадцатого'
}
затем функции для преобразования
def date_to_str(yearday, month, year):
собирай строку из предыдущих заоплненных массивов
return получившийся результат
def str_date(date_str):
разбирай строку на слова и найди месяц
он будет либо вторым либо третим словом,
т.е. проверяй второй и третье слово на наличие в масиве месяцов
потом найди день, месяц и сохрани их в переменные day, month
оставшиеся слова относятся к году. год придется собирать по частям
соответственно у года
если второе слово будет либо тысячи либо тысяча, тогда первое число - номер тысячелетия(его находишь опять по словарю `year_thousands`), прибаляешь значение year += число * 1000
остальные слова банально находишь на на личие в словарях
`year_hundreds`, `year_decades`, `year_numbers` и прибавляешь соответственно year += число * 100 / 10 / 1 в зависимости от того, в каком словаре нашлось
затем из составляющих day, month, year составляешь дату в нужном тебе формате
return получившийся результат
для того, что бы определить ввели дату или строку используй try... except...
from datetime import datetime
input_value = input()
try:
date_value = datetime.strptime(value, '%d.%m.%Y')
result_message = date_to_str(day = date_value.day, month = date_value.month, year=date_value.year)
except ValueError:
result_message = str_to_date(date_str=input_value)
print(result_message)