Python冒泡排序对象数组

问题描述

我正在尝试在 Python 中为德州扑克游戏对卡片对象的“手”数组进行排序,其中卡片对象包含三个值:花色的字符串、值的字符串/整数和它们的整数检查直道时的“排名”。

class Card:
    def __init__(self,suit,val,rank):
        self.suit = suit
        self.value = val
        self.rank = rank

    def show(self):
        print("{} of {}s".format(self.value,self.suit))

我还为每个玩家设置了一个类,他们有一个包含两张牌的“口袋”和一张包含口袋和棋盘的七张手牌。

class Player:
    def __init__(self,name):
        self.pocket = []
        self.hand = []
        self.temp = []

要检查同花顺,我觉得我需要按等级对我的 self.hand 数组进行排序,这样我就可以轻松浏览花色/等级值,看看是否有那只神奇的手。由于它是一个如此小的数据集,我选择了冒泡排序,这是我通过

实现的
        self.hand.append(Card("Diamond",5,5))
        self.hand.append(Card("Spade","Ace",1))
        self.hand.append(Card("Diamond","Queen",12))
        self.hand.append(Card("Diamond",10,10))
        self.hand.append(Card("Diamond","King",13))
        self.hand.append(Card("Diamond",9,9))
        self.hand.append(Card("Diamond","Jack",11))

        for x in self.hand:
            self.temp.append(x.rank)

        n = len(self.temp)

        for i in range(n - 1):
            for j in range(0,n - i - 1):
                if(self.temp[j] > self.temp[j + 1]):
                    self.hand[j],self.hand[j + 1] = self.hand[j + 1],self.hand[j]
        
        for i in self.hand:
            i.show()

这个冒泡排序算法在另一个程序中处理一组整数,但是当我在这里显示手时,它仍然没有排序。没有错误消息。知道我哪里错了吗?

解决方法

您忘记交换 self.temp 中的值。只需将其添加到内部循环中即可:

self.temp[j],self.temp[j + 1] = self.temp[j + 1],self.temp[j]

另外,除非你想实现冒泡排序,否则你应该直接使用.sort()方法,这样会更优化

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...