Python开发Discord机器人问答小游戏首个if条件始终为真怎么修复
问题根源
你的代码中触发错误的核心原因有两个:
- 直接将生成器表达式放在
if条件中判断:(substring in answer.content.lower() for substring in QA[Q][1])这部分是生成器对象,Python中所有非空的生成器对象直接做布尔判断时,返回值永远是True,完全不会执行内部的匹配逻辑,所以第一个if条件无论你输入什么都会判定成立。 - 判断顺序错误:你先判断近似答案、后判断正确答案,如果用户输入的正确答案包含近似答案的内容,会被误判为近似回答。
修正方案
把判断逻辑替换为以下内容即可:
user_input = answer.content.lower() # 优先判断正确答案 if any(substring in user_input for substring in QA[Q][2]): await ctx.send('Correct!') return # 再判断近似答案 elif any(substring in user_input for substring in QA[Q][1]): await ctx.send('Close but not quite.') return else: await ctx.send('Incorrect') return
修改说明:
- 用
any()函数包裹生成器表达式,功能是检测是否存在至少一个子串匹配用户输入,返回实际的布尔匹配结果 - 调换了正确答案和近似答案的判断顺序,避免误判
内容的提问来源于stack exchange,提问作者Doughnut Feel
相关产品推荐
相关产品推荐

