python - 我知道一张牌已添加到手牌并从牌组中取出,但我不知道如何打印该牌的内容
问题描述
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>
解决方案
你看到的是一个类的正常字符串表示。如果您想获得“人类可读”的版本,请定义__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()
推荐阅读
- ios - 如何在 iOS 中为图层设计渐变?
- google-apps-script - 使用自定义主题颜色的 getBackgrounds() 错误
- javascript - TypeError: fs.readFileSync is not a function Off Basic Install
- winapi - 移动鼠标时如何重绘 MFC 工具提示?
- java - 如何在 java fx 中为 JFXSnackbar 使用 .show()
- amazon-web-services - 是否可以将 AWS API 网关 API 密钥存储在秘密管理器中并轮换它们
- c++ - char* 和带有 std::getenv 的字符串之间的意外差异
- php - 为每个类别创建视图 - laravel
- javascript - 为什么当我尝试将字符串添加到我的数组位置时不起作用
- java - 从 if 语句的第一部分返回后的 else