这是我的代码(对不起,我知道它很乱):
import csv
with open('test.csv', 'w', newline='') as fp:
a = csv.writer(fp, delimiter=',')
data = [['Bob', '4', '6', '3'],
['Dave', '7', '9', '10'],
['Barry', '5', '2', '3']]
a.writerows(data)
print("1 for for alphabetical orderwith each students highest score\n2 for highest score, highest to lowest\n3 for average score, highest to lowest")
cho_two=int(input())
class_a = open("test.csv")
csv_a = csv.reader(class_a)
a_list = []
for row in csv_a:
row[1] = int(row[1])
row[2] = int(row[2])
row[3] = int(row[3])
minimum = min(row[1:3])
row.append(minimum)
maximum = max(row[1:3])
row.append(maximum)
average = sum(row[1:3])//3
row.append(average)
a_list.append(row[0:9])
if cho_two == 1:
alphabetical = [[x[0],x[6]] for x in a_list]
print("\nCLASS A\nEach students highest by alphabetical order \n")
for alpha_order in sorted(alphabetical):
print(alpha_order)
class_a.close()
这是应该输出的内容:
['Barry', 5]
['Bob', 6]
['Dave', 10]
我希望它输出该人按字母顺序获得的最高分数。
它实际上输出:
['Barry', 2]
['Bob', 3]
['Dave', 5]
谢谢。
最佳答案
您在这里犯了一些错误:
首先,将平均值存储在第5
个位置,然后检查列表在第6
个位置。
其次,您实际上没有正确地从行中切片值。
minimum = min(row[1:3])
这仅获取前两个元素,您需要获取所有元素。我建议使用
row[1:]
从1开始阅读然后,您需要修复计算平均值的代码:
average = sum(row[1:3])//3
这并没有按照您的想法做!整数除法和实数除法之间的区别是。
然后,当您添加该行时,您可能应该在所有行后添加
a_list.append(row)
。如果您需要一份副本,则将其全部切片。关于python - 如何按字母和最大数字对CSV文件进行排序。 Python 3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34027078/