将天数添加到当前日期python

时间:2015-04-04 02:15:18

标签: python

编写一个有助于回答问题的函数,例如'"今天是星期三。我在19天的假期里度假。那会是哪一天?"' ...因此该函数必须采用日期名称和delta参数 - 要添加的天数 - 并且应该返回生成的日期名称:

def day_add(day, number):
    if number == "0":
        return day
    else:
        return

result = day_add("Thursday", "0")
print(result)

assert "Friday" == day_add("Monday", "4"), "gives you back the day it will be if you add a certain number of days"
assert "Tuesday" == day_add("Tuesday", "0"), "gives back the day you put in"

4 个答案:

答案 0 :(得分:2)

显然,您需要将日期名称转换为数字,例如使用全局列表:

DAYS = ['Sunday', 'Monday', ... , 'Saturday']

(将...替换为其他日期名称: - )。

要将日期名称转换为列表中的索引(包括0到6之间的数字),请使用列表方法index

daynum = DAYS.index(dayname)

如果ValueError不是有效的工作日名称,则会引发dayname,我猜测是正常的,否则你会告诉我们您的规格这样的用户错误! (我假设dayname是你的函数接受的参数的名称。

接下来,您将number添加到daynum并将其取模7,以便它再次包含0到6之间的数字:

result_day = (daynum + number) % 7

最后,您使用它来索引列表并返回结果:

return DAYS[result_day]

我希望你能把这些放在你需要的功能中,这样你就可以至少从练习中学到一点点(如果我们给你所需的功能,那么就没有了。)粘贴! - )

编辑:我看到您传递的number实际上是一个字符串 - 这个非常特殊选择的任何原因......?如果它是一个真正的,非常非常奇怪的规范的一部分,你当然也需要制作一个数字 - 例如,在一开始,

number = int(number)

建议保留阅读代码的任何人的理智:number命名为数字的变量 - 就像井一样已知的心理测试,你有一堆颜色名称,每个颜色名称都用与其命名的颜色不同打印出来,这种事情真的会让人们的大脑成为一个循环! - )

答案 1 :(得分:0)

您可以在字典中创建日期索引:

>>> dow={day:i for i, day in enumerate(['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'])}

与此相反:

>>> idow={i:day for day, i in dow.items()}

所以现在你有:

>>> dow
{'Monday': 1, 'Tuesday': 2, 'Friday': 5, 'Wednesday': 3, 'Thursday': 4, 'Sunday': 0, 'Saturday': 6}
>>> idow
{0: 'Sunday', 1: 'Monday', 2: 'Tuesday', 3: 'Wednesday', 4: 'Thursday', 5: 'Friday', 6: 'Saturday'}

然后你可以从另一个得到一个:

>>> idow[(dow['Wednesday']+19)%7]
Monday

答案 2 :(得分:0)

从日期列表开始:

DAYS=['Sunday', 'Monday', ..., 'Saturday']

您可以使用列表的索引方法查找提供日期的数组索引位置:

>>> print DAYS.index('Sunday')
0
>>> print DAYS.index('Monday')
1

再加上从现在起的天数,您将在DAYS列表中获得该指数位置的那一天:

>>> todays_index=DAYS.index('Sunday')
>>> days_from_now=3
>>> print DAYS[todays_index+days_from_now]
Wednesday

然而,这将从星期日开始工作长达6天。将days_from_now设置为7将明显破坏并导致IndexError。但是,如果你计算days_from_now的模数7,你可以确保你永远不会超过6:

# DAYS[0] == 'Sunday'
# 7 days from now: DAYS[0+(7%7)] == DAYS[0+0] == DAYS[0] == 'Sunday'
# 8 days from now: DAYS[0+(8%7)] == DAYS[0+1] == DAYS[1] == 'Monday'
# 14 days from now: DAYS[0+(14%7)] == DAYS[0+0] == DAYS[0] == 'Saturday'
# DAYS[1] == 'Monday'
# 14 days from now: DAYS[1+(14%7)] == DAYS[1+0] == DAYS[1] == 'Monday'
# 17 days from now: DAYS[1+(17%7)] == DAYS[1+3] == DAYS[4] == 'Thursday'

结果函数如下所示:

def day_add(day, days_from_now):
    DAYS=['Sunday', 'Monday', ..., 'Saturday']
    if days_from_now == 0:
        return day
    else:
        todays_index = DAYS.index(day)
        return DAYS[todays_index+(days_from_now%7)]

答案 3 :(得分:0)

# Write the function day_name which is given a number, and returns its 
# name:

def day_name(number):
    if number == 0:
        return ('Sunday')
    elif number == 1:
        return ('Monday')
    elif number == 2:
        return ('Tuesday')
    elif number == 3:
        return ('Wednesday')
    elif number == 4:
        return ('Thursday')
    elif number == 5:
        return ('Friday')
    elif number == 6:
        return ('Saturday')
    else:
        return None

# Write the inverse function day_num which is given a day name, and returns its    # number:


def day_num(day_name):  
    if day_name == 'Sunday':
        return (0)
    elif day_name == 'Monday':
        return (1)
    elif day_name == 'Tuesday':
        return (2)
    elif day_name == 'Wednesday':
        return (3)
    elif day_name == 'Thursday':
        return (4)
    elif day_name == 'Friday':
        return (5)
    elif day_name == 'Saturday':
        return (6)
    else:
        return None

# Use composition to write the last function
# If Sunday i'm leaving for 10 days, i will stay 1 week and 3 days. So the day 
# i'll be back will be 3 days from Sunday (Wednesday). 
# In code: day_back = (10 % 7) + (0)

def day_add(today, stay):
    today = day_num(today)
    day_back = (stay % 7) + today
    result = day_name(day_back)
    return (result)