将一个类的新实例添加到列表中?

时间:2020-07-29 21:32:23

标签: python python-3.x

我正在学习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]

我该如何实现?

2 个答案:

答案 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)