我正在制作一个python二十一点游戏。我在此代码中有一个错误,无法弄清。最后,当我测试点击功能并打印手时,它不会显示列表。而是显示[<< strong> main .Card对象位于0x02F9F5F0>]。
这是我的代码。
#Blackjack
import random
suits = ['Clubs', 'Spades', 'Diamonds', 'Hearts']
ranks = ['Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King', 'Ace']
values = {'Two': 2, 'Three': 3, 'Four': 4, 'Five': 5, 'Six': 6, 'Seven': 7, 'Eight': 8, 'Nine': 9, 'Ten': 10, 'Jack': 10, 'Queen': 10, 'King': 10, 'Ace': 11}
game_on = True
class Card:
def __init__(self, suit, rank):
self.suit = suit
self.rank = rank
def __str__(self):
return(f'{self.rank} of {self.suit}')
class Deck:
def __init__(self):
self.deck = []
for suit in suits:
for rank in ranks:
self.deck.append(Card(suit, rank))
def __str__(self):
deck_comp = ''
for card in self.deck:
deck_comp += '\n ' + card.__str__()
return deck_comp
def shuffle(self):
random.shuffle(self.deck)
def deal(self):
single_card = self.deck.pop()
return single_card
class Hand:
def __init__(self):
self.cards = [] # start with an empty list as we did in the Deck class
self.value = 0 # start with zero value
self.aces = 0 # add an attribute to keep track of aces
def add_card(self, card):
self.cards.append(card)
self.value += values[card.rank]
if card.rank == 'Ace':
self.aces += 1 # add to self.aces
def adjust_for_ace(self):
while self.value > 21 and self.aces:
self.value -= 10
self.aces -= 1
class Chips:
def __init__(self):
self.total = 100
self.bet = 0
def win_bet(self):
self.chips += self.bet
def lose_bet(self):
self.chips -= self.bet
def go_for_bet(chips):
while True:
try:
chips.bet = int(input('Please enter a betting amount: '))
except TypeError:
print('Please enter an integer')
continue
else:
if chips.bet > chips.total:
print(f'You do not have enough chips to bet {chips.bet}')
else:
break
def hit(deck, hand):
hand.add_card(deck.deal())
hand.adjust_for_ace()
def hit_or_stand(deck, hand):
while True:
x = input('Would you like to hit or stand? Say \'h\' or \'s\'')
if x[0].lower() == 'h':
hit(deck, hand)
elif x[0].lower() == 's':
print('You stand.')
else:
print('Try again please')
continue
break
deck = Deck()
hand = Hand()
hit(deck, hand)
print(hand.cards)
答案 0 :(得分:2)
要么:
class Card:
def __repr__(self):
return self.__str__()
或先将Card
对象转换为字符串:
print([str(x) for x in hand.cards])
答案 1 :(得分:1)
只需使__repr__
和__str__
之间的区别更加清晰(:
class Repr:
def __repr__(self):
return 'Here I am with __repr__'
class Str:
def __str__(self):
return 'Here I am with __str__'
print('Plain:')
print(Repr(), Str())
print('In list:')
print([Repr(), Str()])
>
Plain:
Here I am with __repr__ Here I am with __str__
In list:
[Here I am with __repr__, <__main__.Str object at 0x00000216BC2940F0>]
答案 2 :(得分:1)
这是一个班级列表,仅包含一项。您可以打印以下项目:
nx.set_node_attributes(G, count_dict, 'counts')