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
。顺便说一句,如果我只是用(注意,noprint
语句)调用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)