Python 将天添加到当前日期

Python 将天添加到当前日期,python,Python,编写一个函数,帮助回答诸如“今天是星期三。我将在19天后休假。那将是哪一天?”…因此该函数必须使用日期名称和增量参数(要添加的天数),并应返回结果日期名称: def day_add(day, number): if number == "0": return day else: return result = day_add("Thursday", "0") print(result) assert "Friday" == day_add("M

编写一个函数,帮助回答诸如“今天是星期三。我将在19天后休假。那将是哪一天?”…因此该函数必须使用日期名称和增量参数(要添加的天数),并应返回结果日期名称:

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"

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

DAYS = ['Sunday', 'Monday', ... , 'Saturday']
(将
替换为其他日期名称:-)

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

daynum = DAYS.index(dayname)
如果
dayname
不是有效的工作日名称,则会引发
ValueError
,我猜这是可以的,否则您会告诉我们您对此类用户错误的说明!(我假设
dayname
是函数接受的参数的名称)

接下来,将
number
添加到
daynum
中,并将其取模7,使其再次成为0到6之间的数字:

result_day = (daynum + number) % 7
最后,您可以使用它为列表编制索引并返回结果:

return DAYS[result_day]
我希望您可以将这些功能组合到所需的函数中,这样您至少可以从练习中获得一点知识(如果我们为您提供了可以复制和粘贴的所需函数,则没有!)

编辑:我看到您传递的
数字实际上是一个字符串——有什么理由做出这个非常奇怪的选择吗。。。?如果它是一个非常非常非常奇怪的规范的一部分,你当然也需要把它变成一个数字,也就是说,在一开始

number = int(number)

一个保持阅读你代码的人理智的建议是:做名字
数字
一个变量,它是一个数字——就像著名的心理测试,你有一堆颜色名称,每种颜色与它命名的颜色不同,这种事情真的让人头脑发昏

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

>>> 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

从天数列表开始:

DAYS=['Sunday', 'Monday', ..., 'Saturday']
您可以使用列表的索引方法查找所提供日期的数组索引位置:

>>> print DAYS.index('Sunday')
0
>>> print DAYS.index('Monday')
1
加上从现在开始的天数,您将在天数列表中的该索引位置获得日期:

>>> todays_index=DAYS.index('Sunday')
>>> days_from_now=3
>>> print DAYS[todays_index+days_from_now]
Wednesday
然而,这将从周日起持续6天。将天从现在设置为7显然会破坏事物并导致索引器错误。但是,如果从现在开始计算第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)]

请展示您迄今为止所做的尝试。您是否尝试过使用模块中的
datetime
timedelta
呢?我还没有学过这两种方法——我正在学习python入门课程。这就是我到目前为止所拥有的:def day_add(day,number):if number==“0”:return day else:return result=day_add(“星期四”,“0”)打印(结果)断言“星期五”==day_add(“星期一”,“4”),“返回您添加一定天数后的日期”断言“星期二”==day_add(“星期二”,“0”),“返回您输入的日期”您可以编辑原始问题并将代码放入其中吗?只需复制粘贴并突出显示它,然后按control+K或按类似于
{}
@Nora的按钮,注释中的代码由于没有格式而无法读取--请将该代码复制到您的问题的编辑中(并通过突出显示并单击
{}
图标来适当设置格式!-)我现在正在尝试完成此操作!@Shashank oops,你是对的,谢谢,编辑以修复“心理打字错误”:-。仍然无法工作…我可以通过任何方式修改我的代码(我知道它缺少一些位)让它工作起来吗?很抱歉,我对python非常陌生,而且很费劲!@Nora,你试过当前版本吗(按照Shashank的建议使用
index
,尽管他的评论似乎已经不见了,而不是
find
)?根据我最近的编辑,诺拉现在试着把这个名字古怪的数字(实际上是一个字符串)变成一个数字…!-)
# 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)