"""指定整数权重抽卡"""
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()