Python读取文本文件输出姓名-分数对及平均值求助
Python文本文件处理:姓名分数格式化输出与平均值计算
问题场景
我有一个包含如下内容的文本文件grades.txt:
John 46.5 Sam 62 Steve 45.5 Nigel 67.1 Karen 55 Henry 55 Alex 42 Graham 82 Hannah 56 Nicola 66 Ruth 81 Carl 90 Ben 66.8
需要编写程序读取该文件,将每个姓名和分数对按指定格式逐行输出,同时计算并输出平均值,期望输出如下:
John : 46.5 Sam : 62 Steve : 45.5 Nigel : 67.1 Karen : 55 Henry : 55 Alex : 42 Graham : 82 Hannah : 56 Nicola : 66 Ruth : 81 Carl : 90 Ben : 66.8 AVERAGE: 62.684615384615384
我能读取文件内容并分割元素,但无法实现指定输出格式,目前的代码如下:
f = open("grades.txt", "r") d = f.read() f.close() print(d) print() d = d.splitlines() print(d) for line in d: print(line) line = line.split() print (line) print()
解决方案
完整代码
# 读取文件内容,用with语句自动管理文件生命周期 with open("grades.txt", "r") as f: content = f.read() # 将所有内容按空白分割为单个元素的列表 items = content.split() scores = [] # 按步长2遍历列表,每次取姓名和分数一对 for i in range(0, len(items), 2): name = items[i] score = items[i+1] # 按指定格式输出 print(f"{name} : {score}") # 转换分数为浮点数,存入列表用于计算平均值 scores.append(float(score)) # 计算并输出平均值 average = sum(scores) / len(scores) print(f"AVERAGE: {average}")
关键说明
- 文件处理优化:使用
with语句替代手动open/close,能自动处理文件的打开与关闭,避免资源泄漏。 - 统一分割逻辑:直接用
content.split()提取所有空白分隔的元素,无需按行拆分后再处理,更高效地获取姓名-分数对。 - 成对遍历:通过
range(0, len(items), 2)设置步长为2的循环,每次迭代取两个元素,正好对应一组姓名和分数。 - 平均值计算:将分数转为浮点数存入列表,后续用
sum()求和后除以元素数量得到平均值。
内容的提问来源于stack exchange,提问作者tab
相关产品推荐
相关产品推荐

