【问题标题】:How can I check if a year is a leap year using Python?如何使用 Python 检查年份是否为闰年?
【发布时间】:2022-12-17 10:49:51
【问题描述】:

我正在尝试使用以下代码解决this question

is_leap_year = False
not_leap_year = True 

input_year = int(input())

if (input_year % 4 == 0 or input_year % 400 == 0):
    print(input_year, '- leap year')

elif (input_year % 4 != 0 and input_year % 400 != 0):
    print(input_year, '- not a leap year')

为什么我的代码仍然读取 1900 作为闰年?

【问题讨论】:

  • 因为 1900 除以 4 的余数为零!

标签: python


【解决方案1】:

能被 400 整除的年份是能被 100 整除的规则的一个例外不是闰年,这本身就是年份能被 4 整除的规则的一个例外。如果你按顺序写出来,你可能会写

if year % 400 == 0:  # Some centuries are leap years...
    print("leap year")
elif year % 100 == 0: # ... but most are not ...
    print("not leap year")
elif year % 4 == 0:   # ... even though other divisibly-by-four years are
    print("leap year")
else:
    print("not leap year")

或努力向上

if year % 4 != 0:
    print("not a leap year")
elif year % 100 != 0:
    print("leap year")
elif year % 400 != 0:
    print("not a leap year")
else:
    print("leap year")

将这些组合成一个测试就像

if year % 4 != 0 or (year % 100 == 0 and year % 400 != 0):
    print("not a leap year")
else:
    print("leap year")

我发现这比一系列简单的测试更难理解。

(鉴于太阳年的性质,使每一个能被 400 整除的年份是闰年一个问题,虽然没有让每个世纪年成为闰年那么大。想要避免千禧年漂移的人们会提出额外的例外,例如“可被 4000 或 40,000 整除的年份不应为闰年”;不过,目前还没有官方规定。)

【讨论】:

    【解决方案2】:

    因为 1900 % 4 实际上是 0,所以第一个 if 条件是 True(True 或 False 是 True)然后它不执行第二个 if 块,因为它是一个 elif(else if,并且因为第一个是 True,所以有无需执行 else 部分)。

    【讨论】:

      【解决方案3】:

      像这样尝试!

      year = int(input("Input year: "))
      
      if year % 4 == 0:
          print("Year is leap.")
          if year % 100 == 0 and year % 400 != 0:
              print("Year is common.")
      else:
          print("Year is common.")
      

      【讨论】:

        【解决方案4】:

        因为第一个条件 input_year % 4 == 0 的计算结果为 True

        【讨论】:

          【解决方案5】:

          1900/4= 475 => input_year%4 == 0 是 True => 你的代码 1900 是闰年

          1901/4 = 475,25 => input_year%4 == 0 是 false => 你的代码 1901 不是闰年

          【讨论】:

            【解决方案6】:

            1900年不是闰年,你的计算不正确。

            下面是计算闰年的代码:

            if (year % 4) == 0:
               if (year % 100) == 0:
                   if (year % 400) == 0:
                       print("{0} is a leap year".format(year))
                   else:
                       print("{0} is not a leap year".format(year))
               else:
                   print("{0} is a leap year".format(year))
            else:
               print("{0} is not a leap year".format(year))
            

            【讨论】:

              【解决方案7】:

              您可以利用 Truthy/Falsely 编写一个简化的函数

                  if not(year % 400) or (not(year % 4) and year % 100) : return True
                  return False```
              
              print(isLeapYear(1900)) # False
              print(isLeapYear(1896)) # True
              

              【讨论】:

                【解决方案8】:

                在第一个 if 语句中使用“and”代替“or”。 两个条件都需要满足。

                【讨论】:

                • 这个答案缺乏细节。考虑修改以包含更多细节和代码 sn-p。
                猜你喜欢
                • 1970-01-01
                • 2022-11-14
                • 2022-12-10
                • 2013-04-27
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2022-10-02
                相关资源
                最近更新 更多