Python列表似乎没有更新

时间:2018-11-15 03:41:44

标签: python list class blackjack

我是python的新手,我正在尝试创建二十一点。但是,当我尝试打印出玩家的手牌时,遇到了一些困难。
这是我的打(发卡)代码:

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

1 个答案:

答案 0 :(得分:0)

好吧,简而言之,是:您永远不会重置Deck.print。因此,每次调用__str__

时,它都会不断积累。

但是总的来说,该代码可以进行重大改进 例如。您的__str__函数远非pythonic。类似于

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

看起来会好很多。

通常,不需要在每个变量前面加上“ self”。如果仅在函数中使用它们。在大多数情况下,在类方法中,您要么更新对象变量(self.something),要么从函数中返回一些值,但不能同时返回两者。 当然,可能会有例外,但是在您看来,这是规则而不是例外。

使用全局变量也是您应避免的事情。