Booleans

Teoria Completa

Trabalhando com valores verdade

Se liga, às vezes, no nosso programa, a gente não quer guardar números ou textos em variáveis. A gente só quer saber “sim” ou “não”. Na verdade, nas nossas vidas cotidianas, nós usamos muito respostas binárias (de sim ou não), né?!

Então... Por isso hoje eu vim te contar da existência de um tipo de dados chamado Boolean. Bora lá?!

O tipo de dado que a gente vai ver, chamado Boolean, pode expressar os valores de True e False (“verdadeiro” e “falso”, ou “sim” e “não”).

Os tipos True e False só funcionam se forem escritos exatamente assim, com a primeira letra maiúscula e o resto minúsculo, beleza?! O macete é olhar a cor. Provavelmente o seu editor, assim como o meu, muda a cor dessas palavras quando a gente escreve certo. Olha esse outro código:

Reparou que a cor ficou diferente?! Quando a gente escreve certo, a cor geralmente muda.

Mas de onde veio esse nome?

Mas, cara, talvez você esteja se perguntando o porquê de o nome desse tipo de dado ser “Boolean”.

Eu te digo: há algum tempo atrás, um britânico doido chamado George Boole criou várias leis algébricas pra valores verdade (verdadeiro e falso). Esse tipo de álgebra levou o nome de seu criador: “álgebra booleana”. Futuramente a gente vai aprender mais sobre essa parada, porque vamos usar. Mas por enquanto isso é tudo que você precisa saber, beleza? Ok, vamos continuar!

Cara, agora vou te contar um segredinho por trás dos tipos booleans. Lembra daquela parada que te falei sobre linguagens de máquina? Bom, eu vou te lembrar: os computadores só conseguem reconhecer e guardar zeros e uns.

Sabendo disso, cara, se o computador só guarda zeros e uns, o que será que acontece quando a gente escreve True ou False?!

Cara, o computador, malandramente, converte True pra 1 e False pra 0. Ou seja, True e False são só apelidos pra 1 e 0, quer ver? Eu te mostro. Olha esse código:

Ao ser executado, o resultado é esse:

Viu?! Quando eu tentei somar 99 com uma variável do tipo True, o resultado foi 100. E quando eu multipliquei 30 por um valor False, obtive 0. Ou seja, True = 1 e False = 0, beleza?!

A gente vai utilizar os tipos Boolean pra várias coisas daqui pra frente, mas esse segredinho sobre como funcionam os booleans por baixo dos panos é importante porque pode cair na sua prova, meu parceiro! Então, fica ligado!

Operações de comparação

Os tipos de dados chamados Booleanos podem ser criados a partir de comparações. Eles nos dizem se algumas comparações são verdadeiras ou falsas. Mas como a gente pode comparar coisas em Python?!

Vou te mostrar algumas formas de fazer isso! Primeiro, olha esse código:

O resultado da expressão “2 == 3” é False, isso porque 2 não é igual a 3. O operador que verifica igualdade em Python é “==” (dois símbolos de igualdade seguidos)

.

Outro operador de comparação é o !=, esse verifica se os valores são DIFERENTES. Olha:

O primeiro retornou True pois as variáveis A e B realmente são diferentes, uma é 1 e a outra 2. Você perguntou se são diferentes e o True é a forma de Python dizer “sim”.

Mas além desses, a gente também pode verificar se um valor é maior que outro usando os operadores de maior e menor, igual lá na matemática.

E o resultado deste código, quando a gente executa, é:

No último caso a gente usou um operador novo, o maior igual (“>=”). Esse operador diz pra gente se o número da esquerda é maior ou igual ao da direita.

Também dá pra fazer com “menor ou igual”.

O resultado é True porque X realmente é menor ou igual a Y, tá?!

Comparação alfabética

Os operadores de maior e menor também podem ser usados com strings. Mas o que significa um texto ser menor que outro?!

