[英]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.