年会抽奖程序
张三科技有限公司有300名员工,开年会抽奖,奖项如下: 一等奖3名,泰国5日游 二等奖6名,iPhone手机 三等奖30名,避孕套一盒 规则: 共抽3次,第一次抽3等奖,第二次抽二等奖,第三次压轴抽一等奖 每个员工中奖一次,不能重复
import random
#建立员工编号列表
brother = list(range(1,301)) #列表中含1-300共300个数据
#抽奖、删除操作
third = random.sample(brother,30) #random.sample()函数返回的是一个列表
print(f"恭喜编号为{third}的员工获得三等奖,奖品:避孕套一盒!")
print()
for i in range(30): #移除已中奖员工的编号
brother.remove(third[i])
second = random.sample(brother,6)
print(f"恭喜编号为{second}的员工获得二等奖,奖品:iPhone手机一台!")
print()
for i in range(6):
brother.remove(second[i])
first = random.sample(brother,3)
print(f"恭喜编号为{first}的员工获得一等奖,奖品:泰国5日游!")
京牌摇号小程序
允许用户最多选择3次;每次放出20个车牌供用户选择;京[A-Z]-[xxxxx],可以是数字和字母再组合。
import random
import string
car_nums= [] #暂存车牌号的列表
#生成并存储20个车牌号
for j in range(20):
n1 = random.choice(string.ascii_uppercase)
n2 = "".join(random.sample(string.digits + string.ascii_uppercase, 5))
car_num = f"京{n1}-{n2}"
car_nums.append(car_num)
#格式化打印20个车牌号
for m in range(4):
for n in range(5):
print(f"第{5*m+n+1}个: ",car_nums[5*m+n]," ",end="")
print()
#用户选择或重选
chance = 3 #3次选择机会
choose = 0
while chance >=0 :
#用户选择次数用完,无法再刷新的情况
if chance ==0:
choose = int(input("您已用完所有机会,无法刷新。请输入序号选择车牌号:"))
else:
choose = int(input(f"请输入序号选择车牌号,输入0刷新选择池。您共有3次机会,还剩{chance}次机会。"))
#用户刷新成功的情况
if choose == 0:
car_nums= [] #清空原来的数组!!!
# 生成并存储20个车牌号
for j in range(20):
n1 = random.choice(string.ascii_uppercase)
n2 = "".join(random.sample(string.digits + string.ascii_uppercase, 5))
car_num = f"京{n1}-{n2}"
car_nums.append(car_num)
# 格式化打印20个车牌号
for m in range(4):
for n in range(5):
print(f"第{5 * m + n + 1}个: ", car_nums[5 * m + n], " ", end="")
print()
#更新剩余选择次数
if chance ==0:
chance =0
else: chance -= 1
#用户选择成功的情况
elif choose>0 and choose<20:
print(f"恭喜您,您的车牌号为{car_nums[choose-1]}。")
break
#输入非法的情况
else:
print("输入非法!")
京牌摇号小程序的问题与解决:
问题:每次刷新出来的随机车牌号都是一样的
原因:原来是刷新后没有清空car_nums列表,后续生成的随机车牌号都加在了末尾,所以打印前20个时打印结果永远都是最初的20个。
解决方法:每次刷新操作中,先清空car_nums再存储生成的随机车牌号。