Python图书馆系统搜索功能搭配while循环运行异常问题求助
图书馆搜索功能修复及优化方案
功能实现(支持搜索失败后重试直到匹配成功)
你原有代码的核心问题是:搜索失败重新输入关键词后,没有重新触发逐行匹配书籍的逻辑,只需要把整个搜索+匹配流程套入外层循环,匹配到有效书籍后终止循环即可,修正后代码如下:
# 提前一次性读取所有书籍数据,避免重复打开文件 with open('books.txt', 'r', encoding='utf-8') as f: book_list = [line.strip() for line in f if line.strip()] while True: search = input('enter the number or name of the book you want to search\n').strip() av1 = False matched_book = "" # 遍历匹配书籍 for book in book_list: if search in book: print(f"{book} Availible") av1 = True matched_book = book # 如果只需要匹配第一个结果可以取消下行注释 # break if av1: # 匹配到有效书籍,跳出循环 b1 = matched_book break else: print('This Book is currently unavailible, please enter new book')
核心改动点说明
- 新增外层无限循环包裹整个搜索+匹配流程,只有匹配到书籍才会跳出循环
- 把用户输入、书籍匹配的逻辑都放到循环内部,每次重新输入关键词都会触发全量匹配
- 修正了原代码中同名变量
books既当布尔标记又当单行内容的歧义问题 - 补充了匹配状态变量
av1的初始化,避免未匹配到的场景下调用该变量报错
原有代码可优化点
- 减少重复IO操作:原代码先后两次打开读取
books.txt,实际只需读取一次存储到列表中,后续所有匹配都用内存中的列表即可,大幅提升执行效率 - 增加内容格式化:读取书籍内容和用户输入时都用
strip()处理首尾空格/换行符,避免因为隐形字符导致匹配失败 - 变量命名规范:避免同一个变量名承载多种含义,降低后续维护的bug概率
- 可选增加匹配优先级逻辑:如果需要优先匹配书籍编号完全一致的结果,可以调整匹配规则,减少误匹配的情况
内容的提问来源于stack exchange,提问作者rick
相关产品推荐
相关产品推荐

