Python 冒泡排序不能产生所需的输出

Python 冒泡排序不能产生所需的输出,python,python-3.x,sorting,bubble-sort,Python,Python 3.x,Sorting,Bubble Sort,这段代码是为了打印出我正在开发的游戏的高分表。 我知道使用冒泡排序效率很低,但我现在只是尝试一下。 所以基本上,代码的问题在于它对它们进行排序,但是如果数字大于100000,它似乎会跳过最后的零,并将其排序,就像它是10000一样 我在想,循环的数量可能有问题,或者超过100000个循环通常会被写成100000个循环,但我真的不知道。问题是,当读取csv文件时,你会得到字符串。然后,冒泡排序是进行字典排序,而不是您正在寻找的数字排序 要修复它,请按如下方式将分数转换为int(假设分数为整数) i

这段代码是为了打印出我正在开发的游戏的高分表。 我知道使用冒泡排序效率很低,但我现在只是尝试一下。 所以基本上,代码的问题在于它对它们进行排序,但是如果数字大于100000,它似乎会跳过最后的零,并将其排序,就像它是10000一样
我在想,循环的数量可能有问题,或者超过100000个循环通常会被写成100000个循环,但我真的不知道。问题是,当读取csv文件时,你会得到字符串。然后,冒泡排序是进行字典排序,而不是您正在寻找的数字排序

要修复它,请按如下方式将分数转换为
int
(假设分数为整数)

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)

然后它应该可以正常工作。

问题是,在读取csv文件时,会得到字符串。然后,冒泡排序是进行字典排序,而不是您正在寻找的数字排序

要修复它,请按如下方式将分数转换为
int
(假设分数为整数)

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)

然后它应该可以正常工作。

if
语句中,您比较的是
字符串,而不是
int
。试着替换

if得分[i]>得分[i+1]:


if int(scores[i])>int(scores[i+1]):
if
语句中,比较的是
字符串,而不是
int
。试着替换

if得分[i]>得分[i+1]:


if int(分数[i])>int(分数[i+1]):

数字被存储为字符串,这导致排序将所有1视为第一个,而不是它们的整数值

数字被存储为字符串,这导致排序将所有1视为第一个,而不是它们的整数值

我认为这是因为它们被视为字符串值而不是数字(例如整数)。因此,正在对第一个字符进行比较,在100000的情况下,第一个字符是“1”。例如,根据该逻辑,55000大于100000,因为5大于1


希望这有帮助,让我知道它是如何进行的

我认为这是因为它们被处理为字符串值,而不是数字(例如int)。因此,正在对第一个字符进行比较,在100000的情况下,第一个字符是“1”。例如,根据该逻辑,55000大于100000,因为5大于1


希望这有帮助,让我知道它是如何进行的

对于在for循环结束时顺序正确的任意2个值,您的代码将退出(因为done将等于1)您的排序字符串,因此按字母顺序排列,结果似乎一致。对于在for循环结束时顺序正确的任意2个值,您的代码将退出(因为done将等于1)您对字符串进行排序,使其按字母顺序排列,结果似乎连贯一致。现在进行得更好,生成正确的输出,谢谢!!现在情况好多了,生产出正确的产品,谢谢!!