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

Python测验程序违禁词匹配异常问题求助

解决Python测验程序误拦截所有输入的问题

先找根因

全拦截的问题基本逃不开两个情况:要么判断逻辑写反了,要么对违禁列表的结构处理错了:

  • 比如你本来要判断「输入不在违禁列表」,结果写成了「输入在违禁列表」,那不管输啥都会被拦
  • 如果你的banned是字典(比如存违禁名和违规原因),直接用playername in banned其实是查字典的键,但要是逻辑没搞对,也会出问题

直接改代码

根据你的情况,给两种常见场景的修正代码:

场景1:违禁内容是列表

# 定义违禁名称列表
banned_names = ["违规名1", "违规名2"]
playername = input("请输入你的名字:")

# 正确逻辑:名字不在违禁列表里才放行
if playername not in banned_names:
    print("名字合法,开始测验")
else:
    print("这个名称违规,请换一个")

场景2:违禁内容是字典

如果你的banned是字典(键为违禁名),这么改:

banned = {"违规名1": "违规原因", "违规名2": "违规原因"}
playername = input("请输入你的名字:")

# 检查名字是不是字典里的违禁键
if playername not in banned.keys():
    print("没问题,进入测验")
else:
    print("名称违规,重新输入")

你试过的代码怎么调整

你之前写了if playername in list(banned),这行如果是用来判断是否违禁,逻辑反了,得改成:

# 改成“不在违禁列表里才放行”
if playername not in list(banned):
    # 正常执行测验流程
else:
    # 弹出违规提示

另外,关于你提到的DRY原则,把违禁检查封装成函数就行,避免重复写判断:

def check_banned(input_content, banned_list):
    return input_content in banned_list

# 调用示例
banned_names = ["违规名1", "违规名2"]
playername = input("输个名字:")
if not check_banned(playername, banned_names):
    print("进测验啦")
else:
    print("这个名字不能用")

内容的提问来源于stack exchange,提问作者kvothethearcane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 23:45:23