1.输入的日期应在15/10/1582
之后
2.应考虑the年。
3.即使输入了“ ctrl + c”或字母,源代码也应该继续(使用try ... except)
这就是我尝试过的.....
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
答案 0 :(得分:0)
很明显,首先要做的是检查您的用户输入是否正确的数字。如说明中所述,可以使用异常处理(try / except块)来完成此操作。记录了异常处理,因此first check the doc并使用交互式外壳来测试事物,直到您了解ot的工作原理为止……这里有几点提示:仅捕获给定时间点上期望的确切异常,并减少异常try
块中的所有可能的代码,因此您可以确保仅捕获此精确代码段引发的异常。
(NB:请注意,这也可以通过测试input()
_before_将它们返回给int()
返回的字符串的内容来进行,而无需进行异常处理,但是显然希望您这样做请在此处使用异常处理,请参见“使用try / except”一节。)
第二件事是验证输入的日,月和年的各个值是否在预期范围内;即只有12个月,因此对于此变量,任何小于1(一月)或大于12(十二月)的值均无效。
请注意,由于一个月中的天数会逐月变化,并且对于二月而言,可能会逐年变化,因此只有知道月和年之后才能验证天数。
我建议您先进行“ day”验证,而不要考虑leap年,然后再考虑special年的特殊情况。通常,良好的数据结构是简单有效的代码的关键,因此,请阅读标准的基本Python数据类型(列表,字典,元组等),并考虑可以使用哪种类型将一个月数映射到多少天它具有(对于非leap年)。
还有很多其他事情需要注意,但是首先要设法使前两个要点起作用,而其余的应该不太困难。