【发布时间】:2020-12-08 02:43:09
【问题描述】:
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>
【问题讨论】:
-
当你说你得到
None时,什么确切的命令给你None?Hand.draw没有返回任何东西,但它似乎正确地更新了手。 -
请在此处添加您遇到的问题的错误输出。人们希望能够重现您的问题以提供更好的帮助。
-
我已经在输出中添加了。
-
我不知道我做了什么来摆脱 None 问题,但剩下的是上面输出的“card removed”和“card drawn”结果。
-
这是对象的正常打印格式。如果您希望能够使用 print 打印对象,请为该对象定义
__str__。在下面回答。