用于检查闰年和计算一个月中的天数的代码

时间:2016-01-24 16:20:23

标签: python if-statement

这是我的代码:

def cal(month):
    if month in ['January', 'march','may','july','august','oct','dec']:
       print ("this month has 31 days")
    elif month in ['april','june','sept','nov']:
       print ("this month has 30 days")
    elif month == 'feb' and leap(year)== True:
       print ("this month has 29 days")
    elif month == 'feb' and leap(year) == False:
        print ("this month has 28 days")
    else:
        print ("invalid input")   


def leap(year):
    if (year % 4== 0) or (year % 400 == 0):
       print ("its a leap year!")
    else: 
       print ("is not a leap year")

year = int(input('type a year: '))
print ('you typed in :' , year)
month = str(input('type a month: '))
print ('you typed in :', month)



cal(month)
leap(year) 

我收到的输出:

type a year: 2013
you typed in : 2013
type a month: feb
you typed in : feb
is not a leap year
is not a leap year
invalid input
is not a leap year

如果是28天或29天,为什么我没有得到feb天数的输出?

为什么我得到了无效的输入部分,即使它是另一个?

2 个答案:

答案 0 :(得分:1)

您不应该尝试使用自己的功能来替换基础功能。 Python有管理日期的模块。你应该使用它。

https://docs.python.org/2/library/calendar.html#calendar.monthrange

>>> import calendar
>>> calendar.monthrange(2002,1)
(1, 31)

闰年,仍然在doc:

https://docs.python.org/2/library/calendar.html#calendar.isleap

关于你的代码,你的函数leap应该返回一个布尔值,因为你在条件语句中使用它,否则leap(whatever) == true将总是返回false。

答案 1 :(得分:1)

您只需在跳跃(年)功能中返回True或False即可正常工作。

这是维基百科的闰年算法。

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