问题描述
我正在用 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