繁体   English   中英

如何为两个相等的集合变量的所有组合设置条件

[英]how to put a condition for all combinations of 2 of a set variables equaling each other

spades = ['2S','3S','4S','5S','6S','7S','8S','9S','10S','JS','QS','KS','AS']
hearts = ['2H','3H','4H','5H','6H','7H','8H','9H','10H','JH','QH','KH','AH']
clubs = ['2C','3C','4C','5C','6C','7C','8C','9C','10C','JC','QC','KC','AC']
diamonds = ['2D','3D','4D','5D','6D','7D','8D','9D','10D','JD','QD','KD','AD']

suits = [spades,hearts,clubs,diamonds]


randomD = int(random.random()*4)
random4 = int(random.random()*(len(suits[randomD])-1))
CPcard1 = suits[randomD][random4]
del suits[randomD][random4]

for suit in suits:
    if CPcard1 in suit:
        CPcard1i = suit.index(CPcard1)
    if CPcard2 in suit:
        CPcard2i = suit.index(CPcard2)
    if card1 in suit:
        card1i = suit.index(card1)
    if card2 in suit:
        card2i = suit.index(card2)
    if card3 in suit:
        card3i = suit.index(card3)

我想为其中两个变量何时相同而不做一个条件...

if CPcard1 == CPcard2 or CPcard1 == card1 or CPcard1  == card2 (etc)

这是我正在制作的扑克模拟游戏的一部分。(注意:CPcard1和CPcard2属于第一个玩家,纸牌1,2和3属于表。所有纸牌都使用与上述CPcard1相同的方法找到)我只想使程序识别一对。 我是编码的新手,而且是菜鸟,所以对您的帮助非常感激:)

首先,关于设置的一些注意事项:选择随机卡的方式(a)麻烦,并且(b)不正确。 通过随机选择一个西装,然后从该西装中选择一张牌,即使该西装中只剩下一张(或没有!)牌,每套西装也有相同的被选择机会(1/4)。

相反,我建议按照与现实生活中相同的方式进行操作:将所有纸牌放在一个纸牌中,对纸牌进行洗牌 ,然后从洗过的纸牌中取出纸牌。

all_cards = spades + hearts + clubs + diamonds
random.shuffle(all_cards)
hand = [all_cards.pop() for _ in range(5)]

另外,您可以使用itertools.product来代替手动枚举所有卡:

values = list('23456789') + ['10'] + list('JQKA')
suits = list('SHCD')
all_cards = [''.join(pair) for pair in itertools.product(suits, values)]

关于查找对(或三元组或四元组):最简单的方法是使用collections.Counter 但也请注意,您实际上不需要像==那样将卡片相同。 相反,如果值相同就足够,西装也可以不同。

import collections
counts = collections.Counter([card[:-1] for card in hand])

在这里, card[:-1]将获得从卡的字符串值,如'10' ,从'10S' 然后,您可以使用counts.most_common获得最常见的counts.most_common对(或三元组等)(如果有)。

例:

>>> hand
['3C', '6S', 'KC', 'JH', 'KH']
>>> counts
Counter({'K': 2, '3': 1, 'J': 1, '6': 1})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM