Python扑克配对检测函数报错:list indices需为整数/切片而非元组
扑克牌对子检测函数修复方案
错误原因
你的for循环逻辑有误:for i in cards 遍历的是cards中的每个元组元素(比如(1, 'd')),而非索引值。用元组作为列表索引会触发TypeError,因为列表仅接受整数或切片作为索引。另外代码中未初始化ranks列表,运行时还会触发NameError。
修正后的代码
def check_pair(cards): ranks = [] # 初始化空列表存储牌面 for card in cards: ranks.append(card[0]) # 直接取每个元组的第一个元素(牌面) # 统计每个牌面的出现次数 rank_counts = {k: ranks.count(k) for k in ranks} # 过滤出出现次数>=2的对子,返回更直观的结果 pairs = {rank: count for rank, count in rank_counts.items() if count >= 2} return pairs community_cards = [(1, 'd'), (2, 'h'), (1, 'h')] print(f'Checking pair: {check_pair(community_cards)}')
代码优化(更简洁的写法)
可以用列表推导式直接生成ranks,减少代码行数:
def check_pair(cards): ranks = [card[0] for card in cards] rank_counts = {k: ranks.count(k) for k in ranks} pairs = {rank: count for rank, count in rank_counts.items() if count >= 2} return pairs
运行结果:
Checking pair: {1: 2}
内容的提问来源于stack exchange,提问作者João Schultz
相关产品推荐
相关产品推荐

