【Python】可设置抽奖者权重的抽奖脚本

功能描述

抽奖系统包含如下特点:
1、可给不同抽奖者设置不同的权重
2、先从价值高的奖品开始抽
3、已经中奖的人,不再参与后续的抽奖

代码

第一个数字表示某一个用户的中奖编号,第二个数字表示该用户的中奖权重。
名单.txt内容为:

1:20
2:10
3:8
4:6
5:6
6:3
7:2
8:1

main.py内容为:

# 抽奖工具
# -*- coding:utf-8 -*-
from random import choice

def read_name_list(txt_name):
    with open(txt_name, 'r', encoding='utf-8') as f:
        txt_list = f.readlines()
    for i in range(len(txt_list)):
        txt_list[i] = txt_list[i].rstrip('\n')
    return txt_list

def lottery_draw(name_list, prize_box):
    full_number = []
    for name in name_list:
        number, weight = name.split(':')
        full_number += [number] * int(weight)
    for prize in prize_box:
        luck_number = choice(full_number)
        print('【{}】的中奖用户编号为:{}'.format(prize, luck_number))
        full_number = [i for i in full_number if i != luck_number]

if __name__ == '__main__':
    # 导入名单
    name_list = read_name_list('名单.txt')
    # 设置奖项
    prize_box = ['汽车', '电脑', '杯子', '香蕉', '5毛红包']
    # 抽奖
    lottery_draw(name_list, prize_box)

运行结果如下:

【汽车】的中奖用户编号为:5
【电脑】的中奖用户编号为:1
【杯子】的中奖用户编号为:3
【香蕉】的中奖用户编号为:25毛红包】的中奖用户编号为:6

验证

加一个统计函数statistics、修改下lottery_draw的输入输出,然后抽奖1000000次,看看结果是否和我们设想的一样不同用户中奖权重不同。
main.py完整代码如下:

# 抽奖工具
# -*- coding:utf-8 -*-
from random import choice
from collections import Counter

def read_name_list(txt_name):
    with open(txt_name, 'r'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值