我是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
当我抽出一张新卡时,该卡不会更改,而是保留我绘制的最后一张卡。然后,当我打印卡座时,它会同时打印我的旧卡座和新卡座。但是,分数是正确的,这表明我的名单只有三张卡。怎么回事,为什么要打印五张卡?
答案 0 :(得分:0)
好吧,简而言之,是:您永远不会重置Deck.print。因此,每次调用__str__
但是总的来说,该代码可以进行重大改进
例如。您的__str__
函数远非pythonic。类似于
return '\n'.join(self.deck)
看起来会好很多。
通常,不需要在每个变量前面加上“ self”。如果仅在函数中使用它们。在大多数情况下,在类方法中,您要么更新对象变量(self.something),要么从函数中返回一些值,但不能同时返回两者。 当然,可能会有例外,但是在您看来,这是规则而不是例外。
使用全局变量也是您应避免的事情。