如何简化Python石头剪刀布游戏的胜负判断代码?
简化石头剪刀布胜负判断的几种方案
方法一:字典映射克制关系
通过字典直接定义每个选择的克制对象,代码简洁且逻辑直观:
def check_results(ai, self): if ai == self: return 'tralf' # 键:玩家选择,值:该选择能击败的AI选项 beats = { 'rock': 'scissors', 'paper': 'rock', 'scissors': 'paper' } # 玩家能击败AI则返回True,否则返回False return beats[self] == ai
这种方式把所有胜负规则集中在字典中,后续如果需要调整规则(比如扩展游戏选项),只需修改字典即可,无需改动条件判断逻辑。
方法二:索引模运算判断
将选项存入列表,利用索引的模3运算来推导胜负,避免硬编码多分支条件:
def check_results(ai, self): choices = ['rock', 'paper', 'scissors'] player_idx = choices.index(self) ai_idx = choices.index(ai) if player_idx == ai_idx: return 'tralf' # 模3运算判断胜负:玩家索引相对AI索引偏移1时获胜 return (player_idx - ai_idx) % 3 == 1
逻辑说明:
- 列表
choices定义了选项的顺序,每个选项对应唯一索引 - 平局时两者索引相等,直接返回
'tralf' - 当
(player_idx - ai_idx) % 3 == 1时,玩家获胜:- 石头(0)击败剪刀(2):
(0-2) %3 =1 - 布(1)击败石头(0):
(1-0) %3=1 - 剪刀(2)击败布(1):
(2-1) %3=1
- 石头(0)击败剪刀(2):
内容的提问来源于stack exchange,提问作者Orange
相关产品推荐
相关产品推荐

