Python 列表似乎没有更新

Python list doesn't seem to be updating

我是 python 的新手,我正在尝试创建 21 点。然而,当我试图打印出玩家的手牌时,我 运行 遇到了一些困难。
这是我打(抽牌)的代码:

def hit(card, deck):
    global money, choice

    choice = input("How much would you like to bet?\n")
    money -= int(choice)
    print("You have decided to bet $" + str(choice))
    card = card.drawCard(deck.deck)
    card.getPt()
    deck.addScore(card)
    deck.addCard(card)
    c = str(card)
    p = str(deck)
    print("You have drawn: " + str(c) + "\n")
    print("The player has:\n" + str(p) + "\n")
    print("Total score:", deck.score)

这是我打印卡片的代码:

def __str__(self):
    for i in range(0, len(self.deck)):
        self.print = self.print + "\n" + str(self.deck[i])
    return self.print

我的代码做的第一件事是为庄家和闲家抽两张牌,运行没问题。然而,在玩家抽到一张牌之后,它会变得有点不稳定。输出是这样的:

The player has drawn Card A  
The player has drawn Card B
Total score: number

How much would you like to bet?  
number

You have bet number  
You have drawn Card B

Player has:  
Card A  
Card B  
Card A  
Card B  
Card B  

当我抽一张新牌时,这张牌并没有改变,它仍然是我抽的最后一张牌。然后,当我打印我的牌组时,它会打印我的旧牌组和新牌组。但是,分数是正确的,这表明我的列表只有三张牌。这是怎么回事,为什么要打印五张卡片?

Full code
Example output

嗯,简而言之,答案是:你永远不会重置 Deck.print。 所以它在每次调用 __str__[=13 时不断累积=]

但总的来说,这段代码可以得到显着改进 例如。您的 __str__ 函数远非 pythonic。类似于

return '\n'.join(self.deck)

会更好看。

一般来说,如果仅在函数内使用,则无需在每个变量前加上 "self."。在大多数情况下,在 class 方法中,您可以更新对象变量 (self.something) 或 return 函数中的某个值,但不能同时更新两者。 当然,这可能会有例外,但在您的情况下,这似乎是规则而不是例外。

您也应尽可能避免使用全局变量。