A variable in my while is not adding up

Asked

Viewed 93 times

3

I’m new to Python and I’m trying to make an old game I’ve tried in every way to fix this mistake and I can’t, so I ask for help from my consecrated people! My play function has a while that has to for when time is 9 (which in case gives old) or some player wins. Okay! but my while is in loop time is not counting more 1. Help me, please. Thanks in advance!

import os,time

matriz = []
def jogar(matriz):
    x = "X"
    vencedor = False
    vez = 0

    while (vencedor != True) or (vez <= 9):
        # Pedi para o usúario a escolha
        escolha = int(input("Digite um número para a sua jogada "+x+ ": "))

        #verificar se a escolha é de 1 a 9
        if (escolha > 0) and (escolha < 10):
            #Primeira Linha da matriz
            if (escolha > 0) and (escolha < 4):
                linha = 0
                #Verifica o campo já foi preenchido e insere na matriz
                if matriz[linha][escolha-1] == "X" or matriz[linha][escolha-1] == "O":
                    print("Esse número já está preenchido!")
                else:
                    matriz[linha][escolha-1] = x
                    vencedor = verificarVencedor()
                    vez = vez + 1

            #Segunda Linha da matriz.
            elif (escolha > 3) and (escolha < 7):
                linha = 1

                #Verifica o campo já foi preenchido e insere na matriz.
                if matriz[linha][escolha-4] == "X" or matriz[linha][escolha-4] == "O":
                    print("Esse número já está preenchido!")
                else:
                    matriz[linha][escolha-4] = x
                    vencedor = verificarVencedor()
                    vez = vez + 1

            #Terceira Linha da matriz.
            else:
                linha = 2

                #Verifica o campo já foi preenchido e insere na matriz.
                if matriz[linha][escolha-7] == "X" or matriz[linha][escolha-7] == "O":
                    print("Esse número já está preenchido!")
                else:
                    matriz[linha][escolha-7] = x
                    vencedor = verificarVencedor()
                    vez = vez + 1
            tabuleiro(matriz)
        else:
            print("Opção invalida!")

        # #Chama depois de 1 segundo o tabuleiro  
        # time.sleep(1)
        #os.system('cls' if os.name == 'nt' else 'clear')
        #return tabuleiro(matriz)
    else:
        print("Deu velha!")

def verificarVencedor():
   return False 
def preencherMatriz():
    matriz = []
    cont = 0
    for i in range(3):
        coluna = [0]*3
        matriz.append(coluna)

    for i in range(3):
        for j in range(3):
            cont = cont + 1
            matriz[i][j] = cont
    tabuleiro(matriz)
def tabuleiro(matriz):    
    print("+"*30)
    print(" "*7,"Jogo da velha")
    print("+"*30)
    tabuleiro = '''  
        |     |   
    {}  |  {}  |  {}
    _____|_____|_____
        |     |
    {}  |  {}  |  {}
    _____|_____|_____
        |     |
    {}  |  {}  |  {}
        |     |
            '''.format(matriz[0][0], matriz[0][1], matriz[0][2], matriz[1][0], matriz[1][1], matriz[1][2], matriz[2][0], matriz[2][1],matriz[2][2])
    print(tabuleiro)
    print("Jogador 1: X    Jogador 2: O")
    jogar(matriz)

preencherMatriz()

Code link in Repl.it

  • That’s the whole code ?

  • I’ll send you all the code ;)

  • 2

    I edited the question and put the whole code ;)

  • Check the alignment of your if, seem to me to be misaligned (may have just been a problem when pasting your code).

  • It was just a problem when I pasted the code, Sorry. I put the code in the Repl.it https://repl.it/@Beatrizcarlos/gameDavelhaThis

  • the error still continues :(

  • @Beatrizcarlos managed to solve ? What I could understand is that it adds up the +1 at a time but the time value is being reset every time you run the looping

Show 2 more comments

1 answer

1


I don’t know if it’s the best way to solve your problem but it’s the only way I can think:

import os,time

matriz = []
count_value = 0
def count(count = False):    
    global count_value 
    if count == True:
        count_value = count_value + 1    
        pass   
    return count_value

def jogar(matriz):
    x = "X"
    vencedor = False

    while (vencedor != True) and (count() < 9):
        # Pedi para o usúario a escolha
        escolha = int(input("Digite um número para a sua jogada "+x+ ": "))

        #verificar se a escolha é de 1 a 9
        if (escolha > 0) and (escolha < 10):
            #Primeira Linha da matriz
            if (escolha > 0) and (escolha < 4):
                linha = 0
                #Verifica o campo já foi preenchido e insere na matriz
                if matriz[linha][escolha-1] == "X" or matriz[linha][escolha-1] == "O":
                    print("Esse número já está preenchido!")
                else:
                    matriz[linha][escolha-1] = x
                    vencedor = verificarVencedor()     
                    count(True)               

            #Segunda Linha da matriz.
            elif (escolha > 3) and (escolha < 7):
                linha = 1

                #Verifica o campo já foi preenchido e insere na matriz.
                if matriz[linha][escolha-4] == "X" or matriz[linha][escolha-4] == "O":
                    print("Esse número já está preenchido!")
                else:
                    matriz[linha][escolha-4] = x
                    vencedor = verificarVencedor()   
                    count(True)                 

            #Terceira Linha da matriz.
            else:
                linha = 2

                #Verifica o campo já foi preenchido e insere na matriz.
                if matriz[linha][escolha-7] == "X" or matriz[linha][escolha-7] == "O":
                    print("Esse número já está preenchido!")
                else:
                    matriz[linha][escolha-7] = x
                    vencedor = verificarVencedor()  
                    count(True)                 
            tabuleiro(matriz)
        else:
            print("Opção invalida!")

        # #Chama depois de 1 segundo o tabuleiro  
        # time.sleep(1)
        #os.system('cls' if os.name == 'nt' else 'clear')
        #return tabuleiro(matriz)
    else:
        print("Deu velha!")

def verificarVencedor():
    return False 

def preencherMatriz():
    matriz = []
    cont = 0
    for i in range(3):
        coluna = [0]*3
        matriz.append(coluna)

    for i in range(3):
        for j in range(3):
            cont = cont + 1
            matriz[i][j] = cont
    tabuleiro(matriz)

def tabuleiro(matriz):    
    print("+"*30)
    print(" "*7,"Jogo da velha")
    print("+"*30)
    tabuleiro = '''  
         |     |   
      {}  |  {}  |  {}
    _____|_____|_____
         |     |
      {}  |  {}  |  {}
    _____|_____|_____
         |     |
      {}  |  {}  |  {}
         |     |
            '''.format(matriz[0][0], matriz[0][1], matriz[0][2], matriz[1][0], matriz[1][1], matriz[1][2], matriz[2][0], matriz[2][1],matriz[2][2])
    print(tabuleiro)
    print("Jogador 1: X    Jogador 2: O")
    jogar(matriz)

preencherMatriz()

I created a function just to count globally.

I also made some corrections in your logic where instead of or was meant to be and and the comparator of <= 9 should be < 9.

Test there and see if it works, so I understand your project is not yet finished.

  • It worked! Thank you! But there was a small mistake, when he left the while he print "Gave old" a few times. It has to help me to solve this problem?

  • @Beatrizcarlos I am now away from the PC, I should only arrive on a tomorrow but looking again at the code, I realized that the alignment of Else printing that information, is aligned with the while , I believe the hate would be to create an IF after the while to validate if he won and Else as it already is.

  • I managed to solve the problem, thank you so much for helping me!

Browser other questions tagged

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