【问题标题】:Python method doesn't return right valuePython方法不返回正确的值
【发布时间】:2021-06-04 21:24:59
【问题描述】:

为了学习如何在 Python 中使用类,我目前正在编写一个纸牌游戏。我想测试“wert_addieren”方法(这个方法应该是把一张牌的值加到玩家分数上),所以我写了一个简单的测试程序。但问题来了:方法“wert_addieren”唯一一次返回预期结果,即

spieler_punkte = 2

当我改变时

回归朋克

打印(甲板,朋克)

我希望有人能够帮助我:)

完整代码:

class Kartenstapel(object):
    def __init__(self):
        #Karten Abkürzungen: Kreuz = KR, Pik = PI, Herz = HE, Karo = KA
        self.karten = ["2KR", "2PI", "2HE", "2KA", "3KR", "3PI", "3HE", "3KA", "4KR", "4PI", "4HE", "4KA",
                    "5KR", "5PI", "5HE", "5KA", "6KR", "6PI", "6HE", "6KA", "7KR", "7PI", "7HE", "7KA",
                    "8KR", "8PI", "8HE", "8KA", "9KR", "9PI", "9HE", "9KA", "10KR", "10PI", "10HE", "10KA",
                    "bubeKR", "bubePI", "bubeHE", "bubeKA", "koeniginKR", "koeniginPI", "koeniginHE", "koeniginKA", 
                    "koenigKR", "koenigPI", "koenigHE", "koenigKA", "assKR", "assPI", "assHE", "assKA"]

    def wert_addieren(self, deck, punkte):
        hilf = deck[-1]
        if "2" in hilf:
            punkte += 2
        return punkte

    def karte_ziehen(self, deck):
        deck.append(self.karten[0])
        self.karten.pop(0)
        return self.karten, deck

k = Kartenstapel()
spieler = []
spieler_punkte = 0
k.karte_ziehen(spieler)
k.wert_addieren(spieler, spieler_punkte)
print(spieler, "\n", spieler_punkte)

【问题讨论】:

  • 你实际上并没有使用返回值,所以它当然什么都不做
  • 欢迎堆栈溢出!目前尚不清楚您的期望是什么。如果要显示一个值,请使用print()。如果您想捕获一个值并稍后使用它,您可以从函数中return 并分配它,例如self.x=k.wert_addieren(spieler, spieler_punkte)x=k.wert_addieren(spieler, spieler_punkte); print(x)

标签: python class methods


【解决方案1】:

首先,pop 方法也返回弹出的项目,所以你可以这样做

    def karte_ziehen(self, deck):
        deck.append(self.karten.pop(0))
        return self.karten, deck

其次,您从函数返回值但不使用它们。所以做一些类似的事情 -

k = Kartenstapel()
spieler = []
spieler_punkte = 0
karten, spieler = k.karte_ziehen(spieler)
spieler_punkte = k.wert_addieren(spieler, spieler_punkte)
print(spieler, "\n", spieler_punkte)

我对返回值使用了相同的变量。如果需要,您可以使用不同的。

【讨论】:

    【解决方案2】:

    当你这样做 k.wert_addieren(spieler, spieler_punkte) 时,你将 spieler_punkte 的值更改为 2,所以你并没有真正使用 return,所以你真的不需要它。如果您已经在更改参数的值,则您实际上不需要返回任何内容,除非它与参数无关。例如,将额外卡片添加到套牌的函数不需要返回任何内容,但是为我们提供一副牌中所有牌的总值的函数将返回一个特定值,您将把该值赋给另一个变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 2019-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      相关资源
      最近更新 更多