检查有关年,月,日的错误

时间:2019-01-11 09:24:26

标签: python date error-handling

1.输入的日期应在15/10/1582之后 2.应考虑the年。 3.即使输入了“ ctrl + c”或字母,源代码也应该继续(使用try ... except)

3。重复直到在“年份”中输入0。

这就是我尝试过的.....

while True:
    year = int(input("Year: "))
    if year == 0
       break
    month = int(input("Month: ")
    day = int(input("Days: "))

我完全想不出如何解决这个问题,因此我想获得一些提示,提示我应该如何处理这个问题!


  

年份:2019月:0天:12只有1月〜12月

     

年份:2019月:1天:0天至少应为1

     

年份:2019月:1天:1月32日最多为31

     

年份:2020月:2天:2020年是a年,但2月至   29

     

年份:2019月:2天:2019年不是a年,所以2月是   最多28

     

年份:1582月:1天:1 1/1/1582在公历之前   开始

     

年份:2019月:1天:8 OK

     

年份:0

1 个答案:

答案 0 :(得分:0)

很明显,首先要做的是检查您的用户输入是否正确的数字。如说明中所述,可以使用异常处理(try / except块)来完成此操作。记录了异常处理,因此first check the doc并使用交互式外壳来测试事物,直到您了解ot的工作原理为止……这里有几点提示:仅捕获给定时间点上期望的确切异常,并减少异常try块中的所有可能的代码,因此您可以确保仅捕获此精确代码段引发的异常。

(NB:请注意,这也可以通过测试input() _before_将它们返回给int()返回的字符串的内容来进行,而无需进行异常处理,但是显然希望您这样做请在此处使用异常处理,请参见“使用try / except”一节。)

第二件事是验证输入的日,月和年的各个值是否在预期范围内;即只有12个月,因此对于此变量,任何小于1(一月)或大于12(十二月)的值均无效。

请注意,由于一个月中的天数会逐月变化,并且对于二月而言,可能会逐年变化,因此只有知道月和年之后才能验证天数。

我建议您先进行“ day”验证,而不要考虑leap年,然后再考虑special年的特殊情况。通常,良好的数据结构是简单有效的代码的关键,因此,请阅读标准的基本Python数据类型(列表,字典,元组等),并考虑可以使用哪种类型将一个月数映射到多少天它具有(对于非leap年)。

还有很多其他事情需要注意,但是首先要设法使前两个要点起作用,而其余的应该不太困难。