21点游戏。 我定义了以下类:
class Card:
def __init__(self, suit, rank):
self.suit = suit
self.rank = rank
def __str__(self):
return ('{} of {},'
.format(self.rank,self.suit))
class Deck:
def __init__(self):
self.deck = [] # starting with empty list
for suit in suits:
for rank in ranks:
self.deck.append(Card(suit,rank))
def deal(self):
return self.deck.pop(0) //I'm dealing a card and taking
him out of the deck
class Hand:
def __init__(self):
self.cards = [] //start with emptpy list and add Cards objects
def add_card(self,card):
self.cards.append(card)
def __str__(self):
for i in self.cards:
return (f"{i}")
我正在创建一个新的牌组,希望使用deal()方法附加到庄家的手上并打印庄家的手:
GameDeck = Deck()
DealerHand = Hand()
DealerHand.add_card(GameDeck.deal())
我正在打印经销商的手很好:
print(DealerHand)
输出:5个♥
当我从牌组中处理另一张牌时,问题开始了:
DealerHand.add_card(GameDeck.deal())
print(DealerHand)
我得到了同样的结果:5个♥.
解包后,它看起来像self.hand(我正试图打印的内容)由2个卡片类组成(没关系),但是管理只打印第一个,因为它将返回到card类中的str方法,而不会移动到self.cards列表中的第二个iterable I:
从手工课,没能移动到下一个i并打印出来
def __str__(self):
for i in self.cards:
return (f"{i}")
你知道为什么它只打印self.cards列表中的第一个对象吗
您的
__str__
函数在for循环内返回,它只在一次迭代后终止循环。相反,您希望返回整个卡片列表的字符串表示形式。像这样的return
语句立即返回给定的表达式,因此退出函数。因此,这样的事情不会产生预期的效果:__str__
方法需要返回单个字符串。例如,如果您想返回一个卡片字符串,所有卡片都在自己的行中,您可以先创建该字符串,然后返回它:或者用一个单一的、惯用的表达加入卡片
str.join
将给定的iterable字符串与给定的字符串连接起来(在本例中,是换行符:\n
):相关问题 更多 >
编程相关推荐