Python Blackjack游戏触发IndexError: list index out of range错误求助
问题分析与解决
你的代码触发IndexError的原因是**Deck.deal()方法只返回了一张牌**,导致hand.cards列表仅有一个元素,无法通过索引1访问第二张牌。
错误根源
在Deck类的deal方法中,return cards_dealt语句被放在了for循环内部,这意味着循环仅执行一次(处理第一张牌)就直接返回结果,不会继续处理第二张牌:
def deal(self, number): cards_dealt = [] for x in range(number): if len(self.cards) > 0: card = self.cards.pop() cards_dealt.append(card) return cards_dealt # 循环内返回,仅能拿到第一张牌
修正后的代码
将return语句移到for循环外部,确保循环能完整执行number次:
import random class Card: def __init__(self, suit, rank): self.suit = suit self.rank = rank def __str__(self): return f"{self.rank['rank']} of {self.suit}" class Deck: def __init__(self): self.cards = [] suits = ["spades", "clubs", "hearts", "diamonds"] ranks = [ {"rank": "A", "value": 11}, {"rank": "2", "value": 2}, {"rank": "3", "value": 3}, {"rank": "4", "value": 4}, {"rank": "5", "value": 5}, {"rank": "6", "value": 6}, {"rank": "7", "value": 7}, {"rank": "8", "value": 8}, {"rank": "9", "value": 9}, {"rank": "10", "value": 10}, {"rank": "J", "value": 10}, {"rank": "Q", "value": 10}, {"rank": "K", "value": 10}, ] for suit in suits: for rank in ranks: self.cards.append(Card(suit, rank)) def shuffle(self): if len(self.cards) > 1: random.shuffle(self.cards) def deal(self, number): cards_dealt = [] for x in range(number): if len(self.cards) > 0: card = self.cards.pop() cards_dealt.append(card) return cards_dealt # 移到循环外部,确保返回指定数量的牌 class Hand: def __init__(self, dealer = False): self.cards = [] self.value = 0 self.dealer = dealer def add_card(self, card_list): self.cards.extend(card_list) deck = Deck() deck.shuffle() hand = Hand() hand.add_card(deck.deal(2)) print(hand.cards[1])
额外建议
为避免类似索引错误,建议在访问列表元素前先检查长度:
if len(hand.cards) >= 2: print(hand.cards[1]) else: print("手牌不足两张")
内容的提问来源于stack exchange,提问作者Cee Zee
相关产品推荐
相关产品推荐

