如何检查数组是否包含多个特定元素

How to check if an array contains multiple specific elements

我正在编写一个函数,可以 return 判断一手牌是否有皇家同花顺。我尝试了各种不同的方法,但 none 似乎有效;有些方法 return 总是错误的,有些 return 总是正确的。

下面是一个总是 return 正确的方法

davesCards = ['10C','10S','QC','KC','AC','10S','4C'] #this should return false

def royalFlushCheck(playerCards):
    if '10S' and 'JS' and 'QS' and 'KS' and 'AS' in playerCards:
        return True
    if '10H' and 'JH' and 'QH' and 'KH' and 'AH' in playerCards:
        return True
    if '10C' and 'JC' and 'QC' and 'KC' and 'AC' in playerCards:
        return True
    if '10D' and 'JD' and 'QD' and 'KD' and 'AD' in playerCards:
        return True
    return False

royalFlushCheck(davesCards)

这个 returns True 应该是假的,因为没有梅花卡。我假设 and 运算符会做到这一点,因此如果所有卡片都在数组中,则函数只会 returned True 。我对这些东西比较陌生,所以希望能有初学者的解释

(编辑) 我已被标记为重复,但我之前已经看过引用的问题,但没有从中得到我想要的答案,这就是为什么我根据我的具体情况发布了这个问题。

您的代码只检查 'AS' 或 'AH' 或 'AC'、'AD' 是否在列表中。 更优雅的方法是使用子集。

if set(royalFlush).issubset(set(davesCards)):
    return True

其中 royalFlush = ['AS','JS','QS','KS','10S']

或者按照评论中的建议:

return set(royalFlush).issubset(davesCards)

你可以通过分离等级和花色来缩短它

def royalFlushCheck(playerCards):
    suits = [card[-1] for card in playerCards]
    ranks = [card[:-1] for card in playerCards]
    allRanks = all([rank in ranks for rank in ['10', 'J', 'Q', 'K', 'A']])
    sameSuit = len(set(suits)) == 1
    return allRanks and sameSuit