Python:如何比较卡片数组中的元素

问题描述

我正在用 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

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

谢谢

解决方法

这是重写的方法,包括一个有 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",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!
,

在您的代码中,您的迭代器是 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

相关问答

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