注意:
1.完成以下题目使用 python3.8 以后版本
2.只能使用 python 内置函数和标准库
3.不可使用第三方库
4.需要详细的注释
编写程序模拟抽奖活动,每名学生都有一个随机生成的抽奖号码,使用字典记录抽奖号码的相关信息, 即抽奖号码是键(key),学生信息是值(value),学生信息包括学号和姓名;一等奖设置 1 名,二等奖设置 2 名,三等奖设置 3 名,一次随机抽取兑奖号码 6 个,输出获奖者信息,并统计各班获奖人数。
编程要求:
1、编写函数,创建“学生抽奖信息”字典;
A、根据键盘输入的人数创建该字典,要求人数≥6;
B、根据人数为每名学生随机生成抽奖号码,抽奖号码是键(key),学生信息是值(value),学生信息要求从键盘输入,学生信息包括学号和姓名(学号是键,姓名是值),其中学号格式形如:’50210101’(要求加入健壮性判断,必须是 8位数字形式)。
2、编写打印输出字典的函数(格式参考示例结果);
3、编写抽奖函数,能根据奖项的设置和人数的设置,一次随机生成 6 个兑奖号码,按指定格式输出各中奖号码(格式参考示例结果),将中奖结果保存在“学生获奖信息”字典中,并显示该字典信息(格式参考示例结果);
4、编写统计函数,根据“学生获奖信息”字典(根据学号的前 6 位获得班号) 统计各班获奖人数,存放在“班级中奖人数统计”字典中,并显示该字典信息(格式参考示例结果);
5、编写程序,依次调用上述函数,实现抽奖活动的模拟。A、调用函数 1,创建“学生抽奖信息”字典;
B、调用函数 2,输出“学生抽奖信息”字典;
C、调用函数 3,输出中奖号码,创建“学生获奖信息”字典并输出;
D、调用函数(4),创建“班级中奖人数统计”字典并输出。
程序的某次运行结果如下图所示:
工程有点大啊(狗头
不写了 送你了 摸鱼结束 下班
import random
#中奖号码
def luck_draw():
li = [i for i in range(1,11)]#抽奖池
level_1 = [li[random.randint(1, len(li))]]#一等奖
level_2 = []#二等奖
level_3 = []#三等奖
li.remove(level_1[0])#从抽奖池中移除抽过了的号码 避免抽到重复的号码
for i in range(2):
a = li[random.randint(1, len(li))]
li.remove(a)#从抽奖池中移除抽过了的号码
level_2.append(a)#将抽取到的号码,添加到中奖号码中
for i in range(3):
a = li[random.randint(1, len(li))]
li.remove(a)#从抽奖池中移除抽过了的号码
level_3.append(a)#将抽取到的号码,添加到中奖号码中
return {
"一等奖": level_1,
"二等奖": level_2,
"三等奖": level_3,
}
#创建学生字典 以及学生抽奖字典
def create_student_luck_draw():
while True:
i = input("输入学生人数: ")
try:
i = int(i)
except:
print("请输入数字")
if i<6:
print("学生应当大于等于6人")
else:
break
students = {}
students_cj = {}
for a in range(i):
cj_num = random.randint(1, 10)
print("第{}位学生的抽奖号码为:{}".format(a+1,cj_num))
while True:
student_num = input("请输入学生学号:")
if len(student_num)==8:
try:
student_num = int(student_num)
if student_num in students:
print("学号已存在,重新输入!")
continue
except:
print("学号格式不正确,应为8位数字")
continue
break
print("学号格式不正确,应为8位数字")
continue
student_name = input("请输入学生姓名:")
students[student_num] = student_name
students_cj[student_num] = cj_num
return (students, students_cj)
if __name__ == '__main__':
a = [random.randint(0, 10) for a in range(6)]
print(a)
luck_draw()
# create_student_luck_draw()
from random import sample
print("抽奖开始\n一等奖设置 1 名,二等奖设置 2 名,三等奖设置 3 名\n共 6 个获奖名额")
def get_info(num):
book = sample(range(1,num+1),num)
sd = {}
check = []
for i,j in enumerate(book):
print("第{}名学生的抽奖号码为:{}".format(i+1,j))
num_sd,tmp = None,True
while tmp:
num_sd = input("请输入八位学号:")
if len(num_sd) != 8:
print("学生学号必须为八位数! 需要重新输入!")
elif num_sd.isdigit():
num_sd = int(num_sd)
if num_sd in check:
print("输入学号重复,需要重新输入!")
continue
check.append(num_sd)
tmp = False
name = input("请输入学生姓名:")
sd[i+1] = (name,num_sd)
return sd
def show_info(sd,bingo):
print("参与抽奖学生与抽奖信息如下:")
for i in sd.keys():
print("{}:\n{}".format(i,sd[i]))
print("中奖号码如下:\n一等奖号码为:{}\n二等奖号码为:{} {}\n三等奖号码为:{} {} {}"
.format(bingo[0],bingo[1],bingo[2],bingo[3],bingo[4],bingo[5]))
def main():
num = input("输入学生人数\n")
if not num.isdigit():
print("请输入十进制数字")
return
num = int(num)
if num < 6:
print("学生人数不能小于6人")
return
sd = get_info(num)
# 生成一个获奖结果列表,如不需要这换成1-6的列表
bingo = sample(range(1,7),num)
show_info(sd,bingo)
if name == 'main':
main()
摸鱼结束