Попытка создать проверку ввода для даты в формате ГГГГ-ММ-ДД. У меня есть два способа сделать это.
Первый метод, кажется, работает и возвращается к циклу, чтобы получить ввод каждый раз, когда возникает ошибка.
Функция во втором методе вызывает бесконечный цикл, но почти идентичная функция в первом методе - нет.
Если я ввожу правильно отформатированную дату во втором методе, она печатается, как ожидается, но для любого другого ввода она создает бесконечный цикл.
Я не уверен, где это ломается?
Я посмотрел ряд результатов Google, и существует множество проверок дат, но я не нашел такой, которая бы явно указывала, как вернуться назад и повторить попытку.
Я не был уверен, что еще можно попробовать, не переписав по существу один метод.
import datetime as dt
#METHOD 1 - This is the first method for validating date input, which takes in individual blocks and validates each one individually.
def get_date(year_prompt, month_prompt, day_prompt):
#Year Input
while True:
try:
year = int(input(year_prompt))
except ValueError:
print("Sorry, I didn't understand that.\n")
continue
if year in range(2000,3000,1):
break
else:
print("Sorry, your response must be in YYYY format and later than the year 2000.\n")
continue
#Month Input
while True:
try:
month = int(input(month_prompt))
except ValueError:
print("Sorry, I didn't understand that.\n")
continue
if month in range(1,13,1):
break
else:
print("Sorry, needs to be MM and between 1-12\n")
continue
#Day Input
while True:
try:
day = int(input(day_prompt))
except ValueError:
print("Sorry, I didn't understand that.\n")
continue
if day in range(1,32,1):
break
else:
print("Sorry, needs to be DD and between 1-31\n")
continue
#Takes the three inputs and puts them together into a date
date = dt.datetime(year, month, day)
#Returns the date
return date
#Runs the first method of getting and validating a date.
date = get_date("\nYYYY: ", "\nMM: ", "\nDD: ")
#Prints the validated date.
print("\nThe date you entered is: ", date, "\n")
#METHOD 2 - This is the second method for validating date, which takes in the whole date in one input, and attempts to validate it against the YYYY-MM-DD format.
def input_validation(date):
while True:
try:
dt.datetime.strptime(date, '%Y-%m-%d')
break
except ValueError:
print("\nSorry, this does not appear to be a valid date in format YYYY-MM-DD")
continue
return date
#Prints the validated date.
print("\nThe date you entered is: ", input_validation(input("Enter a date in format YYYY-MM-DD: ")), "\n")
Мой ожидаемый результат для второго метода: либо дата в формате ГГГГ-ММ-ДД, либо сообщение об ошибке, которое затем снова запрашивает ввод.