You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python航班查询程序故障:无法检测元素是否存在于子列表并错误输出全部数据

修复你的Python航班查询程序问题

让我们一步步排查并修复你的代码问题:

问题点分析

  1. 不必要的全列表输出:你代码里的print(list_of_lists)会直接把所有航班数据打印出来,这就是为什么你看到整个列表的原因,需要删除这行。
  2. 匹配失败的核心原因:你把输入转成了大写,但schedule.txt里的字段(比如BANGKOK )带有 trailing 空格,而且分割后的子列表元素也包含前后空格,导致search in lists无法匹配到。
  3. 错误提示重复输出:你的循环里每遍历一个不匹配的子列表就打印一次No flights found,这会导致多次输出错误信息,逻辑不合理。
  4. 输出格式问题:当匹配到多个航班时,会重复打印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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 00:09:09