组合:如何计算为比赛结果猜谜游戏授予的积分的所有可能组合

时间:2018-07-28 02:24:38

标签: python python-3.x

我本人和一群人“下注”,球队将在不同的足球比赛结果中获胜(不涉及金钱)。有3种可能的积分奖励给玩家。

points = [0, 3, 4]

所以,如果我说甲队将以1-0获胜。

  • 如果A队输了,我就得不到分。
  • 如果A队获胜,我会得到3分。
  • 如果A队以1-0获胜,我会得到额外的加分,总共得到4分。

因此,对于该特定下注,我可以获得0、3或4分。其他参与此投注的人也是如此。所以我试图获得所有可能的结果组合。对于两个玩家,我希望能够获得这种输出(例如两个玩家的示例):

"Player 1"    0   0   0   3   3   3   4   4   4
"Player 2"    0   3   4   0   3   4   0   3   4

我以前有一个Excel文件,该文件使用VBA计算这些可能的结果,但是播放器的数量是固定的,因此该代码不适合添加或删除播放器。

我正在尝试创建一个函数,该函数可以针对不同数量(和动态数量)的玩家计算并输出具有所有可能结果组合的某些数据结构。

我已经阅读了几个有关python组合的问题(超过10个),但没有一个涵盖此特定方案。它们通常涵盖使用itertools进行排列(不是这样,因为我们每个人都可以得到相同的结果),多个组合(如果组合的数量超过可能结果的值,将不起作用(3))。通过使用以下方法确实获得了与我需要的东西类似的东西:

string_points = str(points[0])+str(points[1])+str(points[2])

for p in itertools.product(string_points, repeat=3):
    print(p)

结果是一个元组序列,其中包含可能结果的字符串值:

('0', '0')
('0', '3')
('0', '4')
('3', '0')
('3', '3')
('3', '4')
('4', '0')
('4', '3')
('4', '4')

但是作为字符串,我无法对其进行任何操作或计算统计信息...

有什么办法可以使用itertools来完成这项工作? 有人会建议完全不同的方法吗?我愿意接受任何一种解决方案。 是否有任何数据结构可以将参与者的姓名纳入可能的结果?预先感谢...

1 个答案:

答案 0 :(得分:0)

无需首先将值转换为字符串!

for p in itertools.product(points, repeat=2):

这将为您订购一对整数。

具体来说,您想要的是积分列表本身的笛卡尔积,其 n 次(其中 n 是玩家数量)。这正是itertools.productrepeat关键字为您带来的收获。