Python 如何提示输入直到日期格式和时间格式正确?
我正在做一个活动计划,我想用时间提示开始日期,用时间提示结束日期。验证工作一直持续到开始日期和开始时间,但问题在结束日期和时间出现。 当结束日期格式不正确时,它不会再次提示结束日期,而是再次提示开始时间,结束时间也是如此Python 如何提示输入直到日期格式和时间格式正确?,python,try-except,Python,Try Except,我正在做一个活动计划,我想用时间提示开始日期,用时间提示结束日期。验证工作一直持续到开始日期和开始时间,但问题在结束日期和时间出现。 当结束日期格式不正确时,它不会再次提示结束日期,而是再次提示开始时间,结束时间也是如此 import datetime as dt date_format = "%d-%m-%Y" time_format = "%H:%M" start_date = input("Please enter start date:
import datetime as dt
date_format = "%d-%m-%Y"
time_format = "%H:%M"
start_date = input("Please enter start date: ")
while True:
try:
dt.datetime.strptime(start_date, date_format)
start_time = input("Please enter start time: ")
try:
dt.datetime.strptime(start_time, time_format)
end_date = input("Please enter end date: ")
try:
dt.datetime.strptime(end_date, date_format)
end_time = input("Please enter end time: ")
try:
dt.datetime.strptime(end_time, time_format)
print(start_date,start_time)
print(end_date,end_time)
except:
print("This is the incorrect time string format. It should be HH:MM")
except:
print("This is the incorrect date string format. It should be DD-MM-YYYY")
except:
print("This is the incorrect time string format. It should be HH:MM")
except:
print("This is the incorrect time string format. It should be DD-MM-YYYY")
start_date = input("Please enter start date: ")
对每个提示使用
while loop
将日期时间导入为dt
日期格式=“%d-%m-%Y”
时间\格式=“%H:%M”
尽管如此:
开始日期=输入(“请输入开始日期:”)
尝试:
dt.datetime.strtime(开始日期,日期格式)
打破
除:
持续
尽管如此:
开始时间=输入(“请输入开始时间:”)
尝试:
dt.datetime.strtime(开始时间,时间格式)
打破
除:
持续
尽管如此:
结束日期=输入(“请输入结束日期:”)
尝试:
dt.datetime.strtime(结束日期,日期格式)
打破
除:
持续
尽管如此:
结束时间=输入(“请输入结束时间:”)
尝试:
dt.datetime.strtime(结束时间,时间格式)
打破
除:
持续
打印(开始日期、开始时间)
打印(结束日期、结束时间)
对每个提示使用while loop
将日期时间导入为dt
日期格式=“%d-%m-%Y”
时间\格式=“%H:%M”
尽管如此:
开始日期=输入(“请输入开始日期:”)
尝试:
dt.datetime.strtime(开始日期,日期格式)
打破
除:
持续
尽管如此:
开始时间=输入(“请输入开始时间:”)
尝试:
dt.datetime.strtime(开始时间,时间格式)
打破
除:
持续
尽管如此:
结束日期=输入(“请输入结束日期:”)
尝试:
dt.datetime.strtime(结束日期,日期格式)
打破
除:
持续
尽管如此:
结束时间=输入(“请输入结束时间:”)
尝试:
dt.datetime.strtime(结束时间,时间格式)
打破
除:
持续
打印(开始日期、开始时间)
打印(结束日期、结束时间)
如果在执行过程中发生错误,则所有操作都会在while true之后重新启动,即在开始时间
考虑使用一个简单的状态机:
def prompt_start_time():
#get input, do something and validate format
if input_validated:
next_state = "prompt_date"
return start_time, next_state
else:
return None, "prompt_start_time"
def prompt_date():
#do something and return prompt date
if input_validated:
next_state = "end_date"
else:
next_state = "prompt_date"
return start_date, next_state
def end_date():
#...
state_machine = {"prompt_start_time": prompt__start_time, "prompt_date":prompt_date, "end_date": end_date}
while True:
value, state = state_machine[current_state]()
current_state = state
如果在执行过程中发生错误,则所有操作都会在while true之后重新启动,即在开始时间 考虑使用一个简单的状态机:
def prompt_start_time():
#get input, do something and validate format
if input_validated:
next_state = "prompt_date"
return start_time, next_state
else:
return None, "prompt_start_time"
def prompt_date():
#do something and return prompt date
if input_validated:
next_state = "end_date"
else:
next_state = "prompt_date"
return start_date, next_state
def end_date():
#...
state_machine = {"prompt_start_time": prompt__start_time, "prompt_date":prompt_date, "end_date": end_date}
while True:
value, state = state_machine[current_state]()
current_state = state
下面是一个干净的、类似于蟒蛇的方法:
import datetime as dt
date_format = "%d-%m-%Y"
time_format = "%H:%M"
def get_date(date_format, input_message):
date = None
while True:
try:
date = input(input_message)
dt.datetime.strptime(date, date_format)
except:
print("This is the incorrect date string format. It should be DD-MM-YYYY")
# Error! Return to the start of the loop
continue
else:
# Success! Exit loop
break
return date
def get_time(time_format, input_message):
time = None
while True:
try:
time = input(input_message)
dt.datetime.strptime(time, time_format)
except:
print("This is the incorrect time string format. It should be HH:MM")
# Error! Return to the start of the loop
continue
else:
# Success! Exit loop
break
return time
start_date = get_date(date_format, "Please enter start date: ")
start_time = get_time(time_format, "Please enter start time: ")
end_date = get_date(date_format, "Please enter end date: ")
end_time = get_time(time_format, "Please enter end time: ")
- 如果
子句引发异常,它将执行try
except
- 如果
子句没有引发异常,它将在try
else
- If in except:我们在这里是因为输入错误,所以我们打印一条消息,并使用
,以便直接在循环开始时执行continue
中的代码,然后重试
- 如果我们处于
:输入正常,因此我们使用else
来离开while循环break
import datetime as dt
date_format = "%d-%m-%Y"
time_format = "%H:%M"
def get_date(date_format, input_message):
date = None
while True:
try:
date = input(input_message)
dt.datetime.strptime(date, date_format)
except:
print("This is the incorrect date string format. It should be DD-MM-YYYY")
# Error! Return to the start of the loop
continue
else:
# Success! Exit loop
break
return date
def get_time(time_format, input_message):
time = None
while True:
try:
time = input(input_message)
dt.datetime.strptime(time, time_format)
except:
print("This is the incorrect time string format. It should be HH:MM")
# Error! Return to the start of the loop
continue
else:
# Success! Exit loop
break
return time
start_date = get_date(date_format, "Please enter start date: ")
start_time = get_time(time_format, "Please enter start time: ")
end_date = get_date(date_format, "Please enter end date: ")
end_time = get_time(time_format, "Please enter end time: ")
- 如果
子句引发异常,它将执行try
except
- 如果
子句没有引发异常,它将在try
else
- If in except:我们在这里是因为输入错误,所以我们打印一条消息,并使用
,以便直接在循环开始时执行continue
中的代码,然后重试
- 如果我们处于
:输入正常,因此我们使用else
来离开while循环break