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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:39:04