CS50 Python pset3题目

-2 投票
1 回答
42 浏览
提问于 2025-04-13 14:12

我正在尝试解决一个问题,主要是把“美国日期(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

撰写回答