为什么此代码打印None而不是True。似乎一旦它检查它是否可被4整除,它就不会继续检查其他要求。根据我目前的理解,对于每个连续的if语句,它应该继续下去并检查下一个if是否为其中一个是假的。此时它应该去else语句并返回False。但是,显然我做错了什么。谢谢。
return new {
Items = data, Count = data.Count()
};
答案 0 :(得分:2)
else
仅指第一个if
- 即不能被四整除的年份。因此,对于可被4整除但未被100整除的年份,您不会落入else
。如果没有指定返回值,Python函数将返回None
。
一般来说,else
是指具有相同缩进的最后一个if
。
您可以通过执行以下操作来解决此问题:
def is_leap_year(year):
# step 1 check if dvisible by 4
if year % 4 == 0:
print "year is divisble by 4"
# step 2 check if divisible by 100
if year % 100 == 0:
print "year is divisible by 100"
# step 3 check if divisble by 400
if year % 400 == 0:
print "year is divisible by 400"
return True
else:
return True
return False
答案 1 :(得分:1)
从我目前的理解,对于每个连续的if语句而言 应该继续下去并检查下一个,直到其中一个是 假。此时它应该去else语句并返回 假
不,这不完全正确。 else
块仅在第一个if
块未执行时执行,即当年份不能被4整除时。其他if
块不是(例如,一年可被4整除)而不是100),该函数将正确返回 None
。
相反,如果其他return False
失败,您可以if
:
def is_leap_year(year):
# step 1 check if dvisible by 4
if year % 4 == 0:
print "year is divisble by 4"
# step 2 check if divisible by 100
if year % 100 == 0:
print "year is divisible by 100"
# step 3 check if divisble by 400
if year % 400 == 0:
print "year is divisible by 400"
return True
return False
那就是说,我不确定你方法的正确性。这是一篇可以帮助您改进代码的SO帖子:
How to determine whether a year is a leap year in Python?
否则,您可以使用calendar.isleap
找出一年是否实现飞跃:
import calendar
print(calendar.isleap(2000))
答案 2 :(得分:1)
如果年份可以被True
,4
和 100
整除,那么您的函数将只返回400
,它将返回{{1}如果年份不能被False
整除。
在许多情况下,您没有指定返回值(例如,可以4
整除,但不能可被4
整除)。在这些情况下,您的函数将返回100
。 None
属于这些情况。
答案 3 :(得分:0)
您可以使用此方法:
def is_leap_year(year):
leap = False
# step 1 check if dvisible by 4
if year % 4 == 0:
print "year is divisble by 4"
leap = True
# step 2 check if divisible by 100
if year % 100 == 0:
print "year is divisible by 100"
leap = False
# step 3 check if divisble by 400
if year % 400 == 0:
print "year is divisible by 400"
leap = True
return leap
print is_leap_year(1996)
说明:如果可以被4分割,则年份为跳跃,如果可以按100分割则不跳跃(除非它也可以被400分割)。