繁体   English   中英

无法将对象附加到实例变量(列表)

[英]Cannot append an object to an instance variable(list)

我正在尝试学习 python 并且正在尝试创建一个二十一点游戏。 我创建了一个Person类,其中有一个名为self.hand的实例变量。 self.hand是一个空列表,它应该包含 2 张初始卡片,然后任何需要卡片的玩家都将通过 append 方法收到卡片。 但是,由于某种原因,这对我不起作用。 有人请帮助它已经困扰我好几天了!!

我已经尝试创建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")

该代码应将随机卡片附加到人员手牌列表中。 然而,这并没有发生,当我尝试在最后打印出他们的手牌时,它只显示他们是两张牌,这两张牌是该人开始时使用的牌。

您的问题是,每次您执行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)

如果用户输入未知名称,您可能需要一些更多的逻辑来避免错误,但这应该给您一般的想法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM