当前位置: 首页 > 知识库问答 >
问题:

Python列表似乎没有更新

鞠嘉誉
2023-03-14

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

当我抽到一张新牌时,这张牌不变,它保持我抽到的最后一张牌。然后,当我打印我的甲板,它打印我的旧甲板和我的新甲板。但是,分数是正确的,这表明我的单子只有三张牌长。这是怎么回事,为什么要印五张卡呢?

完整代码
示例输出

共有1个答案

敖和韵
2023-03-14

好吧,简单地说,答案是:你永远不会重置甲板.打印。因此它在每次调用__str__时不断累积

但总的来说,这一代码可以得到很大的改进,例如。您的__str__函数远不是Pythonic的。类似于…的东西

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

会更好看。

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

使用全局也是一个你应该尽量避免的事情。

 类似资料:
  • 这是我的功能: 我有十个测试,完全是这样的: 因此,根据我的计算,一次测试只会产生1/10,000次重复运行,10次测试只会产生1/1000次重复运行。然而,它在大约50%的运行中创建了副本,我不知道为什么。

  • 我试图用下面的正则表达式解析一些日期。但它似乎只使用了一些连字符。请看下面的链接。它与某些日期不匹配。我添加了那个特殊的连字符,但它只在RGE0101中有效。通用域名格式。不是用Python。 https://regex101.com/r/vI6qN1/1

  • 问题内容: 我正在尝试使用两个线程将值添加到中。我想要的是,当一个线程正在添加值时,另一个线程不应干涉,因此我使用了该方法。但是看来,如果我没有在对象上显式同步,则添加操作将以不同步的方式进行。 没有显式的同步块: 我得到的输出是: 在未注释显式同步块的情况下,我在添加时停止了来自其他线程的干扰。一旦线程获得了锁,它将一直执行直到完成。 取消注释同步块后的样本输出: 那么为什么不进行同步呢? 问题

  • 我正在运行具有以下配置的Web服务器: Ubuntu 14.04 PHP 5.5.9 PHP-FPM Nginx 当我在Symfony应用程序中上传文件时,我收到错误

  • 问题内容: 我做了一些辅助功能: 问题是我的所有文件都没有被压缩!文件大小相同,实际上,扩展名已更改为“ .zip”(在本例中为“ .xls”)。 我在winXP sp2上运行python 2.5。 问题答案: 这是因为要求您指定压缩方法。如果未指定,则假定压缩方法为,该方法仅存储文件而不压缩文件。您需要将方法指定为。您将需要为此安装模块( 通常 默认情况下已安装)。

  • 我有一个Camel-ReST路由,它使用Jackson将集合转换为JSON,但当集合中的对象包含LocalDate时,它会抛出一个错误(没有LocalDate,一切都很好)。 com.fasterxml.jackson.databind.exc.:默认不支持Java8日期/时间类型:添加模块"com.fasterxml.jackson.datatype: jackson-datatype-jsr3