Bom, na verdade não é a quantidade de letras que está sendo verificada. O que acontece é que Python checa a ordem alfabética. Olha esse exemplo aqui:

O resultado foi False no primeiro caso porque, alfabeticamente, “abacaxi” vem antes. Mas no segundo caso, mesmo a Fruta_3 começando com “P”, o resultado foi True.

Isso aconteceu porque o “P” tá maiúsculo. Em Python, todo o alfabeto de letras maiúsculas vêm antes das minúsculas, ok?!

Comparação em cadeia

A gente viu como fazer comparações entre dois valores, mas não precisam ser apenas dois. É possível fazer algumas comparações em cadeia. Olha:

Como a idade não está entre 18 e 13, o resultado da expressão é False. Esse resultado é armazenado na variável “é_adolescente” e depois exibido pela função print()!

E por hoje é isso! Valeuuu!

Expandir

Exercício Resolvido #1

Elaboração própria.

Quais das seguintes expressões resultam em valores lógicos verdadeiros:

  • 5,10 < 10
  • “Açaí” > ”sorvete”
  • 0.1 + 0.2 = = 0.3
  • 666
MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Fala aí! Essa questão obriga a gente a lembrar dos operadores lógicos e suas aplicações. Vamos olhar pra uma expressão de cada vez e tentar identificar qual o resultado da expressão, se será True ou False, beleza? A questão pede os que serão True. Vamos começar analisando a primeira!

Nessa primeira, estamos comparando um número real (do tipo float) com um número inteiro. Com o uso do operador “menor que”, a gente tá perguntando se número da esquerda é menor que o número da direita. Com isso, a resposta é True! Pois 5.10 realmente é menor que 10, né?? Então! Por isso a resposta vai ser “sim”, e computadores dizem sim usando True, beleza?!

Show! Vamos pra segunda.

Passo 2

No segundo passo tem a comparação entre strings. Estamos perguntando se a String da esquerda é “maior” que a da direita, alfabeticamente falando. Essa pergunta pode ser traduzida pra “Açaí vem depois de sorvete na ordem alfabética?”. E, por isso, a resposta é não. False. Nesse caso, também é importante lembrar que todo alfabeto minúsculo é considerado maior que o maiúsculo, ok?! O “s” minúsculo vem depois do “A” maiúsculo na ordem alfabética, por isso é maior.

Vamos analisar o próximo item!

Passo 3

Olha, se a gente fizer essa conta de cabeça, parece que a resposta é True, né?! 0.1+0.2 realmente dá 0.3. Mas acontece que, nesse caso, a resposta é False. Isso acontece por causa da imprecisão dos números reais em Python. Lembra que em Python só as primeiras 16 casas são precisas? Então! Olha o que acontece se você somar 0.1+0.2:

Viu?! Esse número realmente não é igual a 0.3! Por isso a resposta é False. Cuidado quando você for fazer comparações de igualdade com números reais, ok?! Esse 4zinho ali com certeza ia te dar dor de cabeça!

Partiu analisar o último item!

Passo 4

Ih, rapaz! Essa opção não tem nenhum operador relacional. Mas cê lembra que True e False são apelidos pra 1 e 0, respectivamente? Isso porque os computadores reconhecem 0 como False, e True pra qualquer outro valor diferente de 0, ok?

Nesse código a gente tá transformando os valores em booleanos e depois exibindo o resultado. Se liga no que acontece depois que a gente executa:

Viu?! Só foi False quando a gente usou 0, e qualquer outro valor diferente de 0 foi considerado True, beleza?!

*** Observação: além do 0, o valor None também é considerado False, mas o valor None é inútil e por isso a gente finge que ele não existe, ok?!

Show! Acabamosss!

Resposta

Apenas a primeira e a última expressões retornam True.

Exercício Resolvido #2

Elaboração própria

Qual o valor lógico resultante da seguinte expressão:

