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

如何检测输入字符串是否在指定列表中及是否为重复答案变体

代码调整方案

原代码核心问题

  • 存储已提交记录的answer列表定义在循环内部,每次循环都会清空,之前的输入完全没有保留,自然无法完成重复判定。
  • 重复判定逻辑错误:原有逻辑仅判断当前输入的完整字符串是否和之前输入完全一致,没有匹配输入包含的词根,无法实现输入Heights触发Height重复判定的需求。
  • 文件读取放在循环内部,每次循环重复读取相同文件,效率极低。
  • 缩进逻辑错误,合法答案的存储分支触发条件错误。

修改后代码

# 提前读取合法答案、定义常量,避免循环内重复执行
with open('D:/VB/PRELIM/topic1.txt', 'r', encoding='utf-8') as f:
    valid_answers = set(f.read().strip().split())
# 预设词根列表
topic1 = ['SPIDER', 'HEIGHT', 'STRANGER', 'DYING', 'DARK','GHOST','SNAKE','ALONE','BOSS','FIRED']
# 存储已经提交过的词根
submitted_roots = []
index = 0

while index < 10:
    user_input = input(f"{index + 1}. ").upper()
    # 校验输入是否为合法答案
    if user_input not in valid_answers:
        print("答案不合法")
        continue
    # 匹配当前输入包含的所有预设词根
    matched = [root for root in topic1 if root in user_input]
    # 检查是否有词根已经被提交过
    if any(root in submitted_roots for root in matched):
        print("You repeated your answer!")
        continue
    # 无重复则把当前匹配到的词根存入提交记录
    submitted_roots.extend(matched)
    index += 1

逻辑说明

  1. 所有初始化逻辑移到循环外部,不会重复读文件,也不会清空提交记录。
  2. 每次用户输入后先匹配其包含的所有预设词根,只要有任意一个词根已经被提交过,就触发重复判定,完全符合你输入Heights触发Height重复校验的需求。
  3. 用with语句读取文件,自动释放资源,避免文件句柄泄漏。

内容的提问来源于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 07:06:01