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
相关产品推荐
相关产品推荐

