从名单中创建一个“玩家”并给他们自己的独立列表

问题描述 投票:0回答:1

我目前正在学习 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”的创建并不成功,我的处理方式是否错误?

python-3.x
1个回答
0
投票

假设应该为每个玩家分配

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.
© www.soinside.com 2019 - 2024. All rights reserved.