题目:上次写的一个模拟数据库,根据名字查询成绩,这次使用字典实现,要求如下:

  1. 自己定义一个字典,内容为 名字-成绩形式
  2. 实现通过名字查询成绩,判断指定名字成绩是否存在
  3. 增加,删除,修改指定名字的成绩
  4. 计算平均成绩(使用dict.values()和sum()方法)
  5. 查询最高成绩和最低成绩
  6. 遍历字典,打印所有人的成绩(可使用dict.keys(),dict.values()或者dict.items()这三个方法把字典转为可迭代的)
  7. 假设字典中有一样的成绩,请使用dict.values()方法,把所有成绩转换list类型,使用set()去重,输出不重复的所有成绩

代码如下:

datebase={'张三':75,'李四':80,'王五':80}
namerecord=['张三','李四','王五'] #储存操作记录
scorerecord=[75,80,85]
actionrecord=['增加','增加','增加']
while True:
    print('-----------------------')
    print('''   成绩管理系统v2.0
1.添加学生及成绩
2.删除学生及成绩
3.修改学生成绩
4.查询学生成绩
5.查询平均成绩
6.打印所有学生成绩
7.查询最高分和最低分
8.输出所有不重复分数
9.显示操作记录
0.退出系统''')
    print('-----------------------')
    choice=input('请选择:')
#添加学生及成绩
    if choice =='1':
        name=input('请输入要添加的学生姓名:')
        score=int(input('请输入{}的成绩:'.format(name)))      #注意format用法,最好在{}中加变量名,如name,后面为 name=name
        datebase[name]=score
        namerecord.append(name)
        scorerecord.append(score)
        actionrecord.append('增加')
        print('成功添加学生{},分数为{}。'.format(name,score))
#删除学生及成绩
    elif choice =='2':
        name=input('请输入要删除的学生姓名:')
        namerecord.append(name)
        scorerecord.append(datebase[name])
        actionrecord.append('删除')
        datebase.pop(name)
        print('成功删除学生{}及其分数!'.format(name))
#修改学生成绩
    elif choice =='3':
        name=input('请输入要修改的学生姓名:')
        score=int(input('请输入{}的成绩:'.format(name)))
        datebase[name]=score
        namerecord.append(name)
        scorerecord.append(score)
        actionrecord.append('修改')
        print('成功修改学生{}的分数为{}。'.format(name,score))
#查询学生成绩
    elif choice =='4':
        name=input('请输入要查询的学生姓名:')
        score=datebase.get(name,-1)
        if score ==-1:
            print('{}的成绩不存在!'.format(name))
        else:
            print('{}的成绩为{}!'.format(name,score))
#查询平均成绩
    elif choice =='5':
        averagescore=sum(datebase.values())/len(datebase)
        print('平均分为{}。'.format(averagescore))
#打印所有学生成绩
    elif choice =='6':
        print('学生    成绩')
        scoreprint=list(datebase.items())
        scorenum=len(datebase)
        for i in range(scorenum):
            print('{}     {}'.format(scoreprint[i][0],scoreprint[i][1]))    #这里非常优秀
#查询最高分和最低分
    elif choice =='7':
        scoremax=max(datebase.values())
        scoremin=min(datebase.values())
        print('最高分为{},最低分为{}。'.format(scoremax,scoremin))
#输出所有不重复分数
    elif choice =='8':
        score=set(list(datebase.values()))
        print('所有不重复分数为{}'.format(score))
#显示操作记录
    elif choice =='9':
        num=len(actionrecord)
        print('序号  学生    成绩    操作')
        for i in range(num):
            print('  {}   {}     {}     {}'.format(i+1,namerecord[i],scorerecord[i],actionrecord[i]))
#退出系统
    elif choice =='0':
        break
#其他输入
    else:
        print('请输入正确的序号!')

#谢谢群主!!!

"""
评价
这次跟上次那一版比,基本说过的问题都修复了,代码也优化了不少,且整体功能比要求更加丰富。
+1 对群主的感谢
+2 直观清晰的变量命名
+3 优秀的代码
+5 优秀且正确的逻辑
+5 对存在问题的强力修复
+10 list和dict魔鬼般的运用
-1 format的用法
"""
Last modification:February 18th, 2019 at 02:35 pm
If you think my article is useful to you, please feel free to appreciate