Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 打印用户给定的特定时间_Python - Fatal编程技术网

Python 打印用户给定的特定时间

Python 打印用户给定的特定时间,python,Python,我正在尝试打印一个列表中最接近的值,该列表提供用户输入。实际上,用户给我一个时间,我想检查这个值是否在时间表的列表中,否则我想增加分钟数,直到我恢复列表的值,然后在30分钟的时间槽中打印时间。这是我的密码。你能帮我看看什么不起作用吗?谢谢 def print_specific_time(): f = open("Bus 6 Lugano Stazione.txt") lines = f.readlines() d = defaultdict(list) start = lines.index("

我正在尝试打印一个列表中最接近的值,该列表提供用户输入。实际上,用户给我一个时间,我想检查这个值是否在时间表的列表中,否则我想增加分钟数,直到我恢复列表的值,然后在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'时才打印它……

我认为您有点过于复杂了。这种逐项增加是没有必要的。以下是我在字典中查找最近时间的代码:

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])
在这里,您可以看到它正在工作:

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


编辑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 printed():
f=打开(“总线6 Lugano statzione.txt”)
行=f.读行()
d=默认DICT(列表)
开始=行。索引(“星期一\n”)
停止=行。索引(“星期六”\n)
time=“07.35”
小时=时间[0]+时间[1]
分钟=时间[3:]
对于行中的行[开始:停止]:
直线=直线带(“,”)
行=行。替换(“\n”和“”)
行=行。替换(“,”)
直线=直线分割(“|”)法
键=行[0]
如果len(line)==2:
d[键]+=[行[1]]
d=dict(d)
返回d
def查找(时间):
数据=打印()
数据2=[int(h)*60+int(m)表示数据中的h。键()表示数据中的m[h]]
开始时间,开始分钟=映射(int,time.split('.'))
开始=开始小时*60+开始分钟
结束=开始+30

after=list(filter(lambda x:start)我在python中尝试过它,但是,当然,我说范围没有定义对不起,我在python2中写的。它只是python3中的
range
。另一个bug。filter没有属性len()。好的。我检查了它,在filter前面放了一个列表。这样做,我就可以把你的答案指定为正确的答案。谢谢男人:)我刚刚编辑了我的答案。你尝试过当前代码吗?
过滤器
的结果现在转换为
列表
。我在我的答案中添加了第二个副手。这可能会帮助你进一步。请给我一分钟时间合并并尝试