Python用if elif else与random.choice实现抽奖,如何封装为可复用函数?
抽奖游戏函数封装方案
首先需要先修正你现有代码的隐藏逻辑问题:当前写法每次if/elif判断都会重新调用一次choice()重新抽奖,会出现明明抽到中奖号码却走到未中奖分支的情况,只是测试次数少不容易遇到,封装前先修复该问题再做逻辑抽象。
封装后完整代码
from random import choice def run_lottery(lottery_pool: list, winning_keys: list, print_result: bool = True) -> bool: # 仅抽取一次,固定抽奖结果 draw_result = choice(lottery_pool) # 输出中奖规则提示 print(f"若抽到如下数字或字母即可中奖:{', '.join(winning_keys)}") # 匹配你原有的中奖等级提示逻辑 if draw_result == 'e': tip = "中奖啦!!" is_win = True elif draw_result == '1': tip = "中奖啦!" is_win = True elif draw_result in ('b', '10'): tip = "中奖啦" is_win = True else: tip = "很遗憾未中奖,下次再来哦!" is_win = False if print_result: print(tip) return is_win
复用调用方法
# 初始化默认奖池、中奖名单,可根据需求随时修改 default_pool = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'a', 'b', 'c', 'd', 'e'] default_winning = ['e', '1', 'b', '10'] # 单次调用抽奖 run_lottery(default_pool, default_winning) # 批量调用示例:连续抽10次统计中奖次数 print("\n===== 连续10次抽奖测试 =====") win_total = 0 for _ in range(10): # 不需要每次打印结果就把print_result设为False if run_lottery(default_pool, default_winning, print_result=False): win_total += 1 print(f"10次抽奖共中奖{win_total}次")
封装优势
- 所有参数可自定义,换奖池、换中奖规则不需要修改函数内部逻辑
- 支持返回布尔类型的中奖状态,方便后续做统计、对接其他业务逻辑
- 修复了原代码多次抽奖的逻辑问题,结果准确
内容的提问来源于stack exchange,提问作者Uri
相关产品推荐
相关产品推荐

