文件test7-6.txt中保存了5个学生的课程成绩。 学号,姓名,语文,数学,外语 2001,陈晓群,99,88,76 2002,刘伟,108,84,84 2003,杨明翰,111,52,120 2004,王锋,93,52,80 2005,雷蓉生,69,89,74 编写一个程序,从文件读取成绩,计算总分,按总分从高到低的顺序输出(各字段对齐),运行结果如下: 名次 学号 姓名 语文 数学 外语 总分 1 2003杨明翰 111 52 120 287 2 2002刘伟 108 84 84 276 3 2001陈晓群 99 88 76 263 4 2004王锋 93 52 80 225 5 2005雷蓉生 69 89 74 225
时间: 2024-01-18 22:02:14 浏览: 79
设备振动测试操作软件中文使用手册.pdf
下面是代码的实现:
```python
with open('test7-6.txt', 'r') as f:
lines = f.readlines() # 读取所有行
lines = [line.strip().split(',') for line in lines] # 按逗号分隔每一行,并去除换行符
# 计算每个学生的总分
for line in lines:
total = sum(map(int, line[2:])) # 从第三个元素开始求和
line.append(str(total)) # 将总分转换为字符串,并添加到行末尾
# 按总分从高到低排序
lines.sort(key=lambda x: int(x[-1]), reverse=True)
# 输出表头
print('{:<4}{:<6}{:<8}{:<5}{:<5}{:<5}{:<5}'.format('名次', '学号', '姓名', '语文', '数学', '外语', '总分'))
# 输出每个学生的信息
for i, line in enumerate(lines):
rank = i + 1 # 计算名次
s = '{:<4}{:<6}{:<8}{:<5}{:<5}{:<5}{:<5}'.format(rank, line[0], line[1], line[2], line[3], line[4], line[5])
print(s)
```
解释:
1. 首先,使用 `with` 语句打开文件,这样可以自动关闭文件,不用手动调用 `close` 方法。
2. 使用 `readlines` 方法读取所有行,然后使用列表推导式将每行按逗号分隔,并去除换行符。
3. 使用 `sum` 函数和 `map` 函数计算每个学生的总分,并将总分转换为字符串,添加到行末尾。
4. 使用 `sort` 方法按总分从高到低排序。
5. 使用 `format` 方法输出表头和每个学生的信息。使用 `<` 符号表示左对齐,使用数字表示输出宽度。
阅读全文