Python 字典的应用

问题描述

编写程序模拟抽奖活动,每名学生都有一个随机生成的抽奖号码,使用字典记录抽奖号码的相关信息,
即抽奖号码是键(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),创建“班级中奖人数统计”字典并输出。

实现

函数1,创建“学生抽奖信息”字典

def createdit():
    lst = []
    学生抽奖信息 = {}
    while True:
        try:
            num = int(input('人数:(>=6)'))
            if num <6:
                print('必须大于6')
                continue
        except:
            print('必须为整数')
            continue
        for i in range(num):
            num_id = random.randint(0,10)
            while num_id in lst:
                num_id = random.randint(0,10)
            lst.append(num_id)
            print('抽奖编号',num_id)
            学生抽奖信息[num_id] = {}
            stu_id = input('学号:')
            while len(stu_id) != 8 or not stu_id.isdigit():
                print('学号必须为8位数字')
                stu_id = input('学号:')
            stu_name = input('姓名:')
            学生抽奖信息[num_id][stu_id] = stu_name
        return 学生抽奖信息

函数2,输出“学生抽奖信息”字典;

def print_dic(学生抽奖信息):
    print('学生抽奖信息如下:')
    for k,v in 学生抽奖信息.items():
        for k1,v1 in v.items():
            print('{}:'.format(k))
            print('{'+"'"+k1+"'"+': '+ "'"+v1+"'" + '}')

函数3 输出中奖号码,创建“学生获奖信息”字典并输出;

字典更新用update()

def get_numid(学生抽奖信息):
    num_id_list = []
    学生获奖信息 = {'一等奖':{},'二等奖':{},'三等奖':{}}
    for k,v in 学生抽奖信息.items():
        for k1,v1 in v.items():
            num_id_list.append(k)
    bondlist = random.sample(num_id_list,6)
    print('中奖号码:')
    print('一等奖:{}'.format(bondlist[0]))
    print('二等奖:{}'.format(' '.join(str(n) for n in bondlist[1:3])))
    print('三等奖:{}'.format(' '.join(str(n) for n in bondlist[4:])))
    学生获奖信息['一等奖'] = 学生抽奖信息[bondlist[0]]
    学生获奖信息['二等奖'].update(学生抽奖信息[bondlist[1]])
    学生获奖信息['二等奖'].update(学生抽奖信息[bondlist[2]])
    学生获奖信息['三等奖'].update(学生抽奖信息[bondlist[3]])
    学生获奖信息['三等奖'].update(学生抽奖信息[bondlist[4]])
    学生获奖信息['三等奖'].update(学生抽奖信息[bondlist[5]])
    print(学生获奖信息)
    return 学生获奖信息

函数4 创建“班级中奖人数统计”字典并输出。

def statistics(学生获奖信息):
    班级中奖人数统计 = {}
    print('各班中奖信息如下:')
    for k,v in 学生获奖信息.items():
        for k1, v1 in v.items():
            if k1[:6] not in 班级中奖人数统计.keys():
                班级中奖人数统计[k1[:6]] = 1
            else:
                班级中奖人数统计[k1[:6]] += 1
    for k,v in 班级中奖人数统计.items():
        print('{}:\n{}'.format(k,v))

全部代码

import random
def createdit():
    lst = []
    学生抽奖信息 = {}
    while True:
        try:
            num = int(input('人数:(>=6)'))
            if num <6:
                print('必须大于6')
                continue
        except:
            print('必须为整数')
            continue
        for i in range(num):
            num_id = random.randint(0,10)
            while num_id in lst:
                num_id = random.randint(0,10)
            lst.append(num_id)
            print('抽奖编号',num_id)
            学生抽奖信息[num_id] = {}
            stu_id = input('学号:')
            while len(stu_id) != 8 or not stu_id.isdigit():
                print('学号必须为8位数字')
                stu_id = input('学号:')
            stu_name = input('姓名:')
            学生抽奖信息[num_id][stu_id] = stu_name
        return 学生抽奖信息
def print_dic(学生抽奖信息):
    print('学生抽奖信息如下:')
    for k,v in 学生抽奖信息.items():
        for k1,v1 in v.items():
            print('{}:'.format(k))
            print('{'+"'"+k1+"'"+': '+ "'"+v1+"'" + '}')
 
def get_numid(学生抽奖信息):
    num_id_list = []
    学生获奖信息 = {'一等奖':{},'二等奖':{},'三等奖':{}}
    for k,v in 学生抽奖信息.items():
        for k1,v1 in v.items():
            num_id_list.append(k)
    bondlist = random.sample(num_id_list,6)
    print('中奖号码:')
    print('一等奖:{}'.format(bondlist[0]))
    print('二等奖:{}'.format(' '.join(str(n) for n in bondlist[1:3])))
    print('三等奖:{}'.format(' '.join(str(n) for n in bondlist[4:])))
    学生获奖信息['一等奖'] = 学生抽奖信息[bondlist[0]]
    学生获奖信息['二等奖'].update(学生抽奖信息[bondlist[1]])
    学生获奖信息['二等奖'].update(学生抽奖信息[bondlist[2]])
    学生获奖信息['三等奖'].update(学生抽奖信息[bondlist[3]])
    学生获奖信息['三等奖'].update(学生抽奖信息[bondlist[4]])
    学生获奖信息['三等奖'].update(学生抽奖信息[bondlist[5]])
    print(学生获奖信息)
    return 学生获奖信息
 
def statistics(学生获奖信息):
    班级中奖人数统计 = {}
    print('各班中奖信息如下:')
    for k,v in 学生获奖信息.items():
        for k1, v1 in v.items():
            if k1[:6] not in 班级中奖人数统计.keys():
                班级中奖人数统计[k1[:6]] = 1
            else:
                班级中奖人数统计[k1[:6]] += 1
    for k,v in 班级中奖人数统计.items():
        print('{}:\n{}'.format(k,v))
 
 
学生抽奖信息 = createdit()
print_dic(学生抽奖信息)
学生获奖信息 = get_numid(学生抽奖信息)
班级中奖人数统计 = statistics(学生获奖信息)
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会长胖的斜杠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值