如何修复Python检索txt订单记录仅显示首条、无匹配不提示的问题
代码问题修复方案
问题根因
- 仅展示第一条匹配记录:原代码在遍历到第一条匹配的用户名时,打印完记录直接进入返回选项的输入循环,且直接调用了其他函数,终止了遍历逻辑,剩余匹配的记录不会被处理。
- 不存在的用户名无提示:原代码将「不存在」的提示逻辑写在了遍历循环内部的分支中,只有当遍历到某行用户名包含搜索关键词但不完全相等时才会触发提示;如果所有行都完全不匹配搜索用户名,该分支永远不会执行,自然不会有提示。
修复后完整代码
import time # 保留你原代码中search_order_payment()的调用逻辑,假设该函数为你已实现的返回上级菜单函数 def search_payment(): print("请输入要查询的顾客用户名") search_username = input("顾客用户名: ").upper() # 改用with open语法,自动管理文件关闭,避免资源泄漏 with open("customer_order_records.txt", "r", encoding="utf-8") as f: view_payment_by_line = f.read().splitlines() # 新增列表收集所有匹配的记录 found_records = [] for line in view_payment_by_line: if not line.strip(): continue data = line.split(",") if search_username == data[0].strip(): found_records.append(data) # 遍历完全部记录后统一处理 print("正在搜索.....") time.sleep(1) print("搜索完成!\n") if not found_records: print("*** 顾客用户名不存在!请重试!\n") while True: try_again = input("(b) 返回上级 (c) 继续查询 : ") if try_again.lower() == "b": search_order_payment() elif try_again.lower() == "c": search_payment() else: print("*** 输入无效!请重试\n") else: print(f"*----- {search_username} 顾客订单与支付记录 -----*") print("*" * 45) # 循环打印所有匹配到的记录 for idx, data in enumerate(found_records, 1): print(f"\n第 {idx} 条记录:") print(" 用户名\t\t: ", data[0],"\n 日期\t\t\t: ", data[1],"\n 订购商品\t\t: ", data[2],"\n 总数量\t\t: ", data[3],"\n 总金额\t\t: ", data[4],"\n 支付方式\t\t: ", data[5]) print("*" * 45) while True: back = input("\n(b) 返回上级: ") if back.lower() == "b": search_order_payment() else: print("*** 输入无效!请重试\n")
核心修改说明
- 新增
found_records列表存储所有匹配记录,遍历过程不打断循环,保证所有匹配项都能被检索到 - 将结果打印、不存在提示、操作选项逻辑全部移到遍历完成之后,统一判断处理,解决无匹配时不提示的问题
- 改用
with open操作文件,避免忘记关闭文件导致的资源占用问题 - 输入判断统一用
lower()方法,无需同时判断大小写两种情况,简化代码逻辑
内容的提问来源于stack exchange,提问作者truiz
相关产品推荐
相关产品推荐

