我目前正在学习 python 中的类和方法,并且陷入了我正在做的一个小项目中, 我想从玩家姓名列表中创建“玩家”,每个玩家都需要自己独立的列表(手,上,下)我认为下面的这个可以实现这一点
deck = ["ha", "h2", "h3", "h4", "h5", "h6", "h7", "h8", "h9", "h10", "hj", "hq", "hk", "da", "d2", "d3", "d4", "d4", "d5", "d6", "d7", "d8", "d9", "d10", "dj", "dq", "dk"]
cardsperset = 3
playernames = ["N", "L"]
class player:
def __init__(self, name):
self.name = name
hand = []
up = []
down = []
for name in playernames:
name = player(name)
def randomcard():
randcard = deck[random.randint(range(deck))]
deck.remove(randcard)
return randcard
for i in range(cardsperset):
N.hand.append(randomcard())
N.down.append(randomcard())
N.up.append(randomcard())
print(N.hand)
但是,当尝试打印结果以查看这是否有效时,我收到错误“NameError:名称'N'未定义” 显然玩家“N”的创建并不成功,我的处理方式是否错误?
假设应该为每个玩家分配
cardsperset
数量的牌,您应该首先确保您有一个创建的玩家列表 - 然后您可以迭代此列表,为每个玩家分配随机牌。
我做了一些额外的更改,例如资本类别名称(玩家 -> 玩家),将
hand = []
更改为 self.hand = []
等。
import random
deck = ["ha", "h2", "h3", "h4", "h5", "h6", "h7", "h8", "h9", "h10", "hj", "hq", "hk", "da", "d2", "d3", "d4", "d4", "d5", "d6", "d7", "d8", "d9", "d10", "dj", "dq", "dk"]
cardsperset = 3
playernames = ["N", "L"]
players = []
class Player:
def __init__(self, name):
self.name = name
self.hand = [] # assign to self
self.up = []
self.down = []
for name in playernames:
players.append(Player(name)) # Append players to global list "players"
def randomcard():
randcard = deck[random.randint(0, len(deck)-1)]
deck.remove(randcard)
return randcard
for N in players: # for each player, N, assign cards. N now exists in scope.
for i in range(cardsperset):
N.hand.append(randomcard())
N.down.append(randomcard())
N.up.append(randomcard())
print(players[0].hand) # Access a certain player and inspect hand.