Boa noite Gabriel, o operador not
inverte o valor da expressão, isso é, se a expressão tem o valor TRUE, o resultado final será FALSE, e se a expressão tem o valor FALSE o resultado final será TRUE.
Se você tentar ler a expressão levando em consideração esses conceitos vai chegar a conclusão de que a mensagem "Jogando" vai ser impressa enquanto você não tenha se enforcado, ou seja, enforcou = false e não tenha acertado, acertou = false. A partir do momento que você é "enforcado" ou acerta a palavra chave, o resultado da variável correspondente será alterado para verdadeiro.
Por exemplo, digamos que você está jogando, incialmente as váriaveis enforcou
e acertou
têm o valor false, isso quer dizer que a linha "Jogando" será escrita na tela pois o operador not inverte o valor de ambas a váriaveis, tornando-as true dentro da expressão. Na próxima jogada você acerta a palavra secreta, tornando o valor da váriavel acertou
como true, quando a expressão not enforcou and not acertou
for verificada vai acontecer aquela inversão que citei, então se trocarmos o nome das váriaveis por seus valores, a expressão final seria assim: not false and not true
, o trecho not false
(not enforcou) se torna true
e o trecho not true
(not acertou) se torna false, ao final ficamos com true and false
o que vai resultar em um false no final, por isso o código dentro do if não é executado, parando de imprimir o texto "Jogando".
Espero que tenha ajudado, se tiver mais dúvidas estou à disposição!