Python开发UNO游戏遇This code is unreachable:138错误求修复
修复UNO游戏中的"This code is unreachable"错误
错误核心原因
提示的不可达代码位于第138行:index_card_bot += 1,它被写在continue语句之后。continue会直接跳转到while循环的下一次迭代,导致这行代码永远无法被执行。
分步修复方案
1. 修复不可达代码逻辑
调整BotUno函数中的循环结构,将索引递增操作移到不会被continue跳过的位置,同时优化出牌有效性判断逻辑:
def BotUno(): lance_valido_bot = False global bot_cards index_card_bot = 0 while index_card_bot < len(bot_cards): lance_bot = bot_cards[index_card_bot] lance_valido_bot = False # 处理特殊牌的响应规则 if ultima_carta_jogada[0][0] in ["+2", "+4", "Block", "Reverse"]: if (ultima_carta_jogada[0][0] == "+2" and lance_bot[0] in ["+2", "+4"]) or \ (ultima_carta_jogada[0][0] == "+4" and lance_bot[0] in ["+2", "+4"]) or \ (ultima_carta_jogada[0][0] == "Block" and lance_bot[0] == "Block") or \ (ultima_carta_jogada[0][0] == "Reverse" and lance_bot[0] == "Reverse"): lance_valido_bot = True else: index_card_bot += 1 continue # 处理数字/颜色匹配规则 elif ultima_carta_jogada[0][0] == lance_bot[0] or ultima_carta_jogada[0][1] == lance_bot[1]: lance_valido_bot = True else: index_card_bot += 1 continue # 执行有效出牌操作 if lance_valido_bot: bot_cards.remove(lance_bot) ultima_carta_jogada.pop() ultima_carta_jogada.append(lance_bot) print(f"\nUltima carta Jogada: {ultima_carta_jogada[0][0]} {ultima_carta_jogada[0][1]}") break # Bot出一张牌后结束回合,符合UNO规则 index_card_bot += 1
2. 修复其他潜在逻辑问题
- 全局变量声明缺失:
Jogar函数中修改全局变量sua_jogada和lance_valido时,需要添加全局声明,否则会创建局部变量导致逻辑错误:def Jogar(): global sua_jogada, lance_valido qtd_cards = 7 # 后续代码保持不变 - 随机数索引越界:
Iniciar函数中random.randint(1, len(cards)-1)会在cards长度为1时报错,改为从0开始的索引范围:your_cards.append(list(cards[random.randint(0, len(cards) - 1)])) bot_cards.append(list(cards[random.randint(0, len(cards) - 1)])) - 手牌数量跟踪错误:
qtd_cards和qtd_cards_bot是固定值,改为用len(your_cards)和len(bot_cards)实时获取手牌数量,比如Jogar函数的循环条件改为:while len(your_cards) > 0:
完整修复后的代码
#UNO! import random cards = [] cards_number = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] cards_special = ["+2", "+4", "Block", "Reverse"] cards_color = ["Azul", "Verde", "Vermelho", "Amarelo"] your_cards = [] bot_cards = [] ultima_carta_jogada = [] def Organizar_Cards(): print() print("UNO!") for index_organizar_cards_number in cards_number: for index_organizar_cards_colors in cards_color: juncao_number_with_color = index_organizar_cards_number, index_organizar_cards_colors cards.append(juncao_number_with_color) cards.append(juncao_number_with_color) for index_organizar_cards_special in cards_special: for index_organizar_cards_colors in cards_color: juncao_special_with_color = index_organizar_cards_special, index_organizar_cards_colors cards.append(juncao_special_with_color) cards.append(juncao_special_with_color) index = 0 while index < len(cards): print(f"{cards[index][0]} {cards[index][1]}") index += 1 def Iniciar(): iniciar_aleatorio = random.randint(0, len(cards)-1) ultima_carta_jogada.append(cards[iniciar_aleatorio]) cards.remove(ultima_carta_jogada[0]) print() print(f"Iniciou: {ultima_carta_jogada[0][0]} {ultima_carta_jogada[0][1]}") #Receber Cartas Jogador: index_receber_cards_player = 0 while index_receber_cards_player < 7: your_cards.append(list(cards[random.randint(0, len(cards) - 1)])) index_receber_cards_player += 1 #Receber Cartas Bot: index_receber_cards_bot = 0 while index_receber_cards_bot < 7: bot_cards.append(list(cards[random.randint(0, len(cards) - 1)])) index_receber_cards_bot += 1 print(bot_cards) sua_jogada = "" lance_valido = False def Jogar(): global sua_jogada, lance_valido while len(your_cards) > 0: print() print("Suas cartas:") index_receber_cards = 0 while index_receber_cards < len(your_cards): print(f"{your_cards[index_receber_cards][0]} {your_cards[index_receber_cards][1]}") index_receber_cards += 1 print() sua_jogada = input("Qual carta você vai jogar? ").split() #Verificador de Lance Válido: if sua_jogada not in your_cards: print("Você não possui esta carta, porfavor jogue novamente.") continue elif ultima_carta_jogada[0][0] == "+2" or ultima_carta_jogada[0][0] == "+4" and sua_jogada[0] == "+2" or sua_jogada[0] == "+4": lance_valido = True elif ultima_carta_jogada[0][0] == "Block" and sua_jogada[0] == "Block": lance_valido = True elif ultima_carta_jogada[0][0] == "Reverse" and sua_jogada[0] == "Reverse": lance_valido = True elif ultima_carta_jogada[0][0] == sua_jogada[0] or ultima_carta_jogada[0][1] == sua_jogada[1]: lance_valido = True else: lance_valido = False if lance_valido == True: your_cards.remove(sua_jogada) ultima_carta_jogada.pop() ultima_carta_jogada.append(sua_jogada) print() print(f"Ultima carta Jogada: {ultima_carta_jogada[0][0]} {ultima_carta_jogada[0][1]}") BotUno() continue else: print("Lance inválido, porfavor jogue novamente.") continue def BotUno(): lance_valido_bot = False global bot_cards index_card_bot = 0 while index_card_bot < len(bot_cards): lance_bot = bot_cards[index_card_bot] lance_valido_bot = False if ultima_carta_jogada[0][0] in ["+2", "+4", "Block", "Reverse"]: if (ultima_carta_jogada[0][0] == "+2" and lance_bot[0] in ["+2", "+4"]) or \ (ultima_carta_jogada[0][0] == "+4" and lance_bot[0] in ["+2", "+4"]) or \ (ultima_carta_jogada[0][0] == "Block" and lance_bot[0] == "Block") or \ (ultima_carta_jogada[0][0] == "Reverse" and lance_bot[0] == "Reverse"): lance_valido_bot = True else: index_card_bot += 1 continue elif ultima_carta_jogada[0][0] == lance_bot[0] or ultima_carta_jogada[0][1] == lance_bot[1]: lance_valido_bot = True else: index_card_bot += 1 continue if lance_valido_bot: bot_cards.remove(lance_bot) ultima_carta_jogada.pop() ultima_carta_jogada.append(lance_bot) print(f"\nUltima carta Jogada: {ultima_carta_jogada[0][0]} {ultima_carta_jogada[0][1]}") break index_card_bot += 1 Organizar_Cards() Iniciar() Jogar()
内容的提问来源于stack exchange,提问作者54Geovane54
相关产品推荐
相关产品推荐

