【问题标题】:Is there a simpler code for defining next_date?是否有更简单的代码来定义 next_date?
【发布时间】:2014-05-08 06:21:54
【问题描述】:

给定任务:我需要从当前日期(d,m,y)中获取下一个日期,并返回一个整数元组(日,月,年)。

这是我的代码:

def next_date(d, m, y):
    if m == 12 and d == 31:
        d, m, y = 1, 1, y+1
    elif m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m== 10:
        if d == 31:
            d, m, y = 1, m+1, y
        elif d > 31:
            return 'No such date exist'
        else:
            d, m, y = d + 1, m, y
    elif m== 4 or m == 6 or m == 9 or m == 11:
        if d == 30:
            d, m, y = 1, m+1, y
        elif d > 30:
            return 'No such date exist'
        else:
            d, m, y = d+1, m, y
    elif m == 2:
        if is_leap_year(y) and d == 29:
            d, m, y = 1, 3, y
        elif is_leap_year(y) and d == 28:
            d,m,y = 29, m, y
        if not is_leap_year(y):
           if d == 28:
                d, m, y = 1, 3, y
            if d > 28:
                return 'No such date exist'

    else:
        d, m, y = d + 1, m, y
    return (d,m,y)

有没有比这更简单的代码,它不会给我一个无限循环? 非常感谢。

【问题讨论】:

标签: python tuples


【解决方案1】:

如果您不允许使用某个库,您可以使用这个较短的库:

def next_date(d, m, y):
    days = [31,28,31,30,31,30,31,31,30,31,30,31]
    if is_leap_year(y):
        days[1] = 29

    if d < 1 or d > days[m-1] or m < 1 or m > 12:
        return "No such date exist"

    d += 1
    if d > days[m-1]:
        d, m = 1, m+1
        if m > 12:
            d, m, y = 1, 1, y+1

    return (d,m,y)

您可以使用以下方法进行测试:

print next_date(10, 2, 2014)
print next_date(28, 2, 2014)
print next_date(29, 2, 2014)
print next_date(31, 12, 2014)

另外,这里是 is_leap_year 的一个简单实现,您没有实现:

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

【讨论】:

    【解决方案2】:

    尝试使用 Python 的 datetime 模块:

    import datetime
    
    def next_date(d, m, y):
        date = datetime.datetime(d,m,y)
        date += datetime.timedelta(days=1)
        return (date.day, date.month, date.year)
    

    【讨论】:

      【解决方案3】:
      import datetime
      
      def next_date(d, m, y):
          given_day = datetime.date(y, m, d)
          next_day = today + datetime.timedelta(days=1)
          return next_day.day, next_day.month, next_day.year
      

      一个小的标准库,让您的生活更轻松:D 检查THIS

      【讨论】:

        猜你喜欢
        • 2014-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-10
        相关资源
        最近更新 更多