如何使用 Python 检查一年是否是闰年?



我正在尝试用以下代码解决此问题:

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读作闰年?

> 被 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 整除的年份或其他什么,不应该是闰年";不过,目前还没有官方规则。

因为 1900 % 4 实际上是 0,所以第一个 if 条件是 True(True 或 False 是 True(,然后它不会执行第二个 if 块,因为是一个 elif(否则如果,并且由于第一个是 True,因此不需要执行 else 部分(。

试试这样!

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.")

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

1900/4= 475 => input_year%4 == 0 为真 => 对于您的代码 1900 年是闰年

1901/4 = 475,25 => input_year%4 == 0 是假的 => 对于您的代码 1901 不是闰年

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))

你可以利用 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

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

最新更新