Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Operador not em Python

Estou com uma dúvida em relação ao funcionamento do operador "not", quando fui ler a documentação do o que eu entendi foi que ele invertia o valor da variável em que ele fosse aplicado, ou seja. Se eu eu tenho uma variável False, ao aplicar o modificador not ela passaria a ser True (correto?)

o que me deixou na duvida é que definimos, no curso, a variável enforcou e acertou como False e depois vamos fazer a comparação e dizemos

    while(not enforcou and not acertou):

ao meu entender ao colocar na comparação 'not enforcou' eu estaria invertendo o valor dessa variável para True. Vejo que não é o caso, estamos dizendo enquanto enforcou e acertou forem Falso continuamos no laço. Minha questão é: eu entendi errado como o not funciona? ele não inverte o valor, mas sim sempre retorna falso?

 enforcou = False
    acertou = False
    erros = 0
    tentativas = 7

    print(letras_acertadas)

    #enquanto ainda não enforcou e ainda não acertou
    while(not enforcou and not acertou):

        desenha_forca(erros)

        chute = pede_chute()
2 respostas
solução!

Olá José, tudo bem?

Eu acredito que você entendeu corretamente a função do not - ele inverte o valor de um booleano; mas rolou uma pequena confusão no uso do while ali.

O loop while só funciona quando a condição dele for True, correto? Se a condição do while for False, ele quebra e para o loop.

O que está acontecendo no código é o seguinte: o jogo só continua se não enforcou e se não acertou, ok? Então a condição não enforcou tem que ser igual a True e a condição não acertou também tem que ser igual a True, para fazer com que o loop fique while(True and True).

Por isso ambas as variáveis são instanciadas com o valor de False, fazendo com que o método fique while(not False and not False) - que é a mesma coisa que while(True and True).

Realmente isso causa uma certa confusão, mas espero ter ajudado um pouco haha.

Olá José,

A resposta do Gabriel está bem completa, mas só para completar, o not não vai modificar a variável, mas sim o valor retornado.

Exemplo 1:

enforcou = False

print(not enforcou)
print(enforcou)

Exemplo 2:

enforcou = False
enforcou2 = not enforcou

print(enforcou)
print(enforcou2)