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
当我抽一张新牌时,这张牌并没有改变,它仍然是我抽的最后一张牌。然后,当我打印我的牌组时,它会打印我的旧牌组和新牌组。但是,分数是正确的,这表明我的列表只有三张牌。这是怎么回事,为什么要打印五张卡片?
嗯,简而言之,答案是:你永远不会重置 Deck.print。 所以它在每次调用 __str__
[=13 时不断累积=]
但总的来说,这段代码可以得到显着改进
例如。您的 __str__
函数远非 pythonic。类似于
return '\n'.join(self.deck)
会更好看。
一般来说,如果仅在函数内使用,则无需在每个变量前加上 "self."。在大多数情况下,在 class 方法中,您可以更新对象变量 (self.something) 或 return 函数中的某个值,但不能同时更新两者。
当然,这可能会有例外,但在您的情况下,这似乎是规则而不是例外。
您也应尽可能避免使用全局变量。
我是 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
当我抽一张新牌时,这张牌并没有改变,它仍然是我抽的最后一张牌。然后,当我打印我的牌组时,它会打印我的旧牌组和新牌组。但是,分数是正确的,这表明我的列表只有三张牌。这是怎么回事,为什么要打印五张卡片?
嗯,简而言之,答案是:你永远不会重置 Deck.print。 所以它在每次调用 __str__
[=13 时不断累积=]
但总的来说,这段代码可以得到显着改进
例如。您的 __str__
函数远非 pythonic。类似于
return '\n'.join(self.deck)
会更好看。
一般来说,如果仅在函数内使用,则无需在每个变量前加上 "self."。在大多数情况下,在 class 方法中,您可以更新对象变量 (self.something) 或 return 函数中的某个值,但不能同时更新两者。 当然,这可能会有例外,但在您的情况下,这似乎是规则而不是例外。
您也应尽可能避免使用全局变量。