Python类中遍历list对象的方法?Blackjack脚本开发问题求解
问题解决方案
缺陷根因
__str__方法要求最终返回一个完整的字符串,你将return语句直接写在了for循环内部,函数执行到第一次循环的return就会直接终止,不会遍历后续的牌,所以只能输出第一张牌的内容。
修正后的实现
你需要先遍历所有牌拼接成完整的输出字符串,最后再统一返回,修改后的Play_Pile类的__str__方法如下:
def __str__(self): if self.pile_owner == "HUMAN": # 先初始化空字符串存储所有牌的内容 output_str = "" for card in self.pile_cards: output_str += f"{card.rank} of {card.suit}\n" # 遍历完成后统一返回,strip去掉末尾多余的换行 return output_str.strip() elif self.pile_owner == "COMPY": # 增加判空逻辑,避免空牌堆时报索引错误 if self.pile_cards: return f"{self.pile_cards[0].rank} of {self.pile_cards[0].suit}" return "No cards in pile"
可选优化
如果想要代码更简洁,HUMAN分支的循环拼接也可以用生成器表达式一行实现:
return "\n".join(f"{card.rank} of {card.suit}" for card in self.pile_cards)
内容的提问来源于stack exchange,提问作者placebo_me_please
相关产品推荐
相关产品推荐

