统计各专业参加活动人数(python)

题目

        学校共设有多个学院,具体学院代码和名称存放在字典中。现学校举办一次全校性大型公益活动,需要统计各学院参与本科学生数,并列出参与人数排前3的学院与参与人数。学院代码与学院名称存放于字典中:输入参与学生的学号(12位,其中第5-8位为学院代码),统计各学院的参与人数,并输出人数最多的前3个学院名称及人数。

        若学号对应的学院不在字典中,则均统计为“其他”,如果参与学院不足3个,则按实际学院数输出。请将以下字典直接复制到程序中。题目保证输入的学号均为12位数字。

dict1 = {

    '0550': '机械工程学院',

    '0556': '计算机学院',

    '0557': '自动化与电子信息学院',

    '0560': '化学学院',

    '0565': '化工学院',

    '0572': '材料科学与工程学院',

    '0582': '环境与资源学院',

    '0580': '土木工程与力学学院',

    '0571': '物理与光电工程学院',

    '0575': '数学与计算科学学院',

    '0501': '马克思主义学院',

    '0502': '哲学与历史文化学院',

    '0519': '公共管理学院',

    '0525': '法学部',

    '0513': '商学院',

    '0543': '艺术学院',

    '0531': '外国语学院',

    '0537': '文学与新闻学院',

    '0585': '国际交流学院',

    '0596': '兴湘学院'

}

示例

例如,输入:
202105430122 202105430113 202105430130 202105430118 202105000101 202105000102
则应输出:
艺术学院 4 

其他 2  

解题思路

这题也不是很难,题目已经摆明了要你使用dict(当然你也可以不用dict),但是题目的细节要求很多:

1、在排序的时候对于相同的值按按输入学号的先后顺序输出 

2、若学号对应的学院不在字典中,则均统计为“其他”

3、如果参与学院不足3个,则按实际学院数输出。

我们一个个来解决:

首先说个技巧性的东西

        我们读入的数据是一个个学号,但是输出的是学号所对应的学院,因此在处理数据的时候,我们在存储数据的时候就可以直接存学院。

针对问题1

        这个好说,即在排序的时候不排key就行了,简洁的lambda表达式排一下即可

sorted_count = sorted(count_dict.items(), key=lambda x: x[1], reverse=True)

针对问题2

        这个就在处理读入的数据时候稍微改一下即可

        进来的数据不是有不在dict1中的学院吗,那么我就写一个if判断即可

for item in input_list:
    college_code = item[4:8]
    if college_code in dict1:
        college_name = dict1[college_code]
    else:
        college_name = "其他"
    if college_name in count_dict:
        count_dict[college_name] += 1
    else:
        count_dict[college_name] = 1

针对问题3

        这个算不上什么太大的问题,我们只需要在输出的时候判断一下,dict数据库中有没有3个就行了,我们只需在range函数中判断一下即可

源码

dict1 = {
    '0550': '机械工程学院',
    '0556': '计算机学院',
    '0557': '自动化与电子信息学院',
    '0560': '化学学院',
    '0565': '化工学院',
    '0572': '材料科学与工程学院',
    '0582': '环境与资源学院',
    '0580': '土木工程与力学学院',
    '0571': '物理与光电工程学院',
    '0575': '数学与计算科学学院',
    '0501': '马克思主义学院',
    '0502': '哲学与历史文化学院',
    '0519': '公共管理学院',
    '0525': '法学部',
    '0513': '商学院',
    '0543': '艺术学院',
    '0531': '外国语学院',
    '0537': '文学与新闻学院',
    '0585': '国际交流学院',
    '0596': '兴湘学院'
}

input_str = input()
input_list = input_str.split()

count_dict = {}
for item in input_list:
    college_code = item[4:8]
    if college_code in dict1:
        college_name = dict1[college_code]
    else:
        college_name = "其他"
    if college_name in count_dict:
        count_dict[college_name] += 1
    else:
        count_dict[college_name] = 1

sorted_count = sorted(count_dict.items(), key=lambda x: x[1], reverse=True)
for i in range(min(3, len(sorted_count))):
    print(sorted_count[i][0], sorted_count[i][1])

ps:代码不是很长,有40行是因为dict1占了近20行,没办法,vscode给我排的版。。。。

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值