3 == 3.0

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Cara, não tem como a gente fazer operações com dados de diferentes tipos. Mas mesmo assim a gente usa int e float juntos com frequência e tudo funciona numa boa. Então o que tá acontecendo?!

Mas acontece que o uso de números inteiros e reais na mesma expressão é uma coisa tão comum que Python faz a conversão automaticamente pra gente.

Nesse caso, 3 é um número inteiro e 3.0 um número real. A primeira coisa que seu computador vai fazer se você executar esse código é converter o 3 inteiro pra real. Então, depois da conversão automática, vai ficar assim:

E aí a expressão lógica que Python vai resolver é “3.0 == 3.0”, que vai retornar em True, ok?! Se liga que os números reais só ficam com a precisão louca se a gente fizer conta com eles. Se a gente não fizer conta, fica certinha, beleza?!

Valeu!

Resposta

True

Exercício Resolvido #3

Elaboração própria.

Selecione as opções que correspondem a valores lógicos em Python:

  1. true e false
  2. 0 e 1
  3. Papo-reto e Caô
  4. Nenhuma das alternativas anteriores
MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Bom, se você escolheu a alternativa a), PARABÉNS!! Você errou.

Esse item nada mais é do que uma pegadinha, pois Python se trata de uma linguagem de programação case sensitive, isso é, diferencia caracteres maiúsculos e minúsculos.

Por esse motivo, a alternativa a) está errada.

Passo 2

1 e 0 são equivalentes a True e False, ou seja, podemos utilizá-los como valores lógicos.

Logo, a alternativa b) está correta.

Passo 3

Bom, mas por que o item c) está errado?

Pois, Papo-reto e Caô não estão entre aspas duplas, sendo assim não são strings e passam a ser interpretados como comandos. Esses, por sua vez, não estão presentes na linguagem Python.

Resposta

Portanto, b) é a alternativa correta.

Exercício Resolvido #4

Elaboração própria

Determine todos os valores de x satisfazem a seguinte expressão booleana:

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Cara! Uma expressão booleana é simplesmente um pergunta de verdadeiro ou falso. Essa questão quer saber quais os valores de x que a gente pode usar pra que a expressão seja verdadeira. Pra isso, vamos analisar um operador de cada vez.

No lado esquerdo, precisamos de valores de x que sejam menores do que 10 pra que a parte esquerda da expressão seja verdade. No lado direito, é necessário que x tenha valores maiores que doze pra que essa condição seja verdadeira.

Cara, tu percebeu que não dá pra satisfazer os dois lados ao mesmo tempo??! Ou o valor de x é maior que 12, ou é menor que 10. Não tem como ser os dois ao mesmo tempo, independente de qual seja o valor de x beleza?!

Por isso, a resposta desse exercício é que não há valores que satisfazem a expressão.

Resposta

Não há valores que satisfazem a expressão.

Exercício Resolvido #5

IFC-SC, 2015 - adaptado

Analise as seguintes afirmativas sobre operadores do Python e assinale a alternativa correta:

  1. b %= a é equivalente a b = b % a.
  2. é o operador de comparação que significa “diferente de” em Python. O operador != também é, mas este é um operador obsoleto e não se recomenda mais sua utilização.
  3. O operador ^ é responsável por fazer o potenciação.
  1. Somente a afirmativa I é verdadeira.
  2. As afirmativas I, II e III são verdadeiras.
  3. Somente as afirmativas I e III são verdadeiras.
  4. Somente as afirmativas II e III são verdadeiras.
MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Fala aí, doido! Vamo analisar cada uma das afirmações, começando do começo, ok?!

Cara, na primeira afirmativa o doido tá dizendo que b %= a é equivalente a b = b % a. E é isso mesmo, tá certo! Os operadores matemáticos podem ser escritos no formato in-place, que é quando a gente põe o operador junto do sinal “=”. Olha mais alguns exemplos:

