题目
# 题目:学生成绩信息管理 # 描述: # 用字典推导式产生40个学生的学号及语文、数学、英语成绩(成绩随机产生,范围在50-150之间) # 如:{'学号:201801': {'语文': 68, '数学': 126, '英语': 84}, # '学号:201802': {'语文': 82, '数学': 115, '英语': 67},...} # 在其中添加总分关键字及总分 # 按总分由高到低列出学号和总分(提示:字典中的数据是无序的,使用sorted排序)
主要用到的知识
1.随机数生成
用到random模块
需要 import random
主要函数及其功能如下:只列出比较常用的几个
random.seed(a=None,version=2)
初始化随机数生成器,用于生成随机数种子,无返回值
例:random.seed(10) #用整数10做种子
random.seed() #即以系统时间做种子#a=None或被省略
种子必须是以下类型:NoneType,int,float,str,bytes,bytearray
#设置确定的随机种子以后每次运行代码产生的随机数都是一样的,如果想让一个程序中的两个生成随机数的函数都生成一样的随机数就需每个函数之前加上随机种子
random.randint(a,b)
从 [a,b] 随机生成一个整数
例:print(random.randint(1,3)) #输出一个整数:1或2或3
random.random()
从 [0.0,1.0) 随机生成一个浮点数
例:print(random.random()) #输出0.5714025946899135
2.生成字典,用字典推导式
中间的for后面接了另一个字典推导式,也就是嵌套在里面的字典推导式
d={x: num[x] for ( { y : y for } ) in range() }
3.在字典列表中添加新的关键字
直接添加,这种方法如果是后续需要计数在里面的话需要if判断关键字是否存在,不存在需要初始化也就是用以下语句,存在即加一。
d[关键字]=0
4.用shorted给字典排序
第一个参数为排序的数据,直接传入全部数值,第二个参数key为排序的标准,用lambda函数返回,reverse参数为True时为降序(从高到低),为False时为升序
s=sorted( stu.values() , key=lambda x: x['总分'] ,reverse=True)
参考:《python程序设计基础》
代码
# 题目:学生成绩信息管理
# 描述:
# 用字典推导式产生40个学生的学号及语文、数学、英语成绩(成绩随机产生,范围在50-150之间)
# 如:{'学号:201801': {'语文': 68, '数学': 126, '英语': 84},
# '学号:201802': {'语文': 82, '数学': 115, '英语': 67},...}
# 在其中添加总分关键字及总分
# 按总分由高到低列出学号和总分(提示:字典中的数据是无序的,使用sorted排序)
import random
# 字典中的键
# num=random.sample(range(201800,201899),40)
# 字典中的值
# d={x: random.randint(50,150) for x in ['语文','数学','英语']}
# #字典推导式 d={x: num[x] for ({y:y for })in range()}
# print(d)
stu={x:{y:random.randint(50,150) for y in ['语文','数学','英语']} for x in random.sample(range(201800,201899),40) }
print(stu)
# 在其中添加总分关键字及总分
for x in stu.keys():
stu[x]['总分']=stu[x]['语文']+stu[x]['数学']+stu[x]['英语']
# s=sorted(stu.values(),key=lambda x: x['总分'],reverse=True)
s=sorted(stu.items(),key=lambda x: x[1]['总分'],reverse=True)
d={}
for i in s:
d[i[0]]={'总分':i[1]['总分']}
print(d)