简体   繁体   English

打印给定月份和年份的天数 [Python]

[英]Printing the number of days in a given month and year [Python]

I've been trying to work out a way to accomplish what's in the title, without using any imported calendar/datetime libs from Python.我一直在尝试找出一种方法来完成标题中的内容,而不使用任何从 Python 导入的日历/日期时间库。 There's little function at the top for checking whether or not the year is a leap year, which I want to be able to reference when printing the number of days in a given February, however I'm not too sure how to do so.顶部几乎没有用于检查年份是否为闰年的功能,我希望在打印给定二月的天数时能够参考,但我不太确定如何这样做。 (I've guessed with something like output. bla bla) (我猜想有类似输出的东西。bla bla)

So far I've come up with something like this, which should make clear what I want to do, but I'm still a bit new to Python, so I would love a few tips/help on fixing up my code for the task.到目前为止,我已经想出了类似的东西,这应该可以明确我想要做什么,但我对 Python 还是有点陌生​​,所以我希望有一些提示/帮助来修复我的代码以完成任务.

# A function to determine if a year is a leap year.
# Do not change this function.
def is_leap_year (year):
    return (year % 4 == 0) and (year % 100 != 0) or (year % 400 == 0)

# You should complete the definition of this function:

 def days_in_month(month, year):

    if month == 'September' or month == 'April' or month == 'June' or month == 'November'
    print 30

    elseif month == 'January' or month == 'March' or month == 'May' or month== 'July' or month == 'August' or month == 'October'\
    or month== 'December'
     print 31

    elseif month == 'February' and output.is_leap_year = True
    print 29

    elseif month == 'February' and output.is_leap_year = False
    print 28

    else print 'Blank'

Ok I've fixed up my code, and it seems to output the correct data for every month but February:好的,我已经修复了我的代码,它似乎每个月都输出正确的数据,但 2 月:

# A function to determine if a year is a leap year.
# Do not change this function.
def is_leap_year (year):
    return (year % 4 == 0) and (year % 100 != 0) or (year % 400 == 0)

# You should complete the definition of this function:

def days_in_month(month, year):

    if month in ['September', 'April', 'June', 'November']:
        print 30

    elif month in ['January', 'March', 'May', 'July', 'August','October','December']:
        print 31        

    elif month == 'February' and is_leap_year == True:
        print 29

    elif month == 'February' and is_leap_year == False:
        print 28

Any hints to fix up outputting for February?有什么提示可以修复二月份的输出吗?

EDIT: Just needed to add the argument year when referencing the first function.编辑:只需要在引用第一个函数时添加参数 year 。 Here is the 100% working code for future reference:以下是 100% 工作代码供将来参考:

# A function to determine if a year is a leap year.
# Do not change this function.
def is_leap_year(year):
    return (year % 4 == 0) and (year % 100 != 0) or (year % 400 == 0)

# You should complete the definition of this function:

def days_in_month(month, year):

    if month in ['September', 'April', 'June', 'November']:
        print 30

    elif month in ['January', 'March', 'May', 'July', 'August','October','December']:
        print 31        

    elif month == 'February' and is_leap_year(year) == True:
        print 29

    elif month == 'February' and is_leap_year(year) == False:
        print 28

    else:
        return None

​​​

​​​

​​​

A more pythonic approach would be to define the mapping in a dictionary, then simply retrieve the values from the dictionary.更 Pythonic 的方法是在字典中定义映射,然后简单地从字典中检索值。

Try it out:试试看:

days_in_month_dict = {"January": 31, "February": 28, 
                      "March": 31, "April": 30,
                      "May": 31, "June": 30, 
                      "July": 31, "August": 31,
                      "September": 30, "October": 31,
                      "November": 30, "December": 31}

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

def days_in_month(year, month):
    if is_leap_year(year) and month == "February":
        return 28

    try: 
        #attempt to get value from dictionary 
        return days_in_month_dict[month]
    except KeyError:
        #key does not exist, so we caught the error
        return None

Some syntax error in your code:您的代码中有一些语法错误:

  1. There should be no space before def days_in_month(month,year) . def days_in_month(month,year)之前不应有空格。 Python use indentation to separate code blocks. Python 使用缩进来分隔代码块。 This is the error you given in comment.这是您在评论中给出的错误。
  2. There is no elseif in python, it should be elif python中没有elseif ,应该是elif
  3. output.is_leap_year = True , it should be is_leap_year(year) == True . output.is_leap_year = True ,应该是is_leap_year(year) == True The False part should be changed too. False部分也应该更改。
  4. after if statement and else there should be a : , likeif语句和else之后应该有一个: ,比如

    if month == 'September' or month == 'April' or month == 'June' or month == 'November': print 30 elif month == 'January' or month == 'March' or month == 'May' or month== 'July' or month == 'August' or month == 'October' or month== 'December': print 31 elif month == 'February' and is_leap_year(year) == True: print 29 elif month == 'February' and is_leap_year(year) == False: print 28 else: print 'Blank'
"""
Takes the year and month as input and returns the no. of days
"""
def is_leap_year (year):
    return (year % 4 == 0) and (year % 100 != 0) or (year % 400 == 0)

def days_in_month(month, year):
    if month == 'September' or month == 'April' or month == 'June' or month == 'November':
        result=30
    elif month == 'January' or month == 'March' or month == 'May' or month== 'July' or month == 'August' or month == 'October'or month== 'December':
        result=31

    elif month == 'February' and output.is_leap_year ==True:
        result=29

    elif month == 'February' and output.is_leap_year == False:
        result=28
    return result

print(is_leap_year(2016))
print(days_in_month('September',2016))
month = int (input ('month (1-12): '))

if month < 13:
    if month == 2:
        year = int (input ('year: '))
        if year % 4 == 0:
            if year % 100 == 0:
                if year % 400 == 0:
                    print ('29')
                else:
                    print ('28')
            else:
                print ('29')
        else:
            print ('28')

    elif month >= 8:
        if month % 2 == 0:
            print ('31')
        else:
            print ('30')

    elif month % 2 == 0:
        print ('30')
    else:
        print ('31')

else:
    print ('Only 1-12 accepted')
month=input("month")
year=int(input("year"))
if year%4==0:
        year=('leap year')
if month in ['September', 'April', 'June', 'November']:
        print ("30")

elif month in ['January', 'March', 'May', 'July', 'August','October','December']:
        print ("31")        

elif month == 'February' and year == "leap year":
        print ("29")

elif month == 'February' and  year != "leap year":
        print ("28")

else:
    print("none")

*# Write a function that determines how many days there are in a particular month. *# 编写一个函数来确定特定月份有多少天。

Your function will have two parameters: The month as an integer between 1 and 12,您的函数将有两个参数: 月份为 1 到 12 之间的整数,

and the year as a four digit integer.年份为四位整数。

Ensure that your function reports the correct number of days in February for leap years.*确保您的函数报告闰年 2 月的正确天数。*

def year():
  a = int(input("insert your year"))
  def month():
    z = int(input("enter month 1-12 "))
    if z==9 or z==4 or z ==6 or z==11:
      return print(30)
    elif z==1 or z==3 or z==5 or z==7 or z==10 or z==12:
      return print(31)
    elif z ==2 and a % 4==0:
      return print("29 its a leap year")
    elif z ==2 and a % 4==1:
      return print(28)   
    
  month()
year()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM