这是我的代码(对不起,我知道它很乱):

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/

10-09 08:12