【Python、练习题】指定权重抽卡

"""指定整数权重抽卡"""
import random


def ex_card(cards, num):
    labels = [0]
    for card in cards:
        labels.append(labels[-1] + card[1])

    rands = [random.randint(1, labels[-1]) for _ in range(num)]
    for rand_i, rand in enumerate(rands):
        for label_i, label in enumerate(labels):
            if label >= rand:
                rands[rand_i] = cards[label_i - 1]
                break
    return rands


def main():
    random.seed(0)  # 保持随机结果一致

    cards = [['card1', 10], ['card2', 20], ['card3', 15]]
    exs = ex_card(cards, 100000)

    # 验证
    res = {card[1]: 0 for card in cards}
    for ex in exs:
        res[ex[1]] += 1
    print('各种卡片的个数:')
    print(res)
    print()
    print('输入权重,实际权重')
    for k, v in res.items():
        print(k / sum(res.keys()), v / sum(res.values()))

    # 各种卡片的个数:
    # {10: 22414, 20: 44603, 15: 32983}
    #
    # 输入权重,实际权重
    # 0.2222222222222222 0.22414
    # 0.4444444444444444 0.44603
    # 0.3333333333333333 0.32983


if __name__ == '__main__':
    main()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值