乳清is_leap_year返回None而不是True

时间:2016-10-13 07:51:18

标签: python

为什么此代码打印None而不是True。似乎一旦它检查它是否可被4整除,它就不会继续检查其他要求。根据我目前的理解,对于每个连续的if语句,它应该继续下去并检查下一个if是否为其中一个是假的。此时它应该去else语句并返回False。但是,显然我做错了什么。谢谢。

return new {
            Items = data, Count = data.Count()
        };

4 个答案:

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

如果年份可以被True4 100整除,那么您的函数将只返回400,它将返回{{1}如果年份不能被False整除。

在许多情况下,您没有指定返回值(例如,可以4整除,但不能可被4整除)。在这些情况下,您的函数将返回100None属于这些情况。

答案 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分割)。