需求
1. 100次必出红色
2. 100次内首次出了红色,保底就消失
3. 99次都没出保底红色,100次直接从红色里随机一个红色
4. 红色1%,紫色9%,蓝色30%,白色60%
代码实现
"""
1. 100次必出红色
2. 100次内首次出了红色,保底就消失
3. 99次都没出保底红色,100次直接从红色里随机一个红色
4. 红色1%,紫色9%,蓝色30%,白色60%
"""
import random
# 定义一个商品类
class Goods:
def __init__(self,color,name):
self.color = color
self.name = name
def desc(self):
return f"这是一个{self.color}的{self.name}"
# 定义奖品池
listGoods = [ Goods("红色","匕首") ,Goods("紫色","匕首"),Goods("蓝色","匕首"),Goods("白色","匕首"),
Goods("红色","斩马刀"),Goods("紫色","斩马刀"),Goods("蓝色","斩马刀"),Goods("白色","斩马刀"),
Goods("红色","阔刀"),Goods("紫色","阔刀"),Goods("蓝色","阔刀"),Goods("白色","阔刀"),
Goods("红色","太刀"),Goods("紫色","太刀"),Goods("蓝色","太刀"),Goods("白色","太刀"),
Goods("红色","横刀"),Goods("紫色","横刀"),Goods("蓝色","横刀"),Goods("白色","横刀"),
Goods("红色","双刀"),Goods("紫色","双刀"),Goods("蓝色","双刀"),Goods("白色","双刀"),
Goods("红色","双籍"),Goods("紫色","双籍"),Goods("蓝色","双籍"),Goods("白色","双籍"),
Goods("红色","扇子"),Goods("紫色","扇子"),Goods("蓝色","扇子"),Goods("白色","扇子"),
Goods("红色","长枪"),Goods("紫色","长枪"),Goods("蓝色","长枪"),Goods("白色","长枪"),
Goods("红色","长棍"),Goods("紫色","长棍"),Goods("蓝色","长棍"),Goods("白色","长棍")]
# 4. 红色0.1%,紫色0.9%,蓝色3%,白色6%,设置权重
weights = [
0.001,0.009,0.03,0.06,
0.001,0.009,0.03,0.06,
0.001,0.009,0.03,0.06,
0.001,0.009,0.03,0.06,
0.001,0.009,0.03,0.06,
0.001,0.009,0.03,0.06,
0.001,0.009,0.03,0.06,
0.001,0.009,0.03,0.06,
0.001,0.009,0.03,0.06,
0.001,0.009,0.03,0.06
]
def baodi():
counts = 0 # 抽奖次数
i = 100 # 剩余次数
isBaoDi = True # 是否触发保底
def rand():
nonlocal i
nonlocal isBaoDi
nonlocal counts
if(isBaoDi == False and counts == 100 and i == 0):
# 循环保底
counts = 0
i = 100
isBaoDi = True
if(isBaoDi and counts == 99 and i == 1):
# 最后一次必出红色
reds = list(filter(lambda x:x.color == "红色",listGoods))
randGoods = random.choice(reds)
print(f"第{counts}次:{randGoods.desc()},是否还有保底{isBaoDi}")
else:
# 其他情况,均是随机抽奖
randGoods = random.choices(listGoods,weights,k=1)[0]
if(randGoods.color == "红色" and isBaoDi):
isBaoDi = False
print(f"第{counts}次:{randGoods.desc()},是否还有保底{isBaoDi}")
i -= 1
counts += 1
return rand
inner = baodi()
# 模拟抽奖100次
for i in range(0,100):
inner()