Список Python не обновляется - PullRequest
0 голосов
/ 15 ноября 2018

Я довольно новичок в 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  

Когда я вытягиваю новую карту, карта не меняется, она остается последней картой, которую я вытянул. Затем, когда я печатаю свою колоду, она печатает мою старую колоду и мою новую колоду. Тем не менее, оценка верна, что указывает на то, что в моем списке всего три карты. Что происходит и почему печатается пять карт?

Полный код
Пример вывода

1 Ответ

0 голосов
/ 15 ноября 2018

Ну, чтобы кратко получить ответ: вы никогда не сбрасываете Deck.print. Таким образом, он продолжает накапливаться при каждом вызове __str__

Но в целом этот код может бытьЗначительно улучшилось. Например, ваша __str__ функция далеко не питонна.Что-то вроде

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

выглядело бы намного лучше.

В общем случае нет необходимости ставить каждую переменную перед "self".если они используются только внутри функции.В большинстве случаев в методе класса вы либо обновляете переменную объекта (self.something), либо возвращаете некоторое значение из функции, но не оба.Конечно, могут быть и исключения, но в вашем случае это правило, а не исключение.

Использование глобальных переменных - это то, чего вам следует избегать, когда это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...