【问题标题】:Python: How to compare elements within an array of cardsPython:如何比较卡片数组中的元素
【发布时间】:2021-03-09 02:08:39
【问题描述】:

我正在用 python 开发一个德州扑克游戏,并希望遍历一个包含 7 张牌的完整手牌数组(2 在洞中 + 5 在棋盘上)。该数组包含 Cards 类的元素,其中 Card 类的构造函数是

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

所以,我在 7 张随机牌的“玩家”类中有一个“手”数组,其中花色是 4 个字符串之一(黑桃、梅花、红心、菱形),值是 9 个数字之一(2 -10) 或 4 弦 (jack-ace)。我想遍历数组以检查列表是否包含扑克牌中的任何手,但我无法弄清楚如何从数组中“提取”牌的花色/价值。我已经在我的“玩家”类中启动了一个方法来检查西装,这里西装是黑桃。

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

    def spadeChecker(self):
        card = Card("Blank", 0)
        for i in self.hand:
            card = self.hand[i]
            if(card.suit == "Spade"):
                print("Hi! you have a spade!")
            else:
                pass

从我的终端运行程序时,我收到一条 TypeError 消息:

in spadeChecker card = self.hand[i] TypeError: list indices must be integers or slices, not Card

我知道我的方法很糟糕,但我对此很陌生,只是不知道如何让它发挥作用。有什么建议吗?

谢谢

【问题讨论】:

标签: python arrays subclass poker playing-cards


【解决方案1】:

这是重写的方法,包括一个 3 张牌的例子。

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

class Player:
    def __init__(self, name):
        self.name = name
        self.pocket = []
        self.hand = [Card("Heart", 10), Card("Spade", 10), Card("Diamond", 10)]

    def spadeChecker(self):
        for card in self.hand:
            if(card.suit == "Spade"):
                print("Hi! you have a spade!")
                #return True
            else:
                #return False
                pass

p = Player("Bob")
p.spadeChecker()

输出是:

Hi! you have a spade!

【讨论】:

    【解决方案2】:

    在您的代码中,您的迭代器是i,而您的可迭代对象是self.hand,它是Card 对象的列表。因此,每次循环迭代时,i 将是一个 Card 对象。如果您希望能够获取Card 对象以及Card 对象本身的索引,我建议使用enumerate() 函数。但是,由于您只引用了Card 对象,因此您可以直接获取suit 属性。

    class Player:
        def __init__(self, name):
            self.name = name
            self.pocket = []
            self.hand = []
    
        def spadeChecker(self):
            card = Card("Blank", 0)
            for card_obj in self.hand:
                if(card_obj.suit == "Spade"):
                    print("Hi! you have a spade!")
                else:
                    pass
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 2016-03-25
      • 1970-01-01
      • 2020-07-16
      • 2022-01-14
      相关资源
      最近更新 更多