-2

Programmer friends, I need your help. I was trying to make a Uno using Python but to my despair, an error appeared that I don't know how to fix it.

"This code is unreachable:138"

I would be very grateful, if anyone can help me fix this.

Here is my code:

#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(1, 72)
    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(1, 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(1, len(cards) - 1)]))
        index_receber_cards_bot += 1

    print(bot_cards)





sua_jogada = ""
lance_valido = False
def Jogar():
    qtd_cards = 7
    while qtd_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]}")
            qtd_cards -= 1
            BotUno()
            continue
        else:
            print("Lance inválido, porfavor jogue novamente.")
            continue



def BotUno():
    lance_valido_bot = False
    index_receber_cards = 0
    qtd_cards_bot = 7
    lance_bot = []
    global bot_cards

    index_card_bot = 0
    while index_card_bot < len(bot_cards):
        lance_bot = bot_cards[index_card_bot]

        if lance_bot in bot_cards:
            if ultima_carta_jogada[0][0] == "+2" or ultima_carta_jogada[0][0] == "+4" or ultima_carta_jogada[0][0] == "Block" or ultima_carta_jogada[0][0] == "Reverse":
                if ultima_carta_jogada[0][0] == "+2" and lance_bot[0] == "+2" or lance_bot[0] == "+4":
                    lance_valido_bot = True
                elif ultima_carta_jogada[0][0] == "+4" and lance_bot[0] == "+2" or lance_bot[0] == "+4":
                    lance_valido_bot = True
                elif ultima_carta_jogada[0][0] == "Block" and lance_bot[0] == "Block":
                    lance_valido_bot = True
                elif ultima_carta_jogada[0][0] == "Reverse" and lance_bot[0] == "Reverse":
                    lance_valido_bot = True
                else:
                    lance_valido_bot = False
                    continue
                    index_card_bot += 1


            if ultima_carta_jogada[0][0] == lance_bot[0] or ultima_carta_jogada[0][1] == lance_bot[1]:
                lance_valido_bot = True
            else:
                lance_valido_bot = False
                continue
        else:
            continue


        if lance_valido_bot == True:
            bot_cards.remove(lance_bot)
            ultima_carta_jogada.pop()
            ultima_carta_jogada.append(lance_bot)
            print()
            print(f"Ultima carta Jogada: {ultima_carta_jogada[0][0]} {ultima_carta_jogada[0][1]}")
            qtd_cards_bot -= 1
        else:
            continue





Organizar_Cards()
Iniciar()
Jogar()

I tried to set the variable "index_card_bot" to global but it still didn't work

Akash Patra
  • 768
  • 1
  • 9
  • 20

1 Answers1

1

The IDE is just right you use continue in line 138 and a line after try increment a value. It won't happen EVER, cause the continue makes the code "go" to next iteration of the loop.

Side notes:

  • using globals is hardly ever a good idea, 9/10 cases it's bad actually

  • in general the code is written in English no matter what nationality you are

  • method and function names should be in snake case (in your code they start with capitals)

  • if your program is "one file" it should have a entry point defined if you will

     if name=="__main__":
         <functions execution are here>
    
Gameplay
  • 1,142
  • 1
  • 4
  • 16
  • @JaredSmith not really...I didn't say always, I said IN GENERAL, which translates to "most often" in my understanding at least, also for every multi national company (and again it's a majority of the market) that's the case – Gameplay Dec 09 '22 at 12:32