Python Card类使用问题:无法追加值至列表且显示异常
嘿,作为Python新手遇到这些问题很正常,我帮你一步步拆解解决:
问题1:TypeError: init() takes 1 positional argument but 2 were given
这个错误出在w = classcard3.Card(deal_hand)这行代码。你的Card类的__init__方法只定义了self这一个参数(它是Python自动传入的实例本身),但你这里额外传了deal_hand这个已经创建好的Card对象,完全是画蛇添足。
你已经在前面创建了deal_hand这个Card实例,并且调用了deal()方法生成了随机牌值,直接把这个实例添加到列表里就行,不需要再新建一个Card对象。
问题2:display_hand无法正确显示卡牌
你的循环逻辑是遍历hand列表里的每个item,但打印的时候却写了print(hand)——这会每次循环都打印整个列表,而不是单个卡牌。只需要把打印的对象改成item就行,因为你的Card类已经实现了__str__方法,打印item时会自动调用这个方法返回对应的牌面文字(比如Ace、King等)。
修正后的完整代码
修正后的deal_hand函数:
def deal_hand(): # 创建空列表存储卡牌 hand = [] # 循环5次生成5张牌 for i in range(5): # 新建Card实例 new_card = classcard3.Card() # 调用deal()生成随机牌值 new_card.deal() # 直接把生成好的卡牌加入列表 hand.append(new_card) return hand
修正后的display_hand函数:
def display_hand(hand): print("The 5-card hand is: ") for item in hand: # 打印每个卡牌对象,自动调用__str__显示牌面 print(item)
另外给你提个小优化:range(1,6)和range(5)效果一样(都是循环5次),用range(5)更简洁直观哦~
内容的提问来源于stack exchange,提问作者SpaceCadet
相关产品推荐
相关产品推荐

