Python 字典与集合的综合经典例题:输入学生的学号,姓名;或者输入学号,科目,成绩。以输入一行END为输入结束标志。最后格式化输出

Python 字典与集合的综合经典例题:输入学生的学号,姓名;或者输入学号,科目,成绩。以输入一行END为输入结束标志。最后格式化输出

ps1:本人刚刚学python是个小白本白…肯定有n多错误 ,only记录一下啦提升自己的sense of fullfillment! 为继续学习提供动力!!…

ps2:是跟着MOOC翁凯老师的视频学的,老师讲了思路自己试着敲了代码(because我没书找不到书上的示例…)附上视频链接,是第五章的5.3小节。主要是理解Python的字典。附上链接~

https://www.icourse163.org/learn/ZJU-1206456840?tid=1450395457#/learn/content?type=detail&id=1214738094&cid=1218696341

dictNumName = {}##存放第一种类型的输入:有学号,姓名。存放格式例如{"10":'张三','11':......}
dictNumScores = {}##存放第二种类型的输入:有学号,科目,成绩。
                  ##存放格式例如{'10':{'高数':80,'英语':85},'11'......}
courseName = set()##因为最后要在第一行输出表头,所以用一个集合,之后往里面添加时,就算有重复的科目也可以帮我们自动排重
while True:
    s = input()
    if s=='END':##以END 为结束标志
        break
    else:
        line = s.split(' ')##line是列表,里面有两个或者三个元素
        if len(line)==2:##line里面只有学号,姓名
            ##["10",'张三'],并且一个学号姓名只可能出现一次
            dictNumName[line[0]] = line[1] 
        else:##line里面是学号,一个选课,和其对应的成绩
            ##['10','高数',90],学号可能会多次出现,学生选修多门课
            if line[0] in dictNumScores:##这个line[0]学号之前已经出现过了
                d = dictNumScores.get(line[0])##所以dictNumScores在这个字典里已经有这个键,所以直接用d接一下返回的字典就可以了
                ##现在d = {xx:xx},有内容
                d[line[1]] = int(line[2])##
            else:
                d = {}##这个学号第一次出现,令d是一个新的空的字典
                dictNumScores[line[0]] = d##把line[0]作为键直接给dictNumScores,把d这个字典作为line[0]这个键的value。
                d[line[1]] = int(line[2])##给d赋新建一个键(科目名称)和值(该科目分数)
            courseName.add(line[1])##每次处理一个成绩,把科目名称加到集合里面
            
##输出
print('学号  姓名  ',end = '')
for item in courseName:
    print(item,end  = '  ')
print()
for key,value in dictNumScores.items():##{'19401050110':{'高数':80,'英语':85},'19401050111'......}
    
    ##按照key一个一个来,现在的key是'19401050110',value是{'高数':80,'英语':85}
    print(key+'  '+dictNumName[key]+'  '+str(value['高数'])+'  '+str(value['英语']))
    ##   
    
            
            
            

下面附上我的测试示例
在这里插入图片描述

  • 13
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值