如何设置一组变量中的2个的所有组合等于其他变量的条件

2024-10-02 12:26:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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相同的方法)我只想让程序识别一对。我对编码比较陌生,而且我是一个新手,所以任何帮助都将不胜感激:)


Tags: inindexifrandomsuitheartssuitsclubs
1条回答
网友
1楼 · 发布于 2024-10-02 12:26:58

首先,关于你的设置的一些注意事项:你选择随机卡片的方式是(a)繁琐的,和(b)不正确的。通过随机选择一套套装,然后从该套装中选择一张卡片,每套套装都有相同的被选中的机会(1/4),即使只有一套(或没有!)卡留在那套衣服里

相反,我建议你用和现实生活中一样的方法来做:把所有的牌放在一副牌里,shuffle那副牌,然后从那副洗过的牌中弹出牌

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

另外,您可以使用^{},而不是手动枚举所有卡片:

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

关于寻找成对(或三元组,或四元组):最简单的方法是使用^{}。但也要注意的是,其实并不需要像使用==一样使用相同的卡片!相反,如果价值相同就足够了,诉讼可以不同

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

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

示例:

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

相关问题 更多 >

    热门问题