这是我的代码(对不起,我知道它很乱):
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]
感谢。
答案 0 :(得分:1)
你在这里犯了一些错误:
首先,您将平均值存储在5
位置,然后检查6
位置的列表。
其次,您实际上并未正确地对行中的值进行切片。
minimum = min(row[1:3])
这只获得前2个元素,你需要获得所有元素。我建议从1开始阅读row[1:]
然后你需要修改计算平均值的代码:
average = sum(row[1:3])//3
这不符合你的想法!区别在于整数除法和实际除法。
然后当你追加行时,你可能应该用a_list.append(row)
附加所有行。如果您需要一份副本,请将其全部切片。