Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检查年、月、日的错误_Python_Date_Error Handling - Fatal编程技术网

Python 检查年、月、日的错误

Python 检查年、月、日的错误,python,date,error-handling,Python,Date,Error Handling,1.输入的天数应在1582年10月15日之后 2.应该考虑过去几年。 3.即使输入了ctrl+c或字母,源代码也应该继续使用try…除了 3.重复此操作,直到在“年”中输入0。 这就是我试过的 while True: year = int(input("Year: ")) if year == 0 break month = int(input("Month: ") day = int(input("Days: ")) 我完全不知道如何解决这个问题

1.输入的天数应在1582年10月15日之后 2.应该考虑过去几年。 3.即使输入了ctrl+c或字母,源代码也应该继续使用try…除了

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天:30 2020年是闰年,但2月是 二十九

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

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

年份:2019月份:1天:8确定

年份:0


显然,首先要做的是检查用户输入的数字是否正确。如说明中所述,这可以使用异常处理try/except块来完成。异常处理是有文档记录的,所以使用交互式shell来测试,直到您了解ot的工作原理。。。这里有几个提示:只捕获在给定点预期的确切异常,并在try块中包含不太可能出现的代码,以便确保只捕获由这段确切代码引发的异常

注意:注意,通过在将输入返回的字符串传递给int之前测试字符串的内容,这也可以在没有异常处理的情况下完成,但是显然您需要在这里使用异常处理,参见使用try/except

第二件事是验证为日、月和年输入的单个值是否在预期范围内;即只有12个月,因此对于该变量,任何低于1月1日或高于12月12日的值都是无效的

请注意,由于一个月中的天数会随着月份的变化而变化,而对于二月,则可能会随着年份的变化而变化,因此只有知道月份和年份后,才能验证天数

我建议您首先在不考虑闰年的情况下进行日验证,然后才考虑闰年的特殊情况。通常,良好的数据结构是简单有效代码的关键,因此,请阅读标准的基本Python数据类型列表、dict、tuple等,并思考可以使用哪些类型将月份数映射为非闰年的天数,即


还有很多其他事情需要处理,但首先要设法让前两点起作用,其余的应该不会太难

提示:在获得年、月和日作为输入后,需要调用函数validate_dateyear、month、day来检查输入的日期并发出所需的错误消息。您需要编写该函数。它将有如下测试:if year<1582:if not 1,如@BoarGules所说,但您也可以创建一个Date对象并将日期作为一个整体进行比较,而不是单独检查年、月和日。@ReshamWadhwa这看起来像是一个初学者练习,我怀疑OP是否允许导入datetime。datetime对象会抱怨0个月,但不会说明原因;同样,2017年2月29日。你好,Kim,欢迎来到SO。虽然在家庭作业问题上寻求帮助是完全可以的,但在问题的开头应该明确提到这是家庭作业这一事实。同样,你的帖子没有包含所有需要的信息,也没有解释你的问题是什么。请编辑你的帖子,使它包含一个明显的提及,这是家庭作业,一个明确的描述你必须做什么,以及一个明确的问题,你被困在哪里。另外,不要要求一个完全编码的答案——这是你的职责——你所期望的只是有用的提示。@Brunodesshuilliers感谢你告诉我这些事情。我不知道,因为我刚刚加入了这么多。我会马上编辑它: