打印用户给定的特定时间

2024-09-27 00:23:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试打印一个列表中最接近的值,该列表提供用户输入。实际上,用户给我一个时间,我想检查这个值是否在时间表的列表中,否则我想增加分钟数,直到我解救列表的一个值,然后在30分钟的时间槽中打印时间。这是我的密码。你能帮我看看什么不管用吗?谢谢

def print_specific_time():
f = open("Bus 6 Lugano Stazione.txt")
lines = f.readlines()
d = defaultdict(list)
start = lines.index("Monday\n")
stop = lines.index("Saturday\n")
time = "07.35"
hour = time[0] + time[1]
minutes = time[3:]
for line in lines[start:stop]:
    line = line.strip(",")
    line = line.replace("\n","")
    line = line.replace(" ","")
    line = line.split("|")
    key = line[0]
    if len(line) == 2:
        d[key] += [line[1]]
    if minutes not in d[hour]:
        minutes = int(minutes) + 1
        minutes = str(minutes)
        print(minutes)
        if minutes in d[hour]:
            print(minutes)
            print(hour,d[hour])
                else:
            if minutes == '59':
                hour = int(hour)
                hour = hour + 1
                hour = "0" + str(hour)
                minutes = "00"
d = dict(d)
for key in d.keys():
    if key == hour:
        print(key,d[key])

在文件里我有一个日程表的清单,都放在字典里了。以下是我正在处理的输出:

{'06': ['11', '26', '41', '56'], '12': ['06', '36'], '11': ['06', '36'], 
'07': ['11', '26', '41', '56'], '16': ['11', '26', '41', '56'], '14': ['06', '36'], 
'17': ['11', '26', '41', '56'], '20': ['05', '35'], '15': ['06', '36', '56'], 
'09': ['06', '36'], '21': ['05', '35'], '22': ['05', '35'], '23': ['05', '35'], 
'19': ['11', '40'], '08': ['11', '26', '41'], '13': ['06', '36'], '10': ['06', '36'], 
'18': ['11', '26', '41', '56']}

我解释得更好。例如,如果用户输入07.35这样的时间,我的程序应该打印07.41、07.56,而不打印其他内容(因为30分钟的时间槽中没有7.56之后的时间)。你能帮我查一下有什么问题吗?谢谢

编辑 好 啊。现在我可以打印07点钟的时隙(部分正确),但我不明白为什么python只在变量minutes等于'56'而不是列表中的'41'时打印它。。。。你知道吗


Tags: key用户in列表indexiftimeline
2条回答

这是完整的版本,代码分为两个函数。代码是在@zord的帮助下完成的:

def printed():
f = open("Bus 6 Lugano Stazione.txt")
lines = f.readlines()
d = defaultdict(list)
start = lines.index("Monday\n")
stop = lines.index("Saturday\n")
time = "07.35"
hour = time[0] + time[1]
minutes = time[3:]
for line in lines[start:stop]:
    line = line.strip(",")
    line = line.replace("\n","")
    line = line.replace(" ","")
    line = line.split("|")
    key = line[0]
    if len(line) == 2:
        d[key] += [line[1]]
d = dict(d)
return d

def find(time):
    data = printed()
    data2 = [int(h) * 60 + int(m) for h in data.keys() for m in data[h]]
    start_hour, start_minute = map(int, time.split('.'))
    start = start_hour * 60 + start_minute
    end = start + 30
    after = list(filter(lambda x: start <= x <= end, data2))
    return list(map(lambda x: '%02d.%02d' % (x // 60, x % 60), after))

我觉得你有点太复杂了。这种逐项增加是不必要的。以下是我在你的字典中查找最近时间的代码:

def find(time):
    start_hour, start_minute = map(int, time.split('.'))
    for h in range(start_hour, 24):
        hour = "{0:02d}".format(h)
        if hour in data.keys():
            line = data[hour]
            if h == start_hour:
                line = list(filter(lambda m: int(m) >= start_minute, line))
            if len(line) > 0:
                return '%s.%s' % (hour, line[0])

在这里你可以看到它在工作:fiddle。你知道吗

编辑:我将代码修改为python3。(还有小提琴。)

Edit2:我还做了一个版本,在接下来的半小时里,每次都会列出。Fiddle。你知道吗

相关问题 更多 >

    热门问题