多圈并打印其他东西,如果它不存在

时间:2014-12-11 11:23:35

标签: python loops python-3.x while-loop

我正在尝试创建某种日程表。 我首先要做的是创建一个列表,我只需添加字典数据,输出如下:

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,它应该打印一个空字符串或其他东西

1 个答案:

答案 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作为变量名。)