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

Python字典如何使用多条件作为键?石头剪刀布代码异常排查

问题原因

你误用了Python的and逻辑运算符构造字典键:

  • Python中A and B的运算规则为:若A为真则返回B,否则返回A。你使用的所有出拳字符串都是非空真值,因此"paper" and "rock"这类写法的实际返回值是第二个字符串"rock",而非你预期的组合条件。
  • 最终你的规则字典会被覆盖到仅剩3个有效键:rock、paper、scissors,对应最后一次赋值的结果,因此输出完全不符合规则。

解决方案

使用元组作为字典的键,元组为不可变类型,支持作为字典键存储组合条件:

修改后的规则字典

table = {
    ("paper", "paper"): "Draw",
    ("paper", "rock"): "Win",
    ("paper", "scissors"): "You Lose",
    ("rock", "paper"): "You Lose",
    ("rock", "rock"): "Draw",
    ("rock", "scissors"): "Win",
    ("scissors", "paper"): "Win",
    ("scissors", "rock"): "You Lose",
    ("scissors", "scissors"): "Draw"
}

修改后的对局逻辑代码

@client.command()
async def rockpaperscissors(ctx, rpschoice):
    # 可选输入校验,避免用户输入非法内容触发KeyError
    if rpschoice not in rps:
        await ctx.send("请输入合法出拳:rock/paper/scissors")
        return
    x = random.choice(rps)
    await ctx.send(x)
    await ctx.send(table[(rpschoice, x)])

原有rps列表的定义无需修改,修改后即可按照你预期的规则输出对局结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:15:05