Python读取txt校验答案时仅首次输入匹配、循环逻辑异常问题咨询
问题排查与修复
你代码的问题主要出在以下3个核心位置:
- 文件读取逻辑错误:文件对象调用
read()方法后,文件指针会移动到文件末尾,后续再调用read()会返回空内容,所以只有第一次匹配能命中,后续所有匹配都会失败。 - 列表初始化位置错误:你把存正确答案的
answer列表放在了for循环内部,每次循环都会清空列表,完全无法实现「记录已提交答案、重复提交不计分」的需求。 - 缩进与循环逻辑混乱:询问是否继续的代码缩进错误,且放在了10次答题的循环内部,答题逻辑和重启逻辑的执行顺序完全不符合预期。
修正后代码
首先提前把正确答案读入内存,再做匹配和去重判断:
# 提前读取所有正确答案到集合,匹配效率更高 with open('topic1.txt', 'r', encoding='utf-8') as f: valid_answers = {line.strip() for line in f} # 已提交的正确答案列表 answered = [] again = True while again: for i in range(10): user_input = input(f"{i+1}. ").strip().upper() # 先判断是不是有效答案 if user_input not in valid_answers: print("not found") # 答案错误直接退出答题循环 break # 再判断是不是已经提交过 if user_input in answered: print("重复提交,不计分") continue # 符合条件存入列表 print("found") answered.append(user_input) print(answered) # 一轮答题结束后询问是否重启 ask = input("Wanna play again? [Y] / [N]: ").strip().upper() again = ask == 'Y'
修复说明
- 提前把
topic1.txt里的所有正确答案读取到集合valid_answers中,避免重复读取文件,也解决了文件指针偏移导致的匹配失效问题 - 把存储已提交正确答案的列表
answered移到循环外部,保证历史提交记录不会被清空 - 调整了判断逻辑顺序:先判断答案是否有效,无效直接退出答题;再判断是否重复提交,重复则不计分;符合要求的新正确答案才存入列表
- 把是否重新游戏的询问移到10次答题的循环外部,只有一轮答题结束/答错退出后才会触发询问
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

