编写一个有助于回答问题的函数,例如'"今天是星期三。我在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"
答案 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)