如何在类对象中遍历列表对象



我正在写一个剧本玩21点,不能解决我今晚遇到的一个缺陷。基本上,我正在尝试迭代存在于类中的列表对象。我总是可以让它打印第一张牌(即红心五),但在我的测试案例中不能打印剩下的两张。

相关代码如下:

class Card:
def __init__(self,suit,rank):
self.suit = suit
self.rank = rank
def __str__(self):
return self.rank + " of " + self.suit
class Play_Pile:
def __init__(self,pile_owner):
self.pile_owner = pile_owner
self.pile_cards = []
self.pile_state = "NORM"
def add_card(self,new_card):
self.pile_cards.append(new_card)
#THE FIRST IF STATEMENT AND ITS FOR LOOP ARE DEFECTIVE IN THE CONTEXT OF THE TEST CASE
def __str__(self):
if self.pile_owner == "HUMAN":
for card in self.pile_cards:
return card.rank + " of " + card.suit + "n"
elif self.pile_owner == "COMPY":
return self.pile_cards[0].rank + " of " + self.pile_cards[0].suit

Unittest测试用例:

#module references
import unittest
import blackjack
class PlayPile_Display_Test(unittest.TestCase):
playpile_instance = blackjack.Play_Pile("HUMAN")
card_1 = blackjack.Card("Hearts", "Five")
card_2 = blackjack.Card("Spades", "Five")
card_3 = blackjack.Card("Spades", "Ace")
playpile_instance.add_card(card_1)
playpile_instance.add_card(card_2)
playpile_instance.add_card(card_3)
print(playpile_instance)
if __name__ == '__main__':
unittest.main(verbosity = 2)

让我知道我缺少什么列表和如何遍历它们在一个班呢?

遍历列表,但立即返回值。你需要累加字符串,然后返回结果。

str = ""
for card in self.pile_cards:
str += card.rank + " of " + card.suit + "n"
return str

您需要累积您为每张卡片构建的字符串,但也使用您定义的Card.__str__,而不是再次编写卡片表示逻辑(X of Y)

def __str__(self):
if self.pile_owner == "HUMAN":
result = ""
for card in self.pile_cards:
result += str(card) + "n"
return result
elif self.pile_owner == "COMPY":
return str(self.pile_cards[0])

你也可以用"n".join做得很好

def __str__(self):
if self.pile_owner == "HUMAN":
return "n".join(map(str, self.pile_cards))
elif self.pile_owner == "COMPY":
return str(self.pile_cards[0])

最新更新