首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果不存在多个循环并打印其他东西

如果不存在多个循环并打印其他东西
EN

Stack Overflow用户
提问于 2014-12-11 11:23:35
回答 1查看 60关注 0票数 0

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

week_day:显示当前数据字段的周

module_id:显示当前数据字段链接到的位置(因为每天都有X个模块)

day :它链接到的当前日期

course :只是第二天的元数据,在本例中是一门课程。

代码语言:javascript
复制
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)。

代码语言:javascript
复制
module = [1, 2, 3, 4]

我的方法得到当前的日子所选的周和年。我用的是头5天。

代码语言:javascript
复制
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

现在我的问题来了,我可以从接下来的几周和一年中得到数据。但我不知道如何实现模块,并打印空数据,如果模块到链接日没有数据。

代码语言:javascript
复制
for x in get_week_days(2014, 50):
    for y in list:
        if x['date'] == y['day']:
            print(y['course'])

它应该打印什么?

因此,它必须打印5个工作日的所有课程,它应该像这样打印第1天(本例中为第8天)。

{“周_日”:50,“模块_id”:1,“天”:8,“课程”:'Course1'}

{“周_日”:50,“模块_id”:2,“天”:8,“课程”:'Course2'}

“空”

“空”

然后继续到第2天(本例中为第9天)

{“周_日”:50,“模块_id”:1,“天”:9,“课程”:'Course3'}

“空”

“空”

“空”

以此类推,但正如您所看到的,它也应该与相应的模块一起打印,如果没有使用模块id的过程,则应该打印空字符串或其他内容。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-11 12:18:05

我不确定我是否完全理解你的问题,但这里似乎是一个快速解决办法。

代码语言:javascript
复制
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用作变量名。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27421689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档