首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:如何比较卡片数组中的元素

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

Stack Overflow用户
提问于 2021-03-09 10:08:40
回答 2查看 125关注 0票数 1

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

代码语言:javascript
复制
class Card:
    def __init__(self, suit, val):
        self.suit = suit
        self.value = val

因此,我在一个由7张随机卡片组成的“玩家”类中有一个“手牌”数组,其中花色是4个字符串(黑桃、梅花、红心、菱形)之一,值是9个数字(2-10)或4个字符串(jack-ace)中的一个。我想遍历数组以检查列表中是否包含扑克中的任何一手牌,但是我不知道如何从我的数组中“提取”牌的花色/值。我在我的"Player“类中启动了一个方法来检查花色,这里的花色就是黑桃。

代码语言:javascript
复制
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

我知道我的方法很糟糕,但我对此非常陌生,就是不知道如何让它工作。有什么建议吗?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2021-03-09 21:12:14

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

代码语言:javascript
复制
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()

输出为:

代码语言:javascript
复制
Hi! you have a spade!
票数 2
EN

Stack Overflow用户

发布于 2021-03-09 10:18:45

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

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66539818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档