在 python 中执行卡片和卡片组 类
Executing card and deck classes in python
class Card:
RANKS = ['Ace', '2', '3', '4', '5', '6', '7', '8', '9', 'Jack', 'Queen', 'King']
def __init__(self, rank, suit):
self.suit = suit
self.rank = rank
def get_name(self):
return Card.RANKS[self.rank - 1] + ' of ' + self.suit
def equals(self, other_card):
if self.rank == self.other_card:
return True
elif self.rank != self.other_card:
return False
def greater_than(self, other_card):
if self.rank > self.other_card:
return True
elif self.rank < self.other_card:
return False
def less_than(self, other_card):
if self.rank < self.other_card:
return True
elif self.rank > self.other_card:
return False
class Deck:
def __init__(self):
self.available_cards = []
self.dealt_cards = []
for suit in ['Hearts', 'Spades', 'Diamonds', 'Clubs']:
for rank in range(1, 14):
self.available_cards.append(Card(rank, suit))
def shuffle(self):
"""
Shuffles the cards in the deck.
"""
import random
return random.shuffle(self.available_cards)
def deal_card(self):
self.available_cards.add(Card)
self.available_cards.remove(Card)
self.dealt_cards.append(Card)
def get_size(self):
return len[self.available_cards]
c = Card()
print(c.available_cards)
d = Deck()
d.shuffle()
print(d.dealt_cards)
所以我在这里所做的是制作一张卡片 class 和一张卡片组 class,但我在执行时遇到了问题。我正在尝试通过洗牌来测试这两个 classes,并用它来发牌。但是当我尝试 运行 时,它不起作用。我该怎么办?
一个问题肯定是:
c = Card()
print(c.available_cards)
因为 1) Card
class 的构造函数接受 2 个参数(rank
和 suit
和 2)卡片 class 没有有 available_cards
,因此尝试访问 c.available_cards
将不起作用
所以不知道你对这两行的意图我在进一步调试中省略了它们。
现在你在做:
d = Deck()
好的,这不需要任何参数并使用标准 52 副牌中的所有牌创建一个新牌组并将 dealt_cards
初始化为 []
。
现在你立即打印
print(d.dealt_cards)
这当然会导致一个空列表:
print(d.dealt_cards)
>>>[]
你的本意可能是先发一些牌然后打印结果:
for i in range(4):
d.deal_card()
print(d.dealt_cards)
然而,由于您的 deal_card
不正确,这会导致错误消息。您不想向 available_cards
添加任何内容,而是从中删除一项并将其添加到您的 dealt_cards
,如下所示:
def deal_card(self):
# self.available_cards.add(Card)
# self.available_cards.remove(Card)
self.dealt_cards.append(self.available_cards.pop())
现在您会注意到 print(d.dealt_cards)
不会以“漂亮”的方式输出列表中的卡片,相反您可能会看到类似这样的内容:
[<__main__.Card object at 0x00000285E8C0A978>, <__main__.Card object at 0x00000285E8C0AA58>, <__main__.Card object at 0x00000285E8C0A4E0>, <__main__.Card object at 0x00000285E8BFCF28>]
那是因为你还没有教你的脚本如何打印卡片。为此,我们向 Cards class:
添加一个方法
def __repr__(self):
return self.get_name()
现在无论何时打印卡片实例class,我们都会得到想要的输出。
最终代码:
class Card:
def __init__(self, rank, suit):
self.suit = suit
self.rank = rank
self.ranks = ['Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King']
def get_name(self):
return Card.ranks[self.rank - 1] + ' of ' + self.suit
def equals(self, other_card):
if self.rank == other_card.rank:
return True
elif self.rank != other_card.rank:
return False
def greater_than(self, other_card):
if self.rank > other_card.rank:
return True
elif self.rank < other_card.rank:
return False
def less_than(self, other_card):
if self.rank < other_card.rank:
return True
elif self.rank > other_card.rank:
return False
def __repr__(self):
return self.get_name()
class Deck:
def __init__(self):
self.available_cards = []
self.dealt_cards = []
for suit in ['Hearts', 'Spades', 'Diamonds', 'Clubs']:
for rank in range(1, 14):
self.available_cards.append(Card(rank, suit))
def shuffle(self):
"""
Shuffles the cards in the deck.
"""
import random
return random.shuffle(self.available_cards)
def deal_card(self):
# self.available_cards.add(Card)
# self.available_cards.remove(Card)
self.dealt_cards.append(self.available_cards.pop())
def get_size(self):
return len(self.available_cards)
# c = Card()
# print(c.available_cards)
d = Deck()
d.shuffle()
for i in range(4):
d.deal_card()
print(d.dealt_cards)
>>>[6 of Spades, Jack of Hearts, 4 of Spades, Queen of Spades]
class Card:
RANKS = ['Ace', '2', '3', '4', '5', '6', '7', '8', '9', 'Jack', 'Queen', 'King']
def __init__(self, rank, suit):
self.suit = suit
self.rank = rank
def get_name(self):
return Card.RANKS[self.rank - 1] + ' of ' + self.suit
def equals(self, other_card):
if self.rank == self.other_card:
return True
elif self.rank != self.other_card:
return False
def greater_than(self, other_card):
if self.rank > self.other_card:
return True
elif self.rank < self.other_card:
return False
def less_than(self, other_card):
if self.rank < self.other_card:
return True
elif self.rank > self.other_card:
return False
class Deck:
def __init__(self):
self.available_cards = []
self.dealt_cards = []
for suit in ['Hearts', 'Spades', 'Diamonds', 'Clubs']:
for rank in range(1, 14):
self.available_cards.append(Card(rank, suit))
def shuffle(self):
"""
Shuffles the cards in the deck.
"""
import random
return random.shuffle(self.available_cards)
def deal_card(self):
self.available_cards.add(Card)
self.available_cards.remove(Card)
self.dealt_cards.append(Card)
def get_size(self):
return len[self.available_cards]
c = Card()
print(c.available_cards)
d = Deck()
d.shuffle()
print(d.dealt_cards)
所以我在这里所做的是制作一张卡片 class 和一张卡片组 class,但我在执行时遇到了问题。我正在尝试通过洗牌来测试这两个 classes,并用它来发牌。但是当我尝试 运行 时,它不起作用。我该怎么办?
一个问题肯定是:
c = Card()
print(c.available_cards)
因为 1) Card
class 的构造函数接受 2 个参数(rank
和 suit
和 2)卡片 class 没有有 available_cards
,因此尝试访问 c.available_cards
将不起作用
所以不知道你对这两行的意图我在进一步调试中省略了它们。
现在你在做:
d = Deck()
好的,这不需要任何参数并使用标准 52 副牌中的所有牌创建一个新牌组并将 dealt_cards
初始化为 []
。
现在你立即打印
print(d.dealt_cards)
这当然会导致一个空列表:
print(d.dealt_cards)
>>>[]
你的本意可能是先发一些牌然后打印结果:
for i in range(4):
d.deal_card()
print(d.dealt_cards)
然而,由于您的 deal_card
不正确,这会导致错误消息。您不想向 available_cards
添加任何内容,而是从中删除一项并将其添加到您的 dealt_cards
,如下所示:
def deal_card(self):
# self.available_cards.add(Card)
# self.available_cards.remove(Card)
self.dealt_cards.append(self.available_cards.pop())
现在您会注意到 print(d.dealt_cards)
不会以“漂亮”的方式输出列表中的卡片,相反您可能会看到类似这样的内容:
[<__main__.Card object at 0x00000285E8C0A978>, <__main__.Card object at 0x00000285E8C0AA58>, <__main__.Card object at 0x00000285E8C0A4E0>, <__main__.Card object at 0x00000285E8BFCF28>]
那是因为你还没有教你的脚本如何打印卡片。为此,我们向 Cards class:
添加一个方法def __repr__(self):
return self.get_name()
现在无论何时打印卡片实例class,我们都会得到想要的输出。
最终代码:
class Card:
def __init__(self, rank, suit):
self.suit = suit
self.rank = rank
self.ranks = ['Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King']
def get_name(self):
return Card.ranks[self.rank - 1] + ' of ' + self.suit
def equals(self, other_card):
if self.rank == other_card.rank:
return True
elif self.rank != other_card.rank:
return False
def greater_than(self, other_card):
if self.rank > other_card.rank:
return True
elif self.rank < other_card.rank:
return False
def less_than(self, other_card):
if self.rank < other_card.rank:
return True
elif self.rank > other_card.rank:
return False
def __repr__(self):
return self.get_name()
class Deck:
def __init__(self):
self.available_cards = []
self.dealt_cards = []
for suit in ['Hearts', 'Spades', 'Diamonds', 'Clubs']:
for rank in range(1, 14):
self.available_cards.append(Card(rank, suit))
def shuffle(self):
"""
Shuffles the cards in the deck.
"""
import random
return random.shuffle(self.available_cards)
def deal_card(self):
# self.available_cards.add(Card)
# self.available_cards.remove(Card)
self.dealt_cards.append(self.available_cards.pop())
def get_size(self):
return len(self.available_cards)
# c = Card()
# print(c.available_cards)
d = Deck()
d.shuffle()
for i in range(4):
d.deal_card()
print(d.dealt_cards)
>>>[6 of Spades, Jack of Hearts, 4 of Spades, Queen of Spades]