我正在学习Python,并且正在构建纸牌游戏(似乎很常见,对初学者来说很不错)。
我有一个名为Cartas
的类,具有一种名为imprimir()
的方法来打印随机卡。
然后,我有一个名为create_deck()
的函数,该函数用52张卡片填充了一个空白列表。
import random
class Cards:
def __init__(self, Value = random.choice([1,2,3,4,5,6,7,8,9,10,11,12,13]),
Suit = random.choice(["Diamonds", "Hearts", "Clubs", "Spades"])):
self.Value = Value
self.Suit = Suit
def imprimir(self):
if self.Value == 11:
print("J of " + self.Suit)
elif self.Value == 12:
print("Queen of " + self.Suit)
elif self.Value == 13:
print("King of " + self.Suit)
else:
print(str(self.Value) + " de " + self.Suit)
card = Cards()
card.imprimir()
def create_deck():
list_deck = []
list_numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
lista_suit = ["Diamonds", "Hearts", "Clubs", "Spades"]
for number in list_numbers:
for suit in list_suit :
if card == 11:
card = f'J of {suit}'
list_deck.append(card)
elif number == 12:
card = f'Queen of {suit}'
list_deck.append(card)
elif number == 13:
card = f'King of {suit}'
list_deck.append(card)
else:
card = f'{number} of {suit}'
list_deck.append(card)
print(list_deck)
print(create_deck())
我希望create_deck()
用Cards()
的新实例填充空白列表,而不是仅用字符串填充,例如:
[card1, card2, card3, etc etc,..card52]
。
我该如何实现?
答案 0 :(得分:1)
您可以这样生成它:
cards = [Cards() for card in range(n_cards)]
为此,对于可迭代range(n_cards)
中的每个元素(除了从0到独占n_cards的范围(0、1、2 ... n_cards-1)之外),您将添加一个新的{ {1}}反对列表。
答案 1 :(得分:1)
您可以使用列表理解功能在一行中代替列表循环:
list_deck = [Cards(num, suit) for num in list_numbers for suit in list_suit]
如果您希望像以前一样使用for循环,则只需使用您的类将项目添加到列表中即可:
for number in list_numbers:
for suit in list_suit :
list_deck.append(Cards(number, suit))
如果要打印Cards对象,则需要为您的课程实现 repr 功能。
def __repr__(self):
if self.Value == 11:
return("J of " + self.Suit)
elif self.Value == 12:
return("Queen of " + self.Suit)
elif self.Value == 13:
return("King of " + self.Suit)
else:
return(str(self.Value) + " de " + self.Suit)