Python列表重复整个Lis的最后一个元素

2024-05-29 09:57:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个python程序只是为了做一个简单的扑克游戏。我只想熟悉Python语言。我知道我编写python代码的方法并不完全是python式的,但实际上我只是想弄清楚为什么我的列表会将最后一个对象重复地追加到列表中的每个空格。当我附加时,列表有正确的值,但是在它之后只是重复地追加最后一个对象。我花了大约两天的时间试图弄清楚,我确信这只是我在语言上忽略的东西。任何帮助都将不胜感激。代码如下:

class Card(object):
    suit = ""
    value = ""

    def __init__(self, suit, value):
        Card.suit=suit
        Card.value=value

def createDeck():

    suit = ["DIAMONDS", "HEARTS", "CLUBS","SPADES"]
    value = ["ACE", "TWO", "THREE", "FOUR", "FIVE", 
         "SIX", "SEVEN", "EIGHT", "NINE", "TEN", 
         "JACK", "QUEEN", "KING"]
    Deck = []

    for i in range(4):
        for j in range(13):
            card = Card(suit[i],value[j])
            Deck.append(card)
            print(Deck[i].value, "OF", Deck[i].suit)

    displayDeck(Deck)

def displayDeck(Deck = [], *args):
    for i in range(len(Deck)):
        print(Deck[i].value, " OF ", Deck[i].suit)

这是我得到的输出,为了简洁起见,它被缩短了: C: \Users\root\Desktop>;py扑克.py在

^{pr2}$

Tags: 对象代码in语言列表forvaluedef
3条回答

为了详细说明Rockybilly的答案,您的Card类定义了两个class属性,suit和{}。您的Card类的每个实例都共享这两个值,这意味着如果您在一个实例中更改它,则它在所有实例中都会更改。这就是当前在您的Card.__init__方法中,当您执行Card.suit = suit之类的操作时所发生的事情。你正在修改你曾经创造过的所有所有Card的套装。在你的例子中,黑桃之王是你创造的最后一张牌,所以它的花色和价值是为你创造的52张牌设定的。在

您要做的是将suitvalue视为实例值,这意味着您可以通过self在类中引用它们。此外,您不需要在类级别(即class Card行的正下方)设置它们的值。相反,您只需在__init__方法中初始化它们。尝试将您的Card类更改为:

class Card( object ):
    def __init__( self, suit, value ):
        self.suit = suit
        self.value = value

在您的Card.__init__-方法中,您设置类属性而不是if实例属性。所以每个牌实例都有相同的属性,最后一组(黑桃之王)。因此,使用self.设置实例属性:

class Card(object):
    def __init__(self, suit, value):
        self.suit = suit
        self.value = value

因此,类属性的一个用法是suit和value名称的常量:

^{pr2}$

这样试试吧

    def __init__(self, suit, value):
       self.suit=suit
       self.value=value

这是如何正确地设置套装和卡对象的值。在

^{pr2}$

我删除了循环中的print语句。 现在的输出是:

('ACE', ' OF ', 'DIAMONDS')
('TWO', ' OF ', 'DIAMONDS')
('THREE', ' OF ', 'DIAMONDS')
('FOUR', ' OF ', 'DIAMONDS')
('FIVE', ' OF ', 'DIAMONDS')
('SIX', ' OF ', 'DIAMONDS')
('SEVEN', ' OF ', 'DIAMONDS')
('EIGHT', ' OF ', 'DIAMONDS')
('NINE', ' OF ', 'DIAMONDS')
('TEN', ' OF ', 'DIAMONDS')
('JACK', ' OF ', 'DIAMONDS')
('QUEEN', ' OF ', 'DIAMONDS')
('KING', ' OF ', 'DIAMONDS')
('ACE', ' OF ', 'HEARTS')
('TWO', ' OF ', 'HEARTS')
('THREE', ' OF ', 'HEARTS')
('FOUR', ' OF ', 'HEARTS')
('FIVE', ' OF ', 'HEARTS')
('SIX', ' OF ', 'HEARTS')
('SEVEN', ' OF ', 'HEARTS')
('EIGHT', ' OF ', 'HEARTS')
('NINE', ' OF ', 'HEARTS')
('TEN', ' OF ', 'HEARTS')
('JACK', ' OF ', 'HEARTS')
('QUEEN', ' OF ', 'HEARTS')
('KING', ' OF ', 'HEARTS')
('ACE', ' OF ', 'CLUBS')
('TWO', ' OF ', 'CLUBS')
('THREE', ' OF ', 'CLUBS')
('FOUR', ' OF ', 'CLUBS')
('FIVE', ' OF ', 'CLUBS')
('SIX', ' OF ', 'CLUBS')
('SEVEN', ' OF ', 'CLUBS')
('EIGHT', ' OF ', 'CLUBS')
('NINE', ' OF ', 'CLUBS')
('TEN', ' OF ', 'CLUBS')
('JACK', ' OF ', 'CLUBS')
('QUEEN', ' OF ', 'CLUBS')
('KING', ' OF ', 'CLUBS')
('ACE', ' OF ', 'SPADES')
('TWO', ' OF ', 'SPADES')
('THREE', ' OF ', 'SPADES')
('FOUR', ' OF ', 'SPADES')
('FIVE', ' OF ', 'SPADES')
('SIX', ' OF ', 'SPADES')
('SEVEN', ' OF ', 'SPADES')
('EIGHT', ' OF ', 'SPADES')
('NINE', ' OF ', 'SPADES')
('TEN', ' OF ', 'SPADES')
('JACK', ' OF ', 'SPADES')
('QUEEN', ' OF ', 'SPADES')
('KING', ' OF ', 'SPADES')
[Finished in 0.3s]

相关问题 更多 >

    热门问题