Python航班查询程序故障:无法检测元素是否存在于子列表并错误输出全部数据
修复你的Python航班查询程序问题
让我们一步步排查并修复你的代码问题:
问题点分析
- 不必要的全列表输出:你代码里的
print(list_of_lists)会直接把所有航班数据打印出来,这就是为什么你看到整个列表的原因,需要删除这行。 - 匹配失败的核心原因:你把输入转成了大写,但
schedule.txt里的字段(比如BANGKOK)带有 trailing 空格,而且分割后的子列表元素也包含前后空格,导致search in lists无法匹配到。 - 错误提示重复输出:你的循环里每遍历一个不匹配的子列表就打印一次
No flights found,这会导致多次输出错误信息,逻辑不合理。 - 输出格式问题:当匹配到多个航班时,会重复打印
The available flights are:,需要统一处理输出。
修复后的代码
# 获取用户输入并统一转为大写,同时去除前后空格 search = input("Enter data name: ").strip().upper() # 存储匹配到的航班 matched_flights = [] with open('schedule.txt', 'r') as f: for line in f: stripped_line = line.strip() # 跳过空行(如果有的话) if not stripped_line: continue # 分割每行数据,并对每个字段去除前后空格,同时转为大写(方便匹配) processed_line = [item.strip().upper() for item in stripped_line.split(',')] # 检查关键词是否在当前航班的字段中 if search in processed_line: # 保留原始格式的航班数据用于输出 original_line = [item.strip() for item in stripped_line.split(',')] matched_flights.append(original_line) # 处理输出逻辑 if matched_flights: print('The available flights are:') for index, flight in enumerate(matched_flights, 1): print(f"\nFlight {index}:") print('\n'.join(flight)) else: print('No flights found')
代码说明
- 输入处理:对用户输入做
strip()去除前后空格,再转大写,避免输入的空格或大小写差异影响匹配。 - 数据预处理:分割每行数据后,对每个字段做
strip()去除前后空格并转大写,实现大小写不敏感的匹配。 - 结果收集:先把所有匹配到的航班收集到
matched_flights列表中,最后统一输出,避免重复打印提示信息。 - 输出优化:匹配到结果时,先打印一次提示,再逐个带序号输出航班信息,每个字段换行显示,格式更清晰易读。
- 文件处理:
with语句会自动管理文件资源,不需要手动调用f.close()(原代码里的f.close()在with块外已经无效,因为with结束后文件已自动关闭)。
测试一下输入bangkok,现在会正确匹配到SX849航班;输入MALAYSIAN AIRLINE会匹配到MH371和MH234两个航班,输出完全符合预期。
内容的提问来源于stack exchange,提问作者L.zh
相关产品推荐
相关产品推荐

