现在有一个字典score,键值对(key:value)表示学号和分数,例如:score={20174021:55,20174022:97,20174023:77,20174024:84} 请编写函数stats,该函数实现分数从高到低的学号排名,同时计算分数的平均值,最后统计所有不及格的学号以及不及格人数的比例。要求该函数返回4个值,第1个值是按分数排序后的学号序列,第2个值是分数的平均值(保留2位小数),第3个值是所有不及格的学号序列,第4个值是不及格人数所占总人数的比例(保留2位小数)。 例如: lsa,avg,lsb,ratio = stats(score) 调用后的结果: lsa=[20174022,20174024,20174023,20174021] avg=78.25 lsb=[20174021] ratio=0.25
时间: 2023-06-25 12:07:17 浏览: 38
可以使用以下代码实现:
```python
def stats(score):
# 按分数从高到低排序
sorted_score = sorted(score.items(), key=lambda x: x[1], reverse=True)
lsa = [x[0] for x in sorted_score] # 按排序后的顺序得到学号序列
avg = round(sum(score.values()) / len(score), 2) # 计算平均值并保留2位小数
lsb = [x[0] for x in score.items() if x[1] < 60] # 找到不及格的学号序列
ratio = round(len(lsb) / len(score), 2) # 计算不及格人数所占比例并保留2位小数
return lsa, avg, lsb, ratio
```
使用示例:
```python
score = {20174021: 55, 20174022: 97, 20174023: 77, 20174024: 84}
lsa, avg, lsb, ratio = stats(score)
print(lsa) # [20174022, 20174024, 20174023, 20174021]
print(avg) # 78.25
print(lsb) # [20174021]
print(ratio) # 0.25
```
相关问题
现在有一个字典score,键值对(key:value)表示学号和分数,例如:score={20174021:55,20174022:97,20174023:77,20174024:84} 请编写函数stats,该函数实现分数从高到低的学号排名,同时计算分数的平均值,最后统计所有不及格的学号以及不及格人数的比例。要求该函数返回4个值,第1个值是按分数排序后的学号序列,第2个值是分数的平均值(保留2位小数),第3个值是所有不及格的学号序列,第4个值是不及格人数所占总人数的比例(保留2位小数)
可以使用字典的items()方法将score字典转换为键值对列表,然后使用sorted()函数按照分数从高到低排序,最后遍历列表获取学号序列、计算平均值、统计不及格人数和比例。
具体实现如下:
```python
def stats(score):
# 将字典转换为键值对列表,并按照分数从高到低排序
sorted_score = sorted(score.items(), key=lambda x: x[1], reverse=True)
# 获取学号序列
id_list = [x[0] for x in sorted_score]
# 计算平均值
avg_score = round(sum(score.values()) / len(score), 2)
# 统计不及格的学号序列和人数比例
fail_list = [x[0] for x in score.items() if x[1] < 60]
fail_ratio = round(len(fail_list) / len(score), 2)
# 返回结果
return id_list, avg_score, fail_list, fail_ratio
# 测试
score = {20174021:55,20174022:97,20174023:77,20174024:84}
result = stats(score)
print(result)
```
运行结果如下:
```
([20174022, 20174024, 20174023, 20174021], 78.25, [20174021], 0.25)
```
输入一组学生的学号和成绩,以学号为 key,以成绩为value, 存放在字典中(每输入一个学生信息,提示是否继续输入(y/n),y为继 续输入,口为结束输入),按学号升序输出,输出 形式为: 学号:成绩
好的,以下是代码实现:
```python
# 初始化一个空字典
students = {}
while True:
# 获取学生信息
num = input("请输入学生学号:")
score = input("请输入学生成绩:")
# 将学号和成绩存入字典中
students[num] = score
# 判断是否继续输入
flag = input("是否继续输入?(y/n) ")
if flag.lower() == "n":
break
# 按学号升序输出
for key in sorted(students.keys()):
print(key, ":", students[key])
```
运行示例:
```
请输入学生学号:001
请输入学生成绩:90
是否继续输入?(y/n) y
请输入学生学号:002
请输入学生成绩:80
是否继续输入?(y/n) y
请输入学生学号:003
请输入学生成绩:95
是否继续输入?(y/n) n
001 : 90
002 : 80
003 : 95
```