如何优化Python Pygame鼠标取色函数的多分支if判断代码
# 提前定义颜色映射规则,后续新增颜色直接加这里即可 COLOUR_MAP = [ ((255, 255, None), "Yellow"), # R=255、G=255时无论B值是多少都判定为黄,和原逻辑优先级保持一致 ((255, None, None), "Red"), ((None, 255, None), "Green"), ((None, None, 255), "Blue"), ] def colour_check_under_mouse(): # 左键未按下直接返回,减少无效执行逻辑 if not pygame.mouse.get_pressed()[0]: return mouse_pos = pygame.mouse.get_pos() # 用Surface实例直接调用get_at更符合Pygame常规写法 colour_under_mouse = screen.get_at(mouse_pos) r, g, b, _ = colour_under_mouse # 解包取RGB分量,忽略alpha通道 # 遍历映射表匹配颜色,匹配到直接处理 for (r_rule, g_rule, b_rule), colour_name in COLOUR_MAP: if (r_rule is None or r == r_rule) and (g_rule is None or g == g_rule) and (b_rule is None or b == b_rule): print(colour_name) # 后续要替换业务逻辑直接改这里就行,不用动判断规则 break else: # 兜底未匹配到颜色的场景,方便调试 print("Unknown colour")
优化说明
- 用规则映射表替代多层
elif:后续要新增颜色判断规则,只需要在COLOUR_MAP里加一条配置就行,不用改动逻辑代码,避免了多层条件嵌套的冗余,维护成本极低。 - 提前判断触发条件:函数开头先判断左键有没有按下,没按下直接返回,减少不必要的坐标获取、颜色读取操作。
- 修正代码规范问题:修复了原代码的缩进错误,对返回的颜色值做解包处理,代码可读性更高。
- 逻辑解耦:颜色判断和后续的结果处理拆分,之后要把
print改成你Mastermind游戏里的业务逻辑,直接修改匹配到颜色后的代码块就行,不用调整判断规则部分。 - 新增兜底处理:避免遇到不在你预设规则里的颜色时没有任何反馈,方便调试阶段定位问题。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

