我正在编写python代码来解释我在玩线索游戏时收集的数据。在代码的特定部分中,我将卡片列表添加到三个不同集合之一中,具体取决于哪一组与我手中的卡片相对应。此时,我已经有一张包含6张卡片的列表,就像这样...
standby_list = ['Mustard', 'Plum', 'Revolver', 'Candlestick', 'Study', 'Hall']
这些是我尝试添加到手的六张牌。另外,我已经有了游戏中涉及的三位玩家的字典以及他们的“玩家编号”,例如...
players = {"Billy" : "Player 0", "Bob" : "Player 1", "Joe" : "Player 2"}
最后,有3个空套,每个玩家的纸牌一套...
player0_cards = set()
player1_cards = set()
player2_cards = set()
我的目标是(1)确定这三个空组中的哪个对应于我(鲍勃)手中的卡,并且(2)将我的六张卡列表添加到该组中。
我现在拥有的代码如下所示。它看起来很糟糕并且是“非Pythonic的”。
standby_list = ['Mustard', 'Plum', 'Revolver', 'Candlestick', 'Study', 'Hall']
player0_cards = set()
player1_cards = set()
player2_cards = set()
players = {"Billy" : "Player 0", "Bob" : "Player 1", "Joe" : "Player 2"}
if players['Bob'] == 'Player 0':
for card in standby_list:
player0_cards.add(card)
elif players['Bob'] == 'Player 1':
for card in standby_list:
player1_cards.add(card)
elif players['Bob'] == 'Player 2':
for card in standby_list:
player2_cards.add(card)
谁知道这可能是为我希望程序执行的操作编写代码的最佳方法,如果没有,请告诉我。
谢谢...
答案 0 :(得分:2)
一个Pythonic解决方案是使用字典来存储可变数量的变量。抵制为每个变量命名的诱惑。而是将相似的变量作为键值字典映射进行分组。
请注意,您也可以使用set.update
来代替将列表的每个项目依次添加到集合中。
这是一个例子。请注意,我们可以将players['Bob']
返回的值直接输入到cards
字典中。由于此操作返回了set
,因此我们可以在结果上使用set.update
。
standby_list = ['Mustard', 'Plum', 'Revolver', 'Candlestick', 'Study', 'Hall']
players = {"Billy" : "Player 0", "Bob" : "Player 1", "Joe" : "Player 2"}
cards = {'Player 0': set(), 'Player 1': set(), 'Player 2': set()}
cards[players['Bob']].update(standby_list)
print(cards)
{'Player 0': set(),
'Player 1': {'Candlestick', 'Hall', 'Mustard', 'Plum', 'Revolver', 'Study'},
'Player 2': set()}
答案 1 :(得分:1)
这样的事情怎么样
standby_list = ['Mustard', 'Plum', 'Revolver', 'Candlestick', 'Study', 'Hall']
players = {"Billy" : "Player 0", "Bob" : "Player 1", "Joe" : "Player 2"}
cards = {'Player 0': set(), 'Player 1': set(), 'Player 2': set()}
cards[players['Bob']].add(tuple(standby_list))
print (cards[players['Bob']])
# {('Mustard', 'Plum', 'Revolver', 'Candlestick', 'Study', 'Hall')}
答案 2 :(得分:1)
您可以将standby_list
初始化为一个集合(因为卡是唯一的),players
初始化为列表,并使用列表推导生成player_cards
以使其具有Python风格。指定“ Player 1”,“ Player 2”和“ Player 3”是多余的,因为列表索引本身可以表示玩家编号。
standby_list = {'Mustard', 'Plum', 'Revolver', 'Candlestick', 'Study', 'Hall'}
players = ['Billy', 'Bob', 'Joe']
player_cards = [standby_list if player == 'Bob' else set() for player in players]
player_cards
将变为:
[set(), {'Study', 'Revolver', 'Mustard', 'Plum', 'Hall', 'Candlestick'}, set()]
您的玩家号码可以是用于访问player_cards
组合列表的整数。