CS50 Python pset3题目
我正在尝试解决一个问题,主要是把“美国日期(MM,DD,YYY)”转换成ISO8601格式(YYYY,MM,DD)。这是我的代码:
def main():
Months = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
]
while True:
Date = input("Please insert a Date: ").strip().title().replace(",", "").replace(" ", "/").split("/")
try:
Month = Date[0]
Day = Date[1]
Year = Date[2]
if Month in Months:
Month = Months.index(Month)+1
if Day.isalpha() == True:
pass
elif int(Day) > 31 or int(Month) > 12:
pass
else:
print(f"{Year}-{int(Month):02}-{int(Day):02}")
break
except ValueError:
pass
main()
在这个过程中有一些限制条件,我已经解决了9个,但还有2个我认为应该由程序来处理。
不过因为这些输入会导致程序出错并重新提示用户,所以我卡住了。这些是应该出错的输入:
October/9/1701
September 8 1636
有没有人能给我指个方向?
1 个回答
0
虽然这些情况是程序处理的,但根据规定,它们是可以失败的,并且需要重新提示用户:
如果用户输入的日期格式不正确,既不是像
9/8/1636
这样的格式,也不是像September 8, 1636
这样的格式,就要再次提示用户。
程序需要在把输入转换成输出格式之前,先确认输入是否符合规定的格式。可以使用 while
循环来检测输入是否正确,然后再进行格式化。大概可以这样写:
while True:
input(adate)
if date is mm/dd/yy:
do something
else if date is Month day, year:
do something else
else:
reprompt
produce the output