Viu? Se você for mó preguiçoso igual a mim você pode usar os operadores in-place! Hihihi mas não são obrigatórios, ok?!

Show! Essa afirmativa tá certa, então vamos olhar a segunda!

Passo 2

Agora o cretino tá dizendo que é um operador de desigualdade. A maldade dessa afirmativa é que, antigamente, era verdade. Na verdade, o operador funcionava até a versão 3 de Python, junto com o !=. Depois disso, se tornou obsoleto e agora a gente só tem o “!=”.

Percebeu que é exatamente o contrário do que tá na afirmativa?! Sacanagem, tentaram confundir nós!!! Mas a gente percebeu, ufa!

ESSA É FALSAAA!

Passo 3

Ih! Essa aqui tá dizendo que o operador de potenciação é “^”. Mas isso é caô, a gente tá ligado que o operador de potenciação é o “**”, pô! Por isso, essa aqui também é falsa.

Mas se tu testar esse operador no python, vai ver que acontece umas coisas loka. Isso porque o “^” é um operador sim, chamado XOR. Mas esse é um assunto avançadinho que a gente não precisa tratar agora, beleza?!

Já que a única verdadeira é a primeira, então a alternativa certa é a A, ok??!

Valeu!

Resposta

Alternativa A.

Exercício Resolvido #6

Elaboração própria

Escreva um programa que recebe dois números e exibe True caso esse o segundo seja maior que o primeiro.

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Vamo começar pedindo os números pro usuário, beleza?! Pra isso a gente tem que usar a famosa função input().

Repara que o enunciado não tá especificando se os números vão ser inteiros ou reais. Por isso, a gente vai usar float! O tipo float consegue guardar números inteiros também, lembra?! Beleza! Agora vamos exibir a comparação!

Passo 2

Cara, a gente precisa comparar os dois números. O enunciado quer que a resposta seja True se o segundo for maior que o primeiro, né?!

Repara que o resultado dentro da variável “comparação” vai ser do tipo Boolean, e se o segundo for maior que o primeiro, vai ser True. Antes de tudo, queria te falar que não é boa ideia usar nomes de variável com acentos, esse “ç” e caracteres especiais, ok?!

Quando a gente usa caracteres especiais, somos obrigados a salvar o arquivo de um jeito diferente (especificando que tem caracteres especiais). O macetinho é você nunca usar caracteres especiais pra não ter risco de dar ruim na hora que seu professor for ler, beleza?! Por isso eu vou trocar o nome.

Passo 3

Show! Agora a gente já tem armazenado na variável “comparacao” o resultado da comparação entre os números. Agora a gente só precisa exibir pro usuário, e a gente faz isso usando a função print(), é claro!

Agora o resultado da comparação vai ser exibido pro usuário. Talvez você esteja se perguntando se dá pra gente personalizar a mensagem de acordo com o resultado da comparação, e eu te digo que dá!! A gente vai aprender mais pra frente, beleza?! Te espero lá!

Resposta

Exercício Resolvido #7

Pense Python, adaptado

Quais das seguintes é uma expressão booleana? Selecione todos que são.

a) True

b) 3 == 4

c) 3 + 4

d) 3 + 4 == 7

e) "False"

MOSTRAR SOLUÇÃO COMPLETA

Passo 1

Vamos analisar uma por uma pra verificar quais são expressões booleanas. Começando com a alternativa A, True já é por si só um valor booleano. Todas as expressões booleanas resultam em True ou False, por isso o próprio True já é por si só uma expressão booleana, ok?!

Show, vamos pro segundo.

Passo 2

Na segunda alternativa a gente tem uma comparação entre dois valores numéricos. O operador “==” verifica se ambos os valores são equivalentes, resultando em True ou False.

Por isso, também é uma expressão booleana, ok?

Passo 3

Na alternativa C a tem uma expressão matemática, e o resultado de uma expressão matemática é um número! Se o resultado é diferente de True ou False, então não é uma expressão booleana, ok?