如何简化三滚轮老虎机程序中Wild Symbol的代码实现?
三滚轮老虎机代码的简洁优化实现
先提个原代码里的小bug:你把三个20的Jackpot判断放在了一堆Win条件之后,但三个20其实会先触发ri1 == ri2 == ri3的Win判定,导致Jackpot永远不会被触发,得调整优先级。
下面是更简洁易维护的实现:
优化思路
- 用列表统一管理三个滚轮的结果,避免重复定义变量
- 把分散的Win条件合并成逻辑清晰的判断,不用写一堆elif
- 修正Jackpot的判断顺序,确保它能被正确触发
优化后的代码
import random # 一次性生成三个滚轮结果,用列表存储 wheels = [random.randint(1, 20) for _ in range(3)] print(*wheels) # 定义常量,后续改符号值更方便 WILD = 1 JACKPOT_SYMBOL = 20 # 优先判断Jackpot:三个全是20 if all(wheel == JACKPOT_SYMBOL for wheel in wheels): print("Jackpot") else: wild_num = wheels.count(WILD) # 筛选出非Wild的符号 non_wild_symbols = [w for w in wheels if w != WILD] # 合并所有Win条件: # 1. 三个符号完全相同(已排除Jackpot) # 2. 有至少2个Wild # 3. 1个Wild + 另外两个非Wild符号相同 is_win = (len(set(wheels)) == 1) or (wild_num >= 2) or (wild_num == 1 and len(set(non_wild_symbols)) == 1) print("Win" if is_win else "Play Again")
代码说明
- 列表生成滚轮结果:用列表推导式替代三个单独的变量定义,代码更简洁,后续要调整滚轮数量也只需要改
range(3)里的数字。 - 常量定义:把Wild和Jackpot的符号值定义成常量,以后如果要把Wild改成5,直接改
WILD = 5就行,不用在代码里找所有的1。 - Jackpot判断:用
all()函数检查所有滚轮是否都是20,放在最前面确保不会被Win条件覆盖。 - Win条件合并:把原代码里的7个Win相关条件合并成三个逻辑分支,一眼就能看明白获胜规则,后续要修改规则也更容易调整。
内容的提问来源于stack exchange,提问作者Brendan Emanuel
相关产品推荐
相关产品推荐

