首页 > 解决方案 > 我知道一张牌已添加到手牌并从牌组中取出,但我不知道如何打印该牌的内容

问题描述

import pygame
import random

class Deck:
    def build( self ):
        self.deck = []
        face = [ 'J', 'Q', 'K', 'A' ]
        for value in range( 2, 15 ):
            for suit in [ 'C', 'D', 'H', 'S' ]:
                if value > 10:
                    new_value = face[ value - 11 ]
                    card_image = str( new_value ) + suit + '_med.jpg'
                else:
                    card_image = str( value ) + suit + '_med.jpg'
                card = Card( value, suit, card_image )
                self.deck.append( card )
    def show( self ):
        for card in self.deck:
            card.show()
    def remove_card( self ):
        card_removed = self.deck.pop()
        print( 'card removed -> {}'.format( card_removed ) )
        return card_removed
        #return self.deck.pop()

class Card:
    def __init__( self, value, suit, image_name ):
        self.value = value
        self.suit = suit
        self.image_name = image_name
    def show( self ):
        print( 'card image -> {}, suit -> {}, value -> {}'.format( self.image_name, self.suit, self.value ) )

class Hand:
    def __init__( self, name ):
        self.name = name
        self.cards = []
    def speak( self ):
        print( 'hello my name is {}'.format( self.name ) )
    def draw( self, deck ):
        card = deck.remove_card()
        self.cards.append( card )
        print( 'card drawn -> {}'.format( card ) )
        # self.cards.append( deck.remove_card() )
    def show( self ):
        for i in self.cards:
            print( i )
            
deck = Deck()
deck.build()
deck.show()

hand = Hand( 'Kristy' )
hand.speak()
hand.draw( deck )

# show updated hand and deck
hand.show()
deck.show()

当我运行它时,我得到卡片对象的 None (已从牌组中取出并放入手中)。为什么会这样?我试过搜索“Python None object”,但我一无所知。我的目标是创建一个基于 gui 的纸牌游戏,但我意识到在我能够将这些纸牌放在画布上所需的输出之前,引入图形是没有意义的。

编辑:我还得到了对象的内存地址,而不是对象的详细信息。

当我运行编辑后的代码(将 Hand.show() 中的最后一行更改为 "i.show()" )时,我得到以下信息:


hello my name is Kristy
card removed -> <__main__.Card object at 0x0000015F48C1F6D0>
card drawn -> <__main__.Card object at 0x0000015F48C1F6D0>

标签: pythonobjectnonetype

解决方案


你看到的是一个类的正常字符串表示。如果您想获得“人类可读”的版本,请定义__str__函数。这是新的 Card 类的样子:

class Card:
    def __init__( self, value, suit, image_name ):
        self.value = value
        self.suit = suit
        self.image_name = image_name
    
    def show( self ):  
        print(self)

    def __str__(self):
        return ( 'card image -> {}, suit -> {}, value -> {}'.format( self.image_name, self.suit, self.value ) )

然后你可以说print (card);并得到以前完成的输出Card.show()


推荐阅读