2016-07-10 93 views
2

我正在编写扑克模拟。我已经准备好了一些零件。 但我坚持把我的手与牌桌上的牌比较。 我的想法是获得我的2张牌,并从甲板上拿3张随机牌,看看是否有冲洗或什么。但当然,我必须循环,所以我将所有组合与我的手和甲板。通过3个组合中的5个组合循环

如果这些是来自甲板的5张牌,而1代表我将拿下并与之比较的牌位。这些都是我必须将我的牌与甲板进行比较的所有组合。

00111 
01011 
01101 
01110 
10011 
10101 
10110 
11001 
11010 
11100 

我怎么能通过这个循环?表卡只是一个对象数组。

+2

这些卡只是'0'和'1'?这听起来不像扑克。 – Psidom

+0

不,0或1是直观地告诉那些我将比较的牌位。 – Sharpless512

+0

所以你需要5个职位中的3个的所有组合? – Psidom

回答

4

你所代表的输出是混乱的,但既然你想从一组5张牌中选择3张卡,你需要5C3的方式。您可以使用itertools.combinations来实现此目的。

doc: -

itertools.combinations(可迭代,R)

从输入可迭代元件的返回ř长度子序列。

组合按字典顺序排列。所以,如果输入 可迭代排序,组合元组将按排序的 顺序生成。

根据元素的位置而不是它们的 值将元素视为唯一。因此,如果输入元素是唯一的,那么在每个组合中将不会重复输入值。

进口itertools

a = [0,1,2,3,4] 

print [p for p in itertools.combinations(a, 3)] 

输出:

[(0, 1, 2), (0, 1, 3), (0, 1, 4), (0, 2, 3), (0, 2, 4), (0, 3, 4),(1,2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)]

3

可能尝试从combinationsitertools

[c for c in itertools.combinations(range(5), 3)] 

[(0, 1, 2), 
(0, 1, 3), 
(0, 1, 4), 
(0, 2, 3), 
(0, 2, 4), 
(0, 3, 4), 
(1, 2, 3), 
(1, 2, 4), 
(1, 3, 4), 
(2, 3, 4)]