如何检查数组是否包含多个特定元素
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
我正在编写一个函数,可以 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