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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:21:02