Why can’t the played method_chooses and the computer_chooses can’t access the positions [0][0],[1][0] and [2][0]?

Asked

Viewed 35 times

0

import random

class Mapa:
    def __init__(self):
        self.mapa = [["_ ","_ ","_ "],["_ ","_ ","_ "],["_ ","_ ","_ "]]
        self.livres = 9

    def imprime_mapa(self):
        for i in range(len(self.mapa)):
            for j in range(len(self.mapa[0])):
                print(self.mapa[i][j],end=" ")
            print()

    def jogador_escolhe(self,L):
        print("Sua vez... ")
        l = int(input("Escolha a linha: ")) - 1
        c = int(input("Escolha a coluna: ")) - 1
        print("l =",l,"e c = ",c)
        while l < 0 or l > 2 or c < 1 or c > 2 or self.mapa[l][c] != "_ ":
            print("Escolha uma posição válida... ")
            l = int(input("Escolha a linha: ")) - 1
            c = int(input("Escolha a coluna: ")) - 1
            print("l =",l,"e c = ",c)
        self.mapa[l][c] = "x "
        L = L -1
        if L == 0 or self.checar_se_ganhou():
            self.imprime_mapa()
            self.fim_de_jogo()
        else:
            self.imprime_mapa()
            self.computador_escolhe(L)
        

    def computador_escolhe(self,L):
        print("É a vez do computador...")
        l = random.randrange(3)
        c = random.randrange(3)
        print("l =",l,"e c = ",c)
        while l < 0 or l > 2 or c < 1 or c > 2 or self.mapa[l][c] != "_ ":
            l = random.randrange(3)
            c = random.randrange(3)
            print("l =",l,"e c = ",c)
        self.mapa[l][c] = "0 "
        L = L - 1
        if L == 0 or self.checar_se_ganhou():
            self.imprime_mapa()
            self.fim_de_jogo()
        else:
            self.imprime_mapa()
            self.jogador_escolhe(L)

    def fim_de_jogo(self):
        print("Fim de jogo.")

    def checar_se_ganhou(self):
        #status = False
        if [self.mapa[0][0] , self.mapa[0][1], self.mapa[0][2]] == ["x ","x ","x "]:
            print("Você ganhou!")
            return True
        elif [self.mapa[0][0] , self.mapa[0][1], self.mapa[0][2]] == ["0 ","0 ","0 "]:
            print("O Computador ganhou!")
            return True
        elif [self.mapa[1][0] , self.mapa[1][1], self.mapa[1][2]] == ["x ","x ","x "]:
            print("Você ganhou!")
            return True
        elif [self.mapa[1][0] , self.mapa[1][1], self.mapa[1][2]] == ["0 ","0 ","0 "]:
            print("O Computador ganhou!")
            return True
        elif [self.mapa[2][0] , self.mapa[2][1], self.mapa[2][2]] == ["x ","x ","x "]:
            print("Você ganhou!")
            return True
        elif [self.mapa[2][0] , self.mapa[2][1], self.mapa[2][2]] == ["0 ","0 ","0 "]:
            print("O Computador ganhou!")
            return True
        elif [self.mapa[0][0] , self.mapa[1][0], self.mapa[2][0]] == ["x ","x ","x "]:
            print("Você ganhou!")
            return True
        elif [self.mapa[0][0] , self.mapa[1][0], self.mapa[2][0]] == ["0 ","0 ","0 "]:
            print("O Computador ganhou!")
            return True
        elif [self.mapa[0][1] , self.mapa[1][1], self.mapa[2][1]] == ["x ","x ","x "]:
            print("Você ganhou!")
            return True
        elif [self.mapa[0][1] , self.mapa[1][1], self.mapa[2][1]] == ["0 ","0 ","0 "]:
            print("O Computador ganhou!")
            return True
        elif [self.mapa[0][2] , self.mapa[1][2], self.mapa[2][2]] == ["x ","x ","x "]:
            print("Você ganhou!")
            return True
        elif [self.mapa[0][2] , self.mapa[1][2], self.mapa[2][2]] == ["0 ","0 ","0 "]:
            print("O Computador ganhou!")
            return True
        elif [self.mapa[0][0] , self.mapa[1][1], self.mapa[2][2]] == ["x ","x ","x "]:
            print("Você ganhou!")
            return True
        elif [self.mapa[0][0] , self.mapa[1][1], self.mapa[2][2]] == ["0 ","0 ","0 "]:
            print("O Computador ganhou!")
            return True
        elif [self.mapa[0][2] , self.mapa[1][1], self.mapa[2][0]] == ["x ","x ","x "]:
            print("Você ganhou!")
            return True
        elif [self.mapa[0][2] , self.mapa[1][1], self.mapa[2][0]] == ["0 ","0 ","0 "]:
            print("O Computador ganhou!")
            return True
        else:
            return False


jogo = Mapa()
print("Bem vindo ao Jogo da velha!")
print("Vamos sortear quem começa....")
jogo.imprime_mapa()
if random.randrange(0,2) == 0:
    print("Você  começa!")
    jogo.jogador_escolhe(9)
else:
    print("Computador começa!")
    jogo.computador_escolhe(9)
  • detail the problem better. occurs an error or just does not do something you expected? if it is an error, what error message? and in what part of the code? I think you put too much information in the question title but lacked explanation in the body of the question.

  • The other day I was insomnia and I did in python one tic-tac-toe (complete). Maybe it’ll help him. Testing on the COLAB

  • when trying to select the positions cited in the title it simply does not accept and prompts new choice. No error message.

1 answer

0

The problem is in the validation of column 0. Every time you select it, your code will keep asking the user to report the position again.

Note that on line 19, you have the comparison c < 1 that should be c < 0.

while l < 0 or l > 2 or c < 1 or c > 2 or self.mapa[l][c] != "_ ":

I suggest using the same code for lines 19 and 39:

while (l < 0 or l > 2) or (c < 0 or c > 2) or self.mapa[l][c] != "_ ":

or you can do a little more pythonic, using the between operator:

while not ((0 <= l <= 2) and (0 <= c <= 2) and self.mapa[l][c] == "_ "):

Browser other questions tagged

You are not signed in. Login or sign up in order to post.