Метод Python не возвращает правильное значение

#python #class #methods

Вопрос:

Чтобы научиться использовать классы на Python, я в настоящее время кодирую карточную игру. Я хотел протестировать метод «wert_addieren» (этот метод должен добавлять значение карты к счету игрока), поэтому я написал простую тестовую программу. Но вот в чем проблема: единственный раз, когда метод «wert_addieren» возвращает ожидаемый результат, а именно

spieler_punkte = 2

это когда я меняюсь

вернуть пункте

Для

print(deck, punkte)

Я надеюсь, что кто-нибудь сможет мне помочь 🙂

Полный код:

 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)
 

Комментарии:

1. На самом деле вы не используете возвращаемое значение, поэтому, конечно, оно ничего не делает

2. Добро пожаловать в stack overflow! Не совсем ясно, чего вы ожидаете. Если вы хотите отобразить значение, вы используете print() . Если вы хотите записать значение и использовать его позже, вы return можете выбрать функцию и назначить ее, например, self.x=k.wert_addieren(spieler, spieler_punkte) или x=k.wert_addieren(spieler, spieler_punkte); print(x)

Ответ №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, поэтому он вам действительно не нужен. если вы уже меняете значение параметров, вам на самом деле не нужно ничего возвращать, если только это не связано с параметрами.например, функция, которая добавляет дополнительную карту в колоду, не должна ничего возвращать, но функция, которая дает нам общее значение всех карт в колоде, вернет определенное значение, которое вы передадите другой переменной.