Expressões lógicas

Teoria Completa

Revisão dos operadores lógicos

Fala aí! A gente trocou uma ideia maneira sobre expressões relacionais no tópico de dados booleanos, e falamos sobre os operadores comparativos e seus resultados. Tu lembra?! Bora revisar! Olha esses exemplos aqui:

O resultado da expressão é True caso seja verdade, ou False, se não for. Mas nem sempre a gente quer o resultado de uma só expressão, queremos fazer operações que relacionam um ou mais valores booleanos. As operações com valores Booleanos (álgebra booleana) requerem um pouco de lógica, que a gente vai aprender aqui! Mas antes, vou te apresentar os personagens da aula.

Os nomes dos personagens são, respectivamente, Sasuke, Naruto e Sakura. Vamos usar esses nomes nos próximos exemplo, ok?! :)

Operador “and”

O operador “and” significa “e” mesmo, exatamente como nas linguagens humanas. Esse operador diz quando dois valores booleanos são verdadeiros. Mas calma, eu vou te explicar a lógica.

Imagina que o Naruto e o Sasuke estão de boas na aula de Cálculo Ninja IV, e você é o professor!

Aí eu pergunto pra você o seguinte: “cara, o Naruto e o Sasuke estão na aula?”

Sua resposta seria “sim”, certo? Isso porque os dois estão na aula. Mas se o Naruto for no banheiro por um instante e a Sakura tomar o lugar do Naruto, a resposta seria diferente.

Nesse caso, eu te pergunto de novo. O Naruto e o Sasuke estão na aula?! A resposta é “não”. Apenas o Sasuke está, mas o Naruto não, certo?! Pra que a resposta dessa pergunta seja sim, as duas proposições devem ser verdade.

Essa tabelinha se chama tabela verdade, e ela relaciona todos os possíveis valores das variáveis e suas o resultado da expressão. É exatamente assim que o operador “and” funciona, e vou te mostrar como usar esse operador em Python. VEM COMIGO PRO EDITOR!

Operador “or”

Além do “and” tem o operador “or”, que também tem o mesmo significado da linguagem humana, “ou”. Vamos voltar pra sala de aula de cálculo ninja?!

O Naruto ou a Sakura estão na sala?! A resposta é “sim”! Apesar do Naruto não estar presente, a Sakura tá lá! O operador “or” só precisa que UMA das condições seja verdadeira.

O operador “or” pode ser usado em Python da seguinte forma:

Operador “not”

De todos, esse é o mais simples. O operador “not” nega a condição que foi dada, invertendo a resposta final. Ficou confuso?! Beleza! Partiu sala de aula!

É verdade que o Naruto não está na aula?! A resposta é “não”. O Naruto está sim na aula! O uso do “não” na pergunta fez com que a gente tivesse que inverter a resposta também!

Diferente dos outros operadores relacionais que a gente viu até agora, o “not” é unário. Ser unário significa que só precisa de uma proposição pra funcionar.

Os outros operadores que vimos eram binários, pois precisavam de duas proposições. Vou te mostrar como se usa esse operador aqui em baixo:

Combinando operadores lógicos

Assim como na matemática a gente pode usar vários operadores na mesma expressão, aqui a gente também pode!

É verdade que a (Sakura e o Sasuke) ou o Naruto não estão na sala de aula?! Repara que eu usei parênteses () ali pra enfatizar a precedência. Com o uso de parênteses você pode dizer qual condição você quer que seja verificada primeiro, beleza?!

A tabela verdade da seguinte pergunta tá aqui:

Nessa tabela eu to usando “T” e “F” em vez de “sim” e “não”. Mas a ideia é a mesma, é mais pra você já ir acostumando com os termos em inglês. Assim, essa tabela mostra o resultado final da expressão de acordo com as combinações nos valores das variáveis Naruto, Sakura e Sasuke. Repara que as operações foram feitas uma de cada vez, desde o parênteses mais interno até o mais externo. No fim, chegamos a um valor lógico pra expressão. Em Python, um dos casos:

Mas é claro, onde a gente colocou True e False nas variáveis, podíamos ter feito com expressões relacionais. Essas expressões resultam em valores booleanos, e aí a gente ia conseguir fazer as operações lógicas.

Por enquanto é isso, okay?! Valeuuuu!

Expandir

Exercício Resolvido #1

Codesdope - adaptado

Sem usar o interpretador, determine o resultado das seguintes expressões:

  • not(True and True)
  • True or False
  • not(False and True)
  • False and False
MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Fala aí, doido! Estou BOLADO porque a gente não pode usar o interpretador pra resolver essa questão.

Mas, ok. Bora começar analisando a primeira expressão:

Cara, não se esqueça que os parênteses sempre tem a mais alta precedência. Então, a gente precisa resolver o que tem dentro dos parênteses primeiro. E o operador que a gente vai ter que resolver é o “and”. Esse operador checa se os dois lados do operador são True, exatamente como tá ali. Nesse caso, o resultado é True também. Mas olha aqui uma tabela ilustrando outras situações com esse operador:

Nosso caso era o “Sim e Sim” (ou “True and True”), e, nesse caso, o resultado é “Sim” (ou “True”). Então, agora nossa expressão virou essa:

E agora a gente deu de cara com o operador not. Esse operador simplesmente inverte o valor verdade que tem em seguida. Ou seja, True vira False e False vira True. Nesse caso, o resultado final da expressão é False.

Bora dar uma olhada na segunda expressão do enunciado!

Passo 2

Agora, meu rei, a expressão é essa:

E o operador “ou” (or) retorna um resultado verdadeiro quando PELO MENOS um dos elementos é True. Nesse caso, o da esquerda é True. Por isso, o resultado da expressão vai ser True também.

Mas eu também vou deixar aqui a tabelinha pra você recordar do resultado das outras situações com esse operador:

Pronto! Falta só mais duas… Tamo indo bem! Vem comigo...

Passo 3

A próxima expressão é a seguinte:

Mano, esse é bem parecida com a primeira, po! Primeiro a gente resolve o que tá dentro do parênteses seguindo a regrinha do operador and: só é verdadeiro quando ambos são. Nesse caso, como tem um False e um True, o resultado é False!

E mais uma vez a gente caiu no operador de negação. Mas ele é o mais fácil de todos, lembra?! A gente só precisa inverter o valor verdade que vem em seguida.

E esse é o resultado da expressão! Só falta uma agora, hein...

Passo 4

A última expressão lógica é a seguinte:

Mais uma vez com o operador and. Acabamos de conversar sobre a regra desse operador, hein! Só retorna verdadeiro quando ambos valores verdade são True. Se tiver PELO MENOS um False, o resultado é False. Assim como nesse caso:

E assim a gente termina o exercício! Te vejo no próximo, hein, doido! BORAA

Resposta

Exercício Resolvido #2

Elaboração Própria

Escreva um programa para caixas de cinema. Seu programa deve receber a idade do usuário e se este é estudante. Com esses dados, exiba o preço do ingresso conforme a seguinte tabela:

  • Estudante ou idoso (acima de 65 anos) pagam R$15,00.
  • Preço normal: R$30,00.
MOSTRAR SOLUÇÃO COMPLETA

Passo 1

E aí, doido! A gente precisa perguntar pro cara a idade e se ele é estudante ou não. Então, bora já lançar nossas funções input() pra pegar esses dados.

Agora, com esses dados, vamos verificar se o cara vai pagar só meia entrada ou inteira. Pra pagar meia, o cara precisa ser estudante ou ter acima de 65 anos. Vamos fazer essas verificações dentro de uma estrutura condicional.