簡體   English   中英

Python列表似乎沒有更新

[英]Python list doesn't seem to be updating

我是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  

當我抽出一張新卡時,該卡不會更改,而是保留我繪制的最后一張卡。 然后,當我打印卡座時,它會同時打印我的舊卡座和新卡座。 但是,分數是正確的,這表明我的名單只有三張卡。 怎么回事,為什么要打印五張卡?

完整代碼
輸出示例

好吧,簡而言之,答案是: 您永遠不會重置Deck.print。 因此,每次調用__str__它都會不斷累積

但總的來說,可以大大改善此代碼,例如__str__函數遠非__str__ 遵循以下原則

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

看起來會好很多。

通常,沒有必要在每個變量前加上“自我”。 如果僅在函數中使用它們。 在大多數情況下,在類方法中,您要么更新對象變量(self.something),要么從函數中返回一些值,但不能同時返回兩者。 當然,可能會有例外,但是在您的情況下,這似乎是規則,而不是例外。

您還應盡可能避免使用全局變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM