Python 如何确定一年是否为闰年?

Python 如何确定一年是否为闰年?,python,Python,我正在尝试制作一个简单的计算器来确定某一年是否是闰年 根据定义,闰年可以被四整除,但不能被一百整除,除非它可以被四百整除 这是我的密码: def leapyr(n): if n%4==0 and n%100!=0: if n%400==0: print(n, "is a leap year.") elif n%4!=0: print(n, "is not a leap year.") print(leapyr(1900))

我正在尝试制作一个简单的计算器来确定某一年是否是闰年

根据定义,闰年可以被四整除,但不能被一百整除,除非它可以被四百整除

这是我的密码:

def leapyr(n):
    if n%4==0 and n%100!=0:
        if n%400==0:
            print(n, "is a leap year.")
    elif n%4!=0:
        print(n, "is not a leap year.")
print(leapyr(1900))

当我在pythonidle中尝试此操作时,模块返回
None
。我很确定我应该得到
1900是闰年
你的函数不会返回任何东西,所以当你将它与
print
语句一起使用时,你会得到
None
。因此,要么像这样调用函数:

leapyr(1900)
或者修改函数以返回值(通过使用
return
语句),然后通过
print
语句打印该值

注意:这并没有解决您在闰年计算中可能遇到的任何问题,但回答了您的具体问题,即为什么您的函数调用与
打印
一起会得到
None

说明:

关于上述内容的一些简短示例:

def add2(n1, n2):
    print 'the result is:', n1 + n2  # prints but uses no *return* statement

def add2_New(n1, n2):
    return n1 + n2    # returns the result to caller
现在我给他们打电话:

print add2(10, 5)
这使得:

the result is: 15
None
第一行来自
add2()
中的
print
语句。调用函数
add2()
时,print语句中的
None
,该函数没有not返回语句,导致打印
None
。顺便说一句,如果我只是用(注意,no
print
语句)调用
add2()
函数:

如果没有
None
(这看起来像您正在尝试做的事情),我会得到print语句
的输出,结果是:15

将此与:

print add2_New(10, 5)
其中:

15

在这种情况下,结果在函数
add2_New()
和no print语句中计算,并返回给调用者,然后调用者依次打印它。

在n上测试三个不同的东西:

n % 4
n % 100
n % 400
1900年:

1900 % 4 == 0
1900 % 100 == 0
1900 % 400 == 300
因此1900不输入
if
子句,因为
1900%100!=0
False

但是1900也没有输入
else
子句,因为
1900%4!=0
也是
False

这意味着执行到了函数的末尾,并且没有看到return语句,因此它返回
None

对函数的这种重写应该可以工作,并且应该返回
False
True
,这与您传递到函数中的年份号有关。(请注意,与另一个答案一样,您必须返回某些内容,而不是打印。)


(算法自)

整个公式可以包含在单个表达式中:

def is_leap_year(year):
    return (year % 4 == 0 and year % 100 != 0) or year % 400 == 0

print n, " is a leap year" if is_leap_year(n) else " is not a leap year"
使用:


作为一个线性函数:

def is_leap_year(year):
    """Determine whether a year is a leap year."""

    return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
它类似于,但在第一次测试时短路(注意括号)

或者,您可以使用标准库,其具有完全相同的:


闰年可以被4整除,除了世纪年(以00结尾的年份)。只有当世纪年完全可以被400整除时,它才是闰年。比如说,

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

如果您不想
导入日历
并应用
.isleap
方法,您可以尝试以下方法:

def isleapyear(year):
    if year % 4 == 0 and (year % 100 != 0 or year % 400 == 0):
        return True
    return False

从1700年到1917年,官方日历是儒略历。从那时起,我们使用公历制度。从儒略到公历的过渡发生在1918年,1月31日后的第二天是2月14日。这意味着1918年的第32天是2月14日

在这两种日历系统中,二月是唯一天数可变的月份,闰年有29天,其他年份有28天。在朱利安历法中,闰年可被4整除,而在公历中,闰年为以下任一年:

可以被400整除

可以被4整除,但不能被100整除

因此,闰年的计划将是:

def leap_notleap(year):

    yr = ''
    if year <= 1917:
        if year % 4 == 0:
            yr = 'leap'
        else:
            yr = 'not leap'
    elif year >= 1919:
        if (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0):
            yr = 'leap'
        else:
            yr = 'not leap'
    else:
        yr = 'none actually, since feb had only 14 days'

    return yr
def leap\u notleap(年份):
yr=“”
如果年份=1919年:
如果(年份%400==0)或(年份%4==0和年份%100!=0):
yr=‘飞跃’
其他:
yr=‘不跳跃’
其他:
yr='实际上没有,因为二月只有14天'
返回年份

在公历中,有三个条件用于识别闰年:

  • 年份可以平均除以4,为闰年,除非:
    • 年份可以平均除以100,它不是闰年,除非:
      • 这一年也可以被400整除。那就是闰年了
这意味着在公历中,2000年和2400年是闰年,而1800年、1900年、2100年、2200年、2300年和2500年不是闰年

“一行”中的逻辑运行良好。根据个人经验,帮助我的是将语句分配给变量(以“真”形式),然后使用逻辑运算符得出结果:

A = year % 4 == 0
B = year % 100 == 0
C = year % 400 == 0
我在B语句中使用了“==”而不是“!=”,并在计算中应用了“not”逻辑运算符:

leap = A and (not B or C)

这对于一组更大的条件来说很方便,并且在编写一整套if语句之前,在适用的情况下可以简化布尔运算。

另一种方法是:

(((y%4)+(int)((y-(y%100))/y)*((y%400)/100))-1<0)

这是我为了好玩而放在一起的东西(?)它与C也是1:1兼容的

(y%4)
>>它首先通过典型的mod-4检查检查年份是否为闰年

(int((y-(y%100))/y)
>>然后将这些年份计算为可被100整除的年份。如果该年份可被100整除,则该值将为1,否则该值将为0

((y%400)/100))
>>接下来,将年份除以400(然后除以100,如果不是,则返回1、2或3

这两个价值观

(整数(y-(y%100))
def isleapyear(year):
    if year % 4 == 0 and (year % 100 != 0 or year % 400 == 0):
        return True
    return False
def leap_notleap(year):

    yr = ''
    if year <= 1917:
        if year % 4 == 0:
            yr = 'leap'
        else:
            yr = 'not leap'
    elif year >= 1919:
        if (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0):
            yr = 'leap'
        else:
            yr = 'not leap'
    else:
        yr = 'none actually, since feb had only 14 days'

    return yr
def is_leap(year):
    leap = False
    if year % 4 == 0:
        leap = True
        if year % 4 == 0 and year % 100 == 0:
            leap = False
            if year % 400 == 0:
                leap = True 
    return leap

year = int(input())
leap = is_leap(year)

if leap:
  print(f"{year} is a leap year")
else:
  print(f"{year} is not a leap year")
A = year % 4 == 0
B = year % 100 == 0
C = year % 400 == 0
leap = A and (not B or C)