我正在编写一个函数,可以返回一手牌是否有皇家同花顺。我尝试了各种不同的方法,但似乎都没有用;有些方法总是返回false,有些返回总是为true。
以下是始终返回true的方法
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)
如果没有Jack of Clubs卡,则返回True
。我假设and
运算符会使它如此函数只返回True,如果所有卡都在数组中。我对这些事情比较陌生,所以会很感激初学者的解释
(编辑) 我已被标记为重复,但我之前已经看过引用的问题,但没有得到我想要的答案,这就是为什么我在特定情况下发布了这个问题。
答案 0 :(得分:2)
您的代码只检查“AS”或“AH”或“AC”,“AD”是否在列表中。 更优雅的方式是使用子集。
if set(royalFlush).issubset(set(davesCards)):
return True
其中royalFlush = ['AS','JS','QS','KS','10S']
或者如评论中所建议的那样:
return set(royalFlush).issubset(davesCards)
答案 1 :(得分:0)
你可以通过分离排名和适合
来缩短这个时间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