import csv
names = []
scores = []
length = 0
with open('table.csv') as csvfile:
read = csv.reader(csvfile, delimiter = ',')
for row in read:
name = row[0]
score = row[1]
length = length + 1
names.append(name)
scores.append(score)
print(names)
print(scores) #printing unsorted list
#using bubble sort
done = 0
while done != 1:
done = 1
for i in range(length - 1):
if scores[i] > scores[i +1]:
scores[i],scores[i+1] = scores[i + 1], scores[i]
names[i],names[i+1] = names[i + 1], names[i]
done = 0
print("")
print(names)
print(scores)
Click here to access image that shows the output of the code
此代码旨在打印出我正在开发的游戏的高分表。 我知道使用冒泡排序是非常低效的,但我现在只是尝试一下。 所以基本上代码的问题是它命令它们,但如果数量大于100,000,它似乎跳过最后的零并按顺序放置,好像它是10000 我认为循环次数可能有问题,或者可能超过100000通常被写成100,000乱用csv文件,但老实说我不知道。
答案 0 :(得分:1)
问题在于,在阅读csv文件时,您会获得字符串。然后,冒泡排序正在进行词典排序,而不是您正在寻找的数字排序。
要修复它,将分数类型转换为int
(假设分数为整数),如下所示
score = int(row[1])
然后它应该正常工作。
答案 1 :(得分:1)
在if
声明中,您比较了strings
,而不是int
。尝试替换
if scores[i] > scores[i +1]:
与
if int(scores[i]) > int(scores[i +1]):
答案 2 :(得分:0)
数字存储为字符串,导致您的排序将所有1作为第一个而不是整数值
答案 3 :(得分:0)
我认为这是因为他们正在处理字符串值而不是数字(例如整数)。因此,对第一个字符进行比较,在100,000的情况下是“1”。例如,通过该逻辑,55,000大于100,000,因为5大于1。
希望这有帮助,让我知道它是怎么回事!