python 日期验证(字典)给出与预期不同的输出[已关闭]

ibps3vxo  于 2023-03-07  发布在  Python
关注(0)|答案(1)|浏览(135)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
11小时前关门了。
Improve this question
在本实验中,您应创建一个字典,其中包含十二个三字母缩写,每个月作为关键字,每个月的天数作为值。缩写使用首字母大写,每个关键字使用以下值:
一月、三月、五月、七月、八月、十月、十二月应全部使用31 Apr,六月、九月、十一月应全部使用30,二月应使用28。在输出任何其他内容之前,先输出字典,然后输出一个空行。
然后,您将要求用户输入月份的三个字母缩写、数字日和数字年。
如果用户输入的是有效日期,则输出类似于以下内容的消息:

Jan 1, 1994 is a valid date.

如果用户输入的不是有效日期,则输出类似于以下内容的消息:

Jan 0, 1994 isn't a valid date.

有效日期将满足以下条件:

  • 缩写与您创建的字典中的12个键之一匹配。
  • 该日在月和年的有效日范围内(请参阅有关闰年的注解)。
  • 年份必须是1752年或之后,即美国采用公历的年份。

对于闰年:
闰年可以被4整除,而不能被100整除,或者可以被400整除。如果一年是闰年,则应允许二月有29天。处理此异常错误时,不应向字典中添加任何额外内容。可以使用多种不同的方法来实现此MSP的解决方案。以下是有关可能解决方案的一些观察结果:
使用成员资格运算符可以简化有效月份的测试。可能会有许多嵌套的选择语句。使用逻辑运算符有助于创建更短的解决方案。给定以下输入:

Jan
5
1993

以下是示例输出:

{'Jan': 31, 'Feb': 28, 'Mar': 31, 'Apr': 30, 'May': 31, 'Jun': 30, 'Jul': 31, 'Aug': 31, 'Sep': 30, 'Oct': 31, 'Nov': 30, 'Dec': 31}

Enter 3 character abbreviation for month: Jan
Enter day: 5
Enter year: 1993
Jan 5, 1993 is a valid date.

下面是另一个例子,使用二月份的错误数据:

Feb
29
2003

输出如下所示:

{'Jan': 31, 'Feb': 28, 'Mar': 31, 'Apr': 30, 'May': 31, 'Jun': 30, 'Jul': 31, 'Aug': 31, 'Sep': 30, 'Oct': 31, 'Nov': 30, 'Dec': 31}

Enter 3 character abbreviation for month: Feb
Enter day: 29
Enter year: 2025
Feb 29, 2025 isn't a valid date.

我试过:

allMonths = {'Jan': 31, 'Feb': 28, 'Mar': 31, 'Apr': 30, 'May': 31, 'Jun': 30,
             'Jul': 31, 'Aug': 31, 'Sep': 30, 'Oct': 31, 'Nov': 30, 'Dec': 31}

print(allMonths)

month = input("Enter 3 character abbreviation for month: ").strip()
day = int(input("Enter day: "))
year = int(input("Enter year: "))

if(year >= 1752):
    if((year % 4 == 0) and (year % 100 != 0)) or (year % 400 == 0):
        if month in allMonths.keys():
            if(month == "Feb"):
                daysOfMonth = 29
            else:
                daysOfMonth = allMonths[month]
            
            if day <= daysOfMonth:
                print(month, day, year, "is a valid date.")
            else:
                print(month, day, year, "isn't a valid date.")
        else:
            print("Invalid month entered!")
    else:
        if month in allMonths.keys():
            daysOfMonth = allMonths[month]
            
            if day <= daysOfMonth:
                print(month, day, year, "is a valid date.")
            else:
                print(month, day, year, "isn't a valid date.")
        else:
            print("Invalid month entered!")
else:
    print("Invalid year entered!")

问题是,Jan': 31, 'Feb': 28, 'Mar': 31, 'Apr': 30, 'May': 31, 'Jun': 30, 'Jul': 31, 'Aug': 31, 'Sep': 30, 'Oct': 31, 'Nov': 30, 'Dec': 31} Enter 3 character abbreviation for month: Enter day: Enter year: Jan 1 1994 is a valid date.总是在每个输出上打印,而它应该是这样的:Jan 1, 1994 is a valid date.

0yg35tkg

0yg35tkg1#

或许可以删除这一行?

print(allMonths)

这是负责打印月份和长度,你似乎想停止。

相关问题