Невозможно добавить объект в переменную экземпляра (список) - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь изучить Python и пытаюсь создать игру в блэкджек. Я создал класс Person, в котором он имеет переменную экземпляра с именем self.hand. self.hand - это пустой список, который должен содержать 2 начальные карты, и оттуда любой игрок, которому нужна карта, получит карту с помощью метода добавления. Однако по некоторым причинам это не работает для меня. Кто-то, пожалуйста, помогите, это беспокоит меня уже несколько дней !!

Я уже пытался создать экземплярный метод get_add_card (получить дополнительную карту) и пытался вручную добавить новый объект карты в список рук людей. Ничего не сработало.

Первый фрагмент кода - это класс Person. В этом классе я определяю self.hand как список, в котором изначально будут храниться 2 объекта карты (get_cards). После этого я сделал другой метод, который должен добавить другую карту в список, если это необходимо. Второй блок кода должен проверить, кому нужна карта, а затем добавить случайную карту в этот список лиц.

class Person:
    def __init__(self, name):
        self.name = name
        self.hand = []
        self.get_cards()

    def get_cards(self):
        for i in range(2):
            rand_card = random.choice(Deck.cards)
            self.hand.append(rand_card)
            Deck.cards.remove(rand_card)

    def get_add_card(self):
        self.hand.append(random.choice(Deck.cards))

need_card = True
while need_card:
    answer = input("Does anyone need a card? Yes or No")
    if answer.lower() == 'no':
        need_card = False
    elif answer.lower() == 'yes':
        player_need = input("Which player needs a card?").lower()
        Person(player_need).get_add_card()
        print (Person(player_need).hand)
    else:
        print("Please answer using yes or no")

Код должен добавить случайную карту в список раздач. Однако этого не происходит, и когда я пытаюсь распечатать их руку в конце, это только показывает, что это две карты, с которых начинал человек в начале.

1 Ответ

1 голос
/ 25 марта 2019

Ваша проблема в том, что каждый раз, когда вы делаете Person(need_player), вы создаете отдельный Person объект.Даже если вы используете тот же name, это не тот же объект, что и раньше, и у него будет отдельный список с атрибутом hand.

Чтобы избежать повторного воссоздания ваших игроков, вы должны создатьих заранее и поместите в список или словарь:

# up front, create the players (perhaps by prompting, but here hard-coded)
players = {"alice": Person("Alice"), "aob": Person("Bob")}

# later, you can look them up by name:
player_need = input("Which player needs a card?").lower()
players[player_need].get_add_card()
print(players[player_need]).hand)

Возможно, вам понадобится дополнительная логика, чтобы избежать ошибок, если пользователь вводит неизвестное имя, но это должно дать вам общее представление.

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