问题描述
a = "what"
b = "why"
c = "when"
d = "where"
A = [a,b,c,d]
for x in A:
print (x)
运行此程序时,我不会获得卡片对象的任何内容(已从卡组中移出并放置到手中)。为什么会这样呢?我曾尝试搜索“ Python None对象”,但我一无所知。我的目标是创建一个基于GUI的纸牌游戏,但我意识到引入图形直到在可以将这些纸牌放到画布上所需的输出之前没有意义。
编辑:我也正在获取对象的内存地址,而不是有关对象的详细信息。
当我运行编辑后的代码(将Hand.show()的最后一行更改为“ i.show()”)时,我得到以下信息:
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,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()
解决方法
您看到的是类的常规字符串表示形式。如果要获取“人类可读”版本,请定义__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()
完成的输出
import pygame
import random
class Deck:
def __init__( self ):
self.deck = []
self.build()
def build( self ):
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,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 -> {} of {}'.format( card_removed.value,card_removed.suit ) )
return card_removed
class Card:
def __init__( self,image_name ):
self.value = value
self.suit = suit
self.image_name = image_name
def show( self ):
print( 'card image -> {},self.value ) )
class Hand:
def __init__( self,name ):
self.name = name
self.cards = []
self.speak()
def speak( self ):
print( 'hello my name is {}'.format( self.name ) )
def draw( self,deck ):
self.cards.append( deck.remove_card() )
def show( self ):
for i in self.cards:
print( 'card in hand -> {} of {}'.format( i.value,i.suit ) )
deck = Deck()
deck.show()
hand = Hand( 'Kristy' )
hand.draw( deck )
hand.draw( deck )
hand.show()
deck.show()
以下是输出:
hello my name is Kristy
card removed -> 14 of S
card removed -> 14 of H
card in hand -> 14 of S
card in hand -> 14 of H
card image -> 2C_med.jpg,suit -> C,value -> 2
card image -> 2D_med.jpg,suit -> D,value -> 2
card image -> 2H_med.jpg,suit -> H,value -> 2
card image -> 2S_med.jpg,suit -> S,value -> 2
card image -> 3C_med.jpg,value -> 3
card image -> 3D_med.jpg,value -> 3
card image -> 3H_med.jpg,value -> 3
card image -> 3S_med.jpg,value -> 3
card image -> 4C_med.jpg,value -> 4
card image -> 4D_med.jpg,value -> 4
card image -> 4H_med.jpg,value -> 4
card image -> 4S_med.jpg,value -> 4
card image -> 5C_med.jpg,value -> 5
card image -> 5D_med.jpg,value -> 5
card image -> 5H_med.jpg,value -> 5
card image -> 5S_med.jpg,value -> 5
card image -> 6C_med.jpg,value -> 6
card image -> 6D_med.jpg,value -> 6
card image -> 6H_med.jpg,value -> 6
card image -> 6S_med.jpg,value -> 6
card image -> 7C_med.jpg,value -> 7
card image -> 7D_med.jpg,value -> 7
card image -> 7H_med.jpg,value -> 7
card image -> 7S_med.jpg,value -> 7
card image -> 8C_med.jpg,value -> 8
card image -> 8D_med.jpg,value -> 8
card image -> 8H_med.jpg,value -> 8
card image -> 8S_med.jpg,value -> 8
card image -> 9C_med.jpg,value -> 9
card image -> 9D_med.jpg,value -> 9
card image -> 9H_med.jpg,value -> 9
card image -> 9S_med.jpg,value -> 9
card image -> 10C_med.jpg,value -> 10
card image -> 10D_med.jpg,value -> 10
card image -> 10H_med.jpg,value -> 10
card image -> 10S_med.jpg,value -> 10
card image -> JC_med.jpg,value -> 11
card image -> JD_med.jpg,value -> 11
card image -> JH_med.jpg,value -> 11
card image -> JS_med.jpg,value -> 11
card image -> QC_med.jpg,value -> 12
card image -> QD_med.jpg,value -> 12
card image -> QH_med.jpg,value -> 12
card image -> QS_med.jpg,value -> 12
card image -> KC_med.jpg,value -> 13
card image -> KD_med.jpg,value -> 13
card image -> KH_med.jpg,value -> 13
card image -> KS_med.jpg,value -> 13
card image -> AC_med.jpg,value -> 14
card image -> AD_med.jpg,value -> 14
嗨,朋友,解决方案是在要操作的对象的类中使用“自我”,而从其类的外部对对象进行操作时使用“对象名称”。感谢您抽出宝贵的时间尝试提出建议。干杯!