我是Python新手并试图编写一款简单的扑克游戏。如果我有五张卡,a
,b
,c
,d
,e
,并想检查其中是否有任何一张(是一对),那么我想我可以写一行如下:
if a==b or b==c or a==c or ... # ad nauseam
但我认为有一种工具可以有效地提问
如果
(a,b,c,d,e)
中的任何一个匹配,那么......
但是我不知道如何写它。
答案 0 :(得分:1)
您可以使用itertools.combinations
获取手中的所有卡片对。使用一个简单的例子:
>>> from itertools import combinations
>>> cards = (1, 2, 3, 4, 1)
>>> list(combinations(cards, 2))
[(1, 2), (1, 3), (1, 4), (1, 1), (2, 3), (2, 4), (2, 1), (3, 4), (3, 1), (4, 1)]
然后您可以使用any
查看这些对中的任何一对是否相互匹配:
>>> any(card1 == card2 for card1, card2 in combinations(cards, 2))
True
你应该能够相对容易地适应你的表现形式;例如,如果您有Card
个对象,则会调用Card.__eq__(card1, card2)
。
请注意,我使用了五个“cards”的序列(元组或列表也可用),而不是五个单独的标识符(a
,{{1}等等);这使代码更具可读性和灵活性(手的大小现在无关紧要,因此您可以轻松地将seven-card stud添加到您的扑克游戏中。
答案 1 :(得分:1)
使用生成器表达式传递到any
内置函数:
if any(cards.count(i) >= 2 for i in cards): # cards is the tuple of number
答案 2 :(得分:0)
我使用set
不包含多个相同元素的事实,例如:
a=[1,1,2,2,3,3]
b=set(a)
print (b) # {1, 2, 3}
print len(a) == len(b) # False