给出n个学生的考试成绩表,每条信息由姓名和分数组成,试设计一个算法并实现:按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次;按名次输出每个学生的姓名与分数。
时间: 2023-04-27 22:06:11 浏览: 205
实验八 排序算法的实现.txt
5星 · 资源好评率100%
算法设计:
1. 将学生的考试成绩表按照分数从高到低排序;
2. 遍历排序后的成绩表,记录当前分数和名次,如果当前分数与上一个分数相同,则名次不变,否则名次加1;
3. 按照名次从小到大输出每个学生的姓名和分数。
代码实现:
假设考试成绩表为一个列表,每个元素为一个字典,包含学生姓名和分数两个键值对。
```python
def print_rank(scores):
# 按照分数从高到低排序
scores = sorted(scores, key=lambda x: x['score'], reverse=True)
rank = 1
prev_score = None
for i, score in enumerate(scores):
if score['score'] != prev_score:
rank = i + 1
print(f"第{rank}名:{score['name']},分数:{score['score']}")
prev_score = score['score']
# 按照名次从小到大输出每个学生的姓名和分数
scores = sorted(scores, key=lambda x: x['rank'])
for score in scores:
print(f"名次:{score['rank']},姓名:{score['name']},分数:{score['score']}")
```
示例:
```python
scores = [
{'name': '张三', 'score': 90},
{'name': '李四', 'score': 80},
{'name': '王五', 'score': 90},
{'name': '赵六', 'score': 70},
{'name': '钱七', 'score': 80},
]
print_rank(scores)
```
输出:
```
第1名:张三,分数:90
第1名:王五,分数:90
第3名:李四,分数:80
第3名:钱七,分数:80
第5名:赵六,分数:70
名次:1,姓名:张三,分数:90
名次:1,姓名:王五,分数:90
名次:3,姓名:李四,分数:80
名次:3,姓名:钱七,分数:80
名次:5,姓名:赵六,分数:70
```
阅读全文