我正在尝试创建某种日程表。
我首先要做的是创建一个列表,我只需添加字典数据,输出如下:
week_day :显示当前数据字段的周数
module_id :显示当前数据字段的链接位置(因为每天都有X个模块)
天:与当天相关联的日期
当然:只是元数据到第二天,在这种情况下是一个课程。
from datetime import date, timedelta
list = []
d1 = {'week_day': 50, 'module_id': 1, 'day' : 8, 'course' : 'Course1'}
d2 = {'week_day': 50, 'module_id': 2, 'day' : 8, 'course' : 'Course2'}
d3 = {'week_day': 50, 'module_id': 1, 'day' : 9, 'course' : 'Course3'}
d4 = {'week_day': 50, 'module_id': 3, 'day' : 10, 'course' : 'Course4'}
d5 = {'week_day': 50, 'module_id': 2, 'day' : 11, 'course' : 'Course5'}
d6 = {'week_day': 50, 'module_id': 1, 'day' : 12, 'course' : 'Course6'}
d7 = {'week_day': 51, 'module_id': 1, 'day' : 15, 'course' : 'Course7'}
d8 = {'week_day': 51, 'module_id': 1, 'day' : 16, 'course' : 'Course8'}
list.append(d1)
list.append(d2)
list.append(d3)
list.append(d4)
list.append(d5)
list.append(d6)
list.append(d7)
list.append(d8)
作为测试,我只是给这一天有4个模块,ID号(int)
module = [1, 2, 3, 4]
我的方法来获取所选周和年的当前日期。我使用前5天。
def get_week_days(year, week):
"""
will get all the '5 working days' in the week, it will print the week name.
based on the corresponding year and weeknumber
"""
d = date(year,1,1)
d = d - timedelta(d.weekday())
dlt = timedelta(days = (week-1)*7)
start_date = d + dlt
end_date = d + dlt + timedelta(days=4)
list = []
while True:
dict = {
'dayname' : '{:%A}'.format(start_date),
'date' : int('{:%d}'.format(start_date))
}
list.append((dict))
start_date = start_date + timedelta(days=1)
if start_date > end_date:
break
return list
现在我的问题来了,我可以从接下来的几周和一年中获得数据。但是,如果链接日的模块没有数据,我不知道如何实现模块并打印空数据。
for x in get_week_days(2014, 50):
for y in list:
if x['date'] == y['day']:
print(y['course'])
因此必须打印5个工作日的所有课程 它应该像这样打印第1天(在这种情况下是第8天)
{'week_day':50,'module_id':1,'day':8,'course':'Course1'}
{'week_day':50,'module_id':2,'day':8,'course':'Course2'}
“空”
'空'
然后继续第2天(本例中为第9天)
{'week_day':50,'module_id':1,'day':9,'course':'Course3'}
“空”
“空”
'空'
依此类推,但是如你所见,它也应该打印相应的模块,如果没有课程的话 使用模块ID,它应该打印一个空字符串或其他东西
答案 0 :(得分:1)
我不确定我是否完全理解你的问题,但这里似乎是一个快速修复。
for x in get_week_days(2014, 50):
x_mod = [False for _ in module]
for y in list:
if x['date'] == y['day']:
x_mod[y['module_id']-1] = y
for my_module in x_mod:
print(my_module if my_module else 'empty')
但是,更改算法以使其更具可扩展性可能是明智之举。例如,如果事件按照您的示例中的日期排序,则您不需要经常检查每个条目,单次遍历就足够了。
(顺便说一句,避免使用list作为变量名。)