Python书籍/电影信息查询程序循环重复输出问题求助
问题分析与修复
你的程序出现重复输出和逻辑错误,核心问题集中在输入处理、循环逻辑和索引安全三个方面:
1. 输入拆分逻辑混乱
你用split()直接拆分用户输入,会把所有空格作为分隔符,导致原本按逗号分隔的作品条目被拆成零散单词,完全破坏了「标题-作者-年份」的结构。比如输入Tell-Tale Heart Poe 1843,会被拆成['Tell-Tale', 'Heart', 'Poe', '1843,'],无法区分每个字段的归属。
2. 重复输出的直接原因
- author分支:找到匹配作者后未终止循环,会继续遍历整个列表,若因拆分错误导致作者名多次出现,就会重复打印结果;
- year分支:先直接打印一次目标内容,之后又用循环重复打印同一段内容,且循环条件
i<=len(list1)会触发索引越界(当i=len(list1)时,list1[i]不存在)。
3. 索引越界风险
当匹配的作者在列表第一个位置时,i-1会变成-1触发IndexError;同理,匹配项在最后一个位置时,i+1会超出列表长度。
修复后的代码
def find_similar(choice1, items_list): if choice1 == 'author': name = input('输入要查找的作者姓名: ') found = False for item in items_list: if item[1] == name: print(f"标题: {item[0]}") print(f"作者: {item[1]}") print(f"年份: {item[2]}") found = True if not found: print('未找到该作者的作品') elif choice1 == 'year': target_year = input('输入要查找的年份: ') found = False for item in items_list: if item[2] == target_year: print(f"标题: {item[0]}") print(f"作者: {item[1]}") print(f"年份: {item[2]}") found = True if not found: print('未找到该年份的作品') # 处理用户输入,先按逗号拆分条目,再整理结构化数据 user_info = input('输入书籍/电影信息,格式为「标题 作者 年份,」,多个条目用逗号分隔,输入!结束: ') entries = [entry.strip() for entry in user_info.replace('!', '').split(',') if entry.strip()] items_list = [] for entry in entries: parts = entry.split() # 标题可能包含多个单词,取前n-2个拼接,最后两个为作者和年份 title = ' '.join(parts[:-2]) author = parts[-2] year = parts[-1] items_list.append([title, author, year]) print('整理后的输入列表:', items_list) choice = input('你想搜索什么?(author或year)') find_similar(choice, items_list)
关键修复点
- 结构化输入处理:先按逗号拆分每个作品条目,再将条目拆分为支持多单词的标题、作者、年份,形成清晰的结构化列表;
- 消除重复输出:遍历结构化列表,匹配时直接打印结果,遍历结束后统一提示未找到,避免重复打印;
- 规避索引越界:直接通过结构化子列表访问字段,不需要偏移索引;
- 优化交互体验:输入提示更明确,输出结果可读性更强。
内容的提问来源于stack exchange,提问作者ObeseCheetoh
相关产品推荐
相关产品推荐

