这是我的代码:
def calculate_three_worst(input_file_name, output_file_name): #Task4
with open(input_file_name, 'r') as input_file:
reader = csv.reader(input_file)
data = list(reader)
averages = []
for row in data:
name = row[0]
grades = [float(grade) for grade in row[1:]]
average = mean(grades)
averages.append(str(average))
sorted_averages = sorted(averages, key=lambda x: x[1])
bottom_three = sorted_averages[:3]
with open(output_file_name, 'w') as output_file:
writer = csv.writer(output_file)
writer.writerows(bottom_three)
calculate_three_worst("C:\\Users\\Tandis\\Desktop\\hh.CSV", "C:\\Users\\Tandis\\Desktop\\tester.txt")
我打开的CSV文件是这样的:
mandana,5,7,3,15
hamid,3,9,4,20,9,1,8,16,0,5,2,4,7,2,1
sina,19,10,19,6,8,14,3
sara,0,5,20,14
soheila,13,2,5,1,3,10,12,4,13,17,7,7
ali,1,9
sarvin,0,16,16,13,19,2,17,8
Ala,0,16,16,13,19,2,17,8
我的代码的输出是:
7,.,5
6,.,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6
9,.,7,5
但一定是这样的
5.0
6.066666666666666
7.5
我该怎么办?我想把三个最差的平均值从最低到最高排序。在这种情况下,它必须如图所示,但它不是。请不要完全更改我的代码。我想知道如何通过修复代码而不是更改代码来解决这个问题。
2条答案
按热度按时间5ktev3wc1#
对于如此琐碎的事情,您并不需要csv模块。
只需分别以'r'和'w'模式打开输入和输出文件。通过阅读每一行并以逗号分隔来解析输入文件。
在处理每一行时计算平均值,并将它们附加到列表中。
对列表进行排序,并将3个最低值输出到输出文件:
输出文件如下所示:
axr492tv2#
1.如何将平均值从最低(5.0)到最高(7.5)排序?
按升序排序而不是按降序排序,后者正在发生变化
到
甚至更短
;和变化
到
1.我如何删除这些名字?
只需要删除此行中的
name
:即:
在那里,您有一个仅包含
average
的列表1.如何删除输出之间的多余行?
我不知道您在这里发布的代码和您实际运行的代码是否相同,但我对
csv.writer.writerows
的尝试没有打印出额外的行。总结一下:你必须按照我的建议修改代码中的几个部分。它们并不太复杂。快乐的Python。