【问题标题】:Checking errors about year,month,day检查关于年、月、日的错误
【发布时间】:2019-01-11 09:24:25
【问题描述】:

1.输入的天数应在15/10/1582之后 2. 应考虑闰年。 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 只有一月~十二月

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

年份:2019 月份:1 天:1 月 32 日至 31

年:2020 月:2 日:30 2020 年是闰年,但二月是闰年 29

年:2019 月:2 日:29 2019 年不是闰年,所以二月是 最多 28 个

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

年份:2019 月份:1 天:8 OK

年份:0

【问题讨论】:

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

标签: python date error-handling


【解决方案1】:

嗯,显然,首先要做的是检查您的用户输入是否是正确的数字。如说明中所述,这可以使用异常处理(try/except 块)来完成。异常处理已记录在案,因此 first check the doc 并使用交互式 shell 来测试事物,直到您了解 ot 是如何工作的……这里只有几个提示:只捕获您在给定点期望的确切异常,并使用较少可能的代码在try 块中,所以你确定你只捕获了这段代码引发的异常。

(注意:请注意,这也可以通过测试input() 返回的字符串的内容来完成,而无需异常处理_before_ 将它们传递给int(),但显然您应该在这里使用异常处理,请参阅“使用 try/except”提及。)

第二件事是验证为日、月和年输入的各个值是否在预期范围内;即只有12个月,所以对于这个变量,任何低于1(一月)或高于12(十二月)的值都是无效的。

请注意,由于一个月中的天数会因月而异,而 2 月的天数可能会因年而异,因此您只有在知道月份和年份后才能验证天数。

我建议您首先在不考虑闰年的情况下进行“日”验证,然后才处理闰年的特殊情况。通常,良好的数据结构是简单有效代码的关键,因此请阅读标准的基本 Python 数据类型(列表、字典、元组等),并考虑可以使用哪些类型将月数映射到天数它有(对于非闰年,即)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-28
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多