目录
问题:
创建学生期末成绩自动排名?如何查找对应的学生学习成绩?
思路:
1、 首先总分为未知数,定义学生数量,将语数英各科成绩分开,然后计算总成绩
2、计算出总成绩,然后进行排序
3、然后定义一个判断语句,将各科成绩对应查询
png=int(input('输入学生的数量')) #定义学生的数量
ke=dict() #定义空字典
for i in range(0,png): #定义循环添加学生的成绩
ran=input('学生%d的姓名'%(i+1))
a=int(input('英语%d成绩'%(i+1)))
b=int(input('语文%d成绩'%(i+1)))
f=int(input('数学%d成绩'%(i+1)))
d=a+b+f #单个学生的总成绩
ke[ran]=d #将学生和总成绩录入字典
distl=zip(ke.keys(),ke.values())
c=list(sorted(distl,reverse=True))
print(c)
#zip()将字典转换为元组,然后再排序,如果不用zip,结果将只有分数的数组形式
kk=input('查询学生的成绩')
if kk in ke:
# print('学生%a英语%b数学%d语文%c总成绩%e'%(ran,a,c,b,d))
print('学生%s英语%s语文%s数学%s总计%s'%(ran,a,b,f,d))
额外话题:
zip()函数
zip()它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个元组
语法:zip(目标.key(),目标.value()) 重新生成
sorted()函数
语法:
list1=sorted(ke.items(),key=lambda x:x[1],reverse=True)
# 这是按照先小后大的顺序排序,关于sorted函数说明
参数说明:
sorted(iterable,key,reverse) 三个参数,也可以直接将集合放入函数中或ke.sort()
iterable -- 可迭代的对象,如字典ke
key 用来比较的元素,指定可以迭代的对象中的一个进行排序
reverse 排序规则,reverse=True 降序 reverse False 升序(不写默认升序)
语法说明:
关于lambda函数 这个函数只有唯一语法: lambda A:B A代表输入参数列表,B代表输出参数表达式,
此处lambda x:x[1]针对的是values进行排序,如果要这对key排序,x[1]变为x[0]即可