【问题标题】:python basics - I am trying to write a function which takes a string(a month) as an input and returns the amount of days in the monthpython基础知识-我正在尝试编写一个函数,该函数将字符串(一个月)作为输入并返回该月的天数
【发布时间】:2012-04-04 19:50:12
【问题描述】:

我正在尝试编写一个函数,该函数将字符串(一个月)作为输入并返回该月的天数,使用如下列表:

我在最下面写了更正,谢谢你的帮助

month_days= [('January',[31]),('February',[28,29]),('March',[31]), ('April',[30]),('May',[31]),('June',[30]),('July',[31]),('August',[31]),('September',[30]),('October',[31]),    
('November',[30]),('December',[31]) ]


def month_day(mnth):
    for m, d in month_days:
        if m == mnth:
            return d 

【问题讨论】:

  • month_days('February') 怎么样?另外,你的代码是什么?
  • 如果您使用字典而不是列表,可能会更容易。使用月份名称作为键。
  • 如果你展示你的尝试,你会得到帮助你克服众所周知的“颠簸”的答案。如果你不这样做,这可能会在 15 分钟内关闭。
  • 必须是作业;现实世界中没有人将完整的月份名称输入计算机......

标签: python


【解决方案1】:

这似乎是一项家庭作业,但如果不是,您可以使用calendar 模块中的monthrange 函数(如this SO question 中所述):

>>> months = ['January','February','March','April','May','June', 'July','August','September','October','November','December']
>>> from calendar import monthrange
>>> for i in range(len(months)):
...     ind = i+1
...     print months[i], monthrange(2012,ind)[1] # returns a tuple, second element is number of days
... 
January 31
February 29
March 31
April 30
May 31
June 30
July 31
August 31
September 30
October 31
November 30
December 31

您可能希望动态定义年份,因为这决定了它是否是闰年,否则这似乎提供了您想要的数据。

【讨论】:

    【解决方案2】:

    不要发明自行车。只需使用日历模块http://docs.python.org/library/calendar.html

    【讨论】:

      【解决方案3】:

      这是遍历列表、查找正确月份并返回天数的一种非常基本的方法。这不是一个完整或最佳的解决方案,只是一个示例,您可以在此基础上进行构建。

      month_days_list = [('January',[31]),('February',[28,29]),('March',[31]), ... ]
      def month_days(month):
          for m, d in month_days_list:
              if m == month:
                  return d[0] 
      

      您应该对有多个天数选项的月份进行处理,而不是只返回 d[0]。

      【讨论】:

      • 如果您不得不这样做,那么更简洁的选择肯定是return dict(month_days_list)[month][0]
      【解决方案4】:

      一般来说,解决这类问题的最简单方法(给定字符串打印一个常量)是使用字典:

      month2days = { 'January': 31, 'February': 29, } ## and so on

      print (month2days['January'])

      将打印 31

      使用元组列表不是最好的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-28
        • 1970-01-01
        • 2020-03-13
        • 2020-05-31
        • 2019-03-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多