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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:06:02