Python实战-实现简单答题加权抽奖程序(Excel导入名单)

本文介绍了一个由Ado小白编写的Python抽奖程序,使用random和pandas库。程序根据答对题数加权,奖品分为A类10种和B类3种,满抽规则。程序读取Excel数据,随机抽取获奖者并更新奖品库存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言[Ado小白出品]

为实现个人发奖需求,紧急写的抽奖程序:共12题,每对三题概率翻倍,奖品有A,B两类,其中A类10种,B类3种,奖品需要满抽。

需要的库

这里主要用到两个库,random构成随机抽奖,pands读取Excel

import random
import pandas as pd

函数正文

总题目number 为12,r为加权函数,right为正确数。
加权规则为:每答对三题概论翻一倍

number = 12
def r(right):
  if int(right) < 3: # 将字符串转换为整数
    return 1
  else:
    return int(right) // 3

读取excel文件,假设文件名为data.xlsx,第一列为name,第二列为答对数

df = pd.read_csv('C://Desktop//roll.csv', header=None, names=['name', 'right'])

将DataFrame转换为字典,以name为键,答对数为值

participte = df.set_index('name')['right'].to_dict()

定义一个列表,存储每个人的name和r

poll = []
for name, right in participte.items():
  # 根据r函数,将name重复添加到poll中
  for i in range(r(right)):
    poll.append(name)

定义一个字典,存储每个reward的类别和数量

reward = {"A": 10, "B": 3}

定义一个变量,存储需要抽取的人数

people = 13

从奖池中抽奖并去重

  # 从poll中随机选择一个name
  name = random.choice(poll)
  # 从reward字典中随机选择一个reward
  tY = random.choice(list(reward.keys()))
  # 如果reward数量大于0,说明还有剩余的reward
  if reward[tY] > 0:
    # 打印中奖者的name和tY
    print("{}中了{}!".format(name, tY))
    while name in poll:
        poll.remove(name)
    # 从reward数量中减一
    reward[tY] -= 1
    # 从people中减一
    people -= 1
  # 从poll中移除该name,避免重复抽取
  poll = [x for x in poll if x != name]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值