现在有一个字典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 15:07:17 浏览: 89
可以使用以下代码实现:
```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进行检索
当你想要根据成绩快速查询某个学生的信息时,可以利用字典(Dictionary)的数据结构。在这种情况下,你可以按照以下步骤操作:
1. 创建一个空字典,键用于存储成绩,值是一个包含姓名和学号的小型元组,例如 `{'98765': ('张三', '001')}`。
2. 遍历每个学生的输入,解码学号、姓名和成绩,并构建字典条目。如果学生已经存在于字典中并且其成绩更高,则更新该学生的信息;若不存在,则直接添加新条目。
3. 当遍历完整个输入后,查找字典中成绩最高的学生并返回他们的姓名、学号。
下面是一个简单的Python示例:
```python
def search_students_by_score(input_data):
student_scores = {}
for line in input_data.split('\n'):
parts = line.split()
id, name = parts[0], parts[1]
scores = tuple(int(score) for score in parts[2:])
# 更新或插入分数最高的学生信息
if len(student_scores) == 0 or sum(scores) > student_scores[max(student_scores.keys())][1]:
student_scores[id] = (name, sum(scores))
max_score_student = student_scores[max(student_scores.keys(), key=student_scores.get)]
return f"姓名: {max_score_student[0]}, 学号: {max_score_student[1]}, 总分: {sum(max_score_student[1])}"
# 示例输入
input_data = "0001 小明 85 92 90\n0002 小红 88 95 91"
print(search_students_by_score(input_data))
阅读全文