【问题标题】:Python Bubble Sorting with an array of objects带有对象数组的 Python 冒泡排序
【发布时间】:2021-06-07 13:11:39
【问题描述】:

我正在尝试对 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.hand.sort(key = lamdba x: x.rank)

标签: python arrays poker


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,我会继续使用 .sort() 方法。在这一点上相当新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 2016-02-10
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
相关资源
最近更新 更多