在文本文件scores.txt中保存了一些专业的课程平均分,如下图所示:
专业 C语言 Java Python C# Javascript
软件工程 95 96 85 63 91
计算机科学与技术 75 93 66 85 88
网络工程 86 76 96 93 67
编写一个Python程序,读入文本文件scores.txt中的数据,存放在二维列表中,并输出所有专业的分数;计算每个专业的最高分和最低分,按输出格式要求输出每个专业的名称、最高分、最低分以及对应的课程名(已知没有同分的情况);
输出格式要求:
这个,怎么能有二维列表呢
with open('scores.txt', 'r',encoding='utf-8') as f:
titles = f.readline().split()
lines = [line.split() for line in f]
for line in lines:
scores = list(map(int, line[1:]))
minIndex = scores.index(min(scores)) + 1
maxIndex = scores.index(max(scores)) + 1
print(f"专业:{line[0]} 最高分('{titles[maxIndex]}',{line[maxIndex]}) 最低分('{titles[minIndex]}',{line[minIndex]})")
二维表就是列表里面的元素是一个列表,lines 本身已经是一个二维的了。将你的代码稍微修改下,以符合题目的输出要求:
with open('scores.txt', 'r', encoding='utf-8') as f:
lines = [line.split() for line in f.readlines()]
for line in lines:
print(line)
titles = lines[0]
print('\n')
for i in range(1,len(lines)):
line = lines[i]
scores = list(map(int, line[1:]))
minIndex = scores.index(min(scores)) + 1
maxIndex = scores.index(max(scores)) + 1
print(f"专业:{line[0]} 最高分('{titles[maxIndex]}',{line[maxIndex]}) 最低分('{titles[minIndex]}',{line[minIndex]})")
运行结果:
list里面继续塞list,不就是二维list吗
类似这样[[],[],[]]
lines = [line.split() for line in f]这东西本身就是二维list呀
你可以打印lines看看里面到底是什么
我可以为您提供解决问题的参考代码,请注意,我只是根据您的问题和参考资料提供一种可行的解决方案,您可以在此基础上进行修改和调整。
# 问题1:读取文本文件并将数据存放在二维列表中
def read_file(file_path):
data = []
with open(file_path, 'r') as f:
for line in f:
items = line.strip().split(',') # 根据实际情况调整分隔符
data.append(items)
return data
# 问题2:二维列表遍历示例
def traverse(data):
for row in data:
for item in row:
print(item, end='\t')
print()
# 问题3:计算每个专业的最高分和最低分
def calculate_scores(data):
scores = {}
for row in data:
major = row[0]
score = int(row[1])
if major in scores:
scores[major].append(score)
else:
scores[major] = [score]
results = []
for major, vals in scores.items():
max_score = max(vals)
min_score = min(vals)
result = '{}\t{}\t{}'.format(major, max_score, min_score)
results.append(result)
return results
# 主程序,示例代码
if __name__ == '__main__':
file_path = 'scores.txt'
data = read_file(file_path)
traverse(data)
results = calculate_scores(data)
for result in results:
print(result)
以上代码中,read_file
函数可读取指定路径的文本文件,将其转换为二维列表并返回。traverse
函数可遍历二维列表中的每一个元素并打印。calculate_scores
函数可根据每一行的数据计算出每个专业的最高分和最低分,并返回结果列表。主程序中,我们可以先读取文件并打印其内容,然后计算出每个专业的最高分和最低分并打印出来。
另外,根据参考资料和问题描述,我们还可以对程序进行如下改进:
csv
库读取文本文件,可以更方便地读取和处理CSV格式的数据。import csv
from collections import defaultdict
def read_file(file_path):
data = defaultdict(list)
with open(file_path, 'r') as f:
reader = csv.reader(f)
for row in reader:
major, score = row
score = int(score)
data[major].append(score)
return data
if __name__ == '__main__':
file_path = 'scores.csv'
data = read_file(file_path)
for major, scores in data.items():
max_score = max(scores)
min_score = min(scores)
print('{}\t{}\t{}'.format(major, max_score, min_score))
上述代码中,我们使用了csv
库读取文件,并使用defaultdict
定义了一个字典结构,然后遍历文件中的每一行数据,对每一行数据进行解析,并将其存储到字典中。最后遍历字典中的每个键值对,计算每个专业的最高分和最低分并打印出来。与原来的代码相比,这个版本更加简洁明了,并且具有更好的可读性和可维护性。