Python 在poke游戏中玩把戏时迭代元组时更新defaultdict
所以我希望得到一个由4个元组组成的元组的输入,其中包含扑克游戏中某个阶段玩的4个技巧。我能够从中得到一些结果,这将给我可能的赢家,并在元组中找到该卡的索引Python 在poke游戏中玩把戏时迭代元组时更新defaultdict,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,所以我希望得到一个由4个元组组成的元组的输入,其中包含扑克游戏中某个阶段玩的4个技巧。我能够从中得到一些结果,这将给我可能的赢家,并在元组中找到该卡的索引 ('9D', '9S', '3S', '0D') Player0 Player1 Player2 Player3 下面是一个例子: (('9D', '9S', '3S', '0D'),) 元组内部包含4个元组,但是在这种形式下,它仍然可以用作有效输入 我能够比较某些值并得到那张卡的索引 例如: Due to certain
('9D', '9S', '3S', '0D')
Player0 Player1 Player2 Player3
下面是一个例子:
(('9D', '9S', '3S', '0D'),)
元组内部包含4个元组,但是在这种形式下,它仍然可以用作有效输入
我能够比较某些值并得到那张卡的索引
例如:
Due to certain issues this snippet has been deleted, please refer to the answer below
你可能会看到,我正在使用一种非常基本的方法来测试可能的结果。现在我被困在一个舞台上,它想让我记录下胜利者。或者更具体地说,记录特定获胜者赢得的戏法数量。注意,播放器编号是由元组中的索引位置预先确定的
('9D', '9S', '3S', '0D')
Player0 Player1 Player2 Player3
我的目标是1。记录一个玩家获胜的戏法数。2.将一个键更新为该播放器,并将该键的值增加1。然后按照该模式处理所有卡片元组
示例输入:
score_phase((0, 0, 0, 0), (('9D', '9S', '3S', '0D'),), '2D')
期望的输出应该变成(10,10,10,1)
,因为除了玩家4外,没有人赢了这个把戏,但是他在0上出价,这个数字与他在那个阶段赢的把戏数不一样
您可能想在代码中指出的一些问题是因为我目前正在尝试获取一个主要输出,这可能会给我一些见解。遗憾的是,到目前为止还没有人能给我启发。
任何关于如何处理此问题的帮助都将不胜感激
编辑:如果玩家0赢了一个把戏,他将得到一分(这可能是以后的输出)。如果他在
出价
中出价1,那么他做出了一个把戏,因此他得到了1+10(10用于做出正确的预测)。我只是想问是否有办法做到这一点?我可以得到一个数字的索引,它表明谁玩了那张牌。因此,我可以使用它和出价元组进行比较,并更新他的分数。但我认为仅仅使用元组和列表是不可能的,所以我想知道是否有可能在defaultdict中更新它们。但是,我们也非常感谢其他实现这一目标的方法 在你的应用程序中,有很多事情你需要注意。以下是您的(10,10,10,1)
部分问题的一些灵感。我冒昧地修改了一下你的代码。尽管如此,它仍然应该是可以识别的
SPECIALS = {"0": 10, "J": 11, "Q": 12, "K": 13, "A": 14}
def getCardValue(inputVal):
special = inputVal[:-1]
return SPECIALS.get(special, int(special))
def score_phase(bids, tricks, deck_top):
# Unwrap tricks
tricks = tricks[0]
# Convert to a high score list.
result = [0 if deck_top[-1] != x[-1] else getCardValue(x)
for x
in tricks]
best = max(result)
winners = [i for i in range(len(result)) if result[i] == best]
print('Winner(s) by index: {}'.format(', '.join(str(winner)
for winner
in winners)))
def score(i):
if bids[i] > 0:
if result[i] == best:
return 11
else:
return 0
else:
if result[i] == best:
return 1
else:
return 10
return [score(i) for i in range(len(bids))]
if __name__ == '__main__':
print(score_phase((0, 0, 0, 0), (('9D', '9S', '3S', '0D'),), '2D'))
希望能有点帮助。我不知道游戏的逻辑。如果你能告诉我哪些数据需要更新其他数据和条件,也许我会得到它。澄清一下:如果玩家4赢了为什么
(10,10,10,1)
?这似乎表明玩家1-3得到了10,而玩家4得到了1。@Nightcrawler这是因为玩家1-3正确地预测了他们的出价,因为他们没有在那个把戏中获胜,所以在他们的获胜记录中0对0,所以他们得到了10。然而,另一方面,玩家4在以1的记录获胜的同时出价0,因此1与0不匹配,因此他只能从他获胜的次数中获得分数,即1,因此是输出。我开始理解。如果你的球员没有名字,只是名单上的一个索引,那么名单就足够了。如果不希望索引匿名,可以将其映射到名称。我将围绕你告诉我的内容进行讨论。如果只是一个技巧,映射就可以工作,因为你可能会看到技巧元组由4个元组组成。他们的位置会改变,这会让我患癌症。。。例如,当进入第二个技巧时,获胜者将开始该技巧,这意味着如果玩家4赢了前一个技巧,他将开始,然后是玩家1、2和3。所以我不知道映射是否有效,因为它们的索引可能会变化。。。这让我很难过。。。谢谢你,好心的先生。同时,我也会做出一些努力。