As the title states, I am finding it difficult to understand why my code is returning my memory address. I have tried to use 'str' and 'repr' respectively but maybe I am unfamiliar with how these work exactly.
import random
class Card:
def __init__(self, suit, value):
self.suit = suit #['H','D','C','S']
self.value = value #['A',2,3,4,5,6,7,8,9,10,'J','Q','K']
class Deck:
def __init__(self):
self.cards =[]
def __repr__(self):
return f'Card("{self.card}")'
def build(self):
for x in['H','D','C','S']:
for y in range(1,14):
self.cards.append(Card(x,y))
if(y==1):
self.cards.append(Card(x,'A'))
elif(y==11):
self.cards.append(Card(x,'J'))
elif(y==12):
self.cards.append(Card(x,'Q'))
elif(y==13):
self.cards.append(Card(x,'K'))
def shuffle(self):
for i in range(len(self.cards)-1,0,-1):
r = random.randint(0,i)
self.cards[i], self.cards[r]= self.cards[r], self.cards[i]
def deal(self):
card = self.cards.pop()
print(repr(card))
d = Deck()
d.build()
d.shuffle()
d.deal()
<__main__.Card object at 0x7f836e0ed070>
Above is the Code and the output that I am getting, any help would be really appreciated as I have not found anything about it.
CodePudding user response:
it seems that you have forgotten to define the __repr__
method for the Card
class. Should be something like:
def __repr__(self):
return f"Card({self.value})"
whereas for the Deck I would define it as:
def __repr__(self):
return f'Deck("{self.cards}")'
the resulting output will be Card(<some-number>)
.
CodePudding user response:
Your Class Card
needs the __repr__
function, as python tries to print an Instance of the Type Card, not the deck:
class Card:
def __init__(self, suit, value):
self.suit = suit # ['H','D','C','S']
self.value = value # ['A',2,3,4,5,6,7,8,9,10,'J','Q','K']
def __repr__(self):
return f'{self.suit}-{self.value}'
CodePudding user response:
In a function you have a certain amount of instructions that the code will do. And so, to return the result of the instructions you need to return where this result is not the function.