所以我正在制作游戏服务器,让用户登录并选择要玩的游戏,然后将他们得到的任何分数添加到记事本文件中,格式为:(即二十一点)用户名,#chips,“筹码”。现在我想对文件中的所有分数进行排序以显示在我的gui上,但是我不允许使用像sort这样的内置函数,而是必须提出算法。我尝试了冒泡排序和插入排序,没有任何运气。这是我到目前为止所做的:
blackjackList = [['harsh', '4', 'chips'], ['ahmed', '25', 'chips'], ['yousef', '1003', 'chips'], ['krushangi', '200', 'chips'], ['bombberman', '1202', 'chips']]
def bubbleSort(alist):
for passnum in range(len(alist)-1,0,-1):
for i in range(passnum):
if alist[i][1]>alist[i+1][1]:
temp = alist[i]
alist[i] = alist[i+1]
alist[i+1] = temp
return alist
目前输出
[['ahmed', '25', 'chips'], ['yousef', '1003', 'chips'], ['krushangi', '200', 'chips'], ['bombberman', '1202', 'chips'], ['harsh', '4', 'chips']]
当我将它与黑杰克列表一起使用时,我希望它能使黑杰克按顺序从上升到下降。
答案 0 :(得分:3)
你的问题是return语句缩进太多并且位于for循环中,因此它只返回一个通过。
此外,您将数字作为字符串进行比较。这不会给出预期的顺序(例如" 10"小于" 2")。您应该使用int()将它们转换为整数,然后将正确排序。
答案 1 :(得分:0)
您可以使用quicksort对数组进行排序。
>>> blackjackList = [['harsh', '4', 'chips'], ['ahmed', '25', 'chips'], ['yousef', '1003', 'chips'], ['krushangi', '200', 'chips'], ['bombberman', '1202', 'chips']]
>>> def quicksort(arr):
... if len(arr)==0: return []
... if len(arr)==1: return arr
... left = [i for i in arr[1:] if int(i[1])<int(arr[0][1])] # for descending, exchange
... right = [i for i in arr[1:] if int(i[1])>=int(arr[0][1])] # these two values
... return quicksort(left)+[arr[0]]+quicksort(right)
...
>>> quicksort(blackjackList)
[['harsh', '4', 'chips'], ['ahmed', '25', 'chips'], ['krushangi', '200', 'chips'], ['yousef', '1003', 'chips'], ['bombberman', '1202', 'chips']]
上面的代码给出了升序排序列表。要获得降序排序列表,只需在代码中交换left
和right
的值。