Estruturas condicionais
Teoria
Usando o if
Cara, imagina você chegando de manhã na faculdade, boladão e cheio de sono. Pra qual sala você vai?! Bom, você provavelmente respondeu que depende do dia da semana. A gente tem diferentes aulas em diferentes dias, então precisamos saber o dia da semana pra saber qual aula temos que assistir. A verdade é que a gente vive tendo que tomar decisões, mesmo que de forma inconsciente.
E pra gente tomar decisões, precisamos verificar nossas condições (nesse caso, o dia da semana).
Da mesma forma, nosso programa não precisa ter sempre o mesmo comportamento, mas pode executar códigos diferentes dependendo de alguma condição. Pra fazer isso, a gente usa estruturas condicionais nas linguagens de programação, usando a palavra-chave “if”.
Calma, vou te contar mais sobre a estrutura. A condição tem que ser uma expressão relacional (valor booleano). O “:” indicam que o bloco de código seguinte se refere a essa condição. Além disso, repara que eu falei “bloco de código“. Estava me referindo a todos os comandos seguintes que de mesma indentação, ou seja, mesmo alinhamento. Vamos aprender com exemplos!
Ao executar esse código, a função print() vai ser executada e o texto "1 realmente é igual a 1 ksks" vai aparecer no terminal. O bloco de código referente ao if nesse caso só teve uma linha, a do print. Antes de escrever a função “print()” ali eu cliquei na tecla TAB pra dar o espaçamento necessário, ok?!
Obs: a tecla TAB é representada no teclado por duas setinhas em sentidos opostos, logo abaixo da tecla de aspas.
Mas vou te explicar o que aconteceu aqui. A expressão de comparação “1==1” foi resolvida e teve como resposta o valor True, um booleano que significa verdadeiro (1 realmente é igual a 1, né?! haha). Quando a expressão é verdadeira, o bloco indentado é executado, mas se for falsa, não é executado.
Ao executar esse código, não acontece NADA! Isso porque 5 não é igual a 4, então o print() não vai ser executado, beleza?! Se liga nesse exemplo aqui:
Nesse caso, a gente pediu a idade do usuário e guardou dentro da variável “idade”. Se a idade digitada for menor que 18, o primeiro print vai ser executado. Mas repara que o segundo print não tá com a mesma indentação do primeiro, o que significa que ele não tá dentro do mesmo bloco de código. Vamos executar pra ver no que dá!
O segundo print do código não tá pertencendo ao if, e por isso vai ser executado independentemente da idade, ok?! Mas agora se você for menor de idade…
Viu?! Conseguimos mudar o comportamento do programa de acordo com uma condição, nesse caso, a idade do usuário. Mas a gente também pode fazer um código personalizado pra caso a condição seja falsa.
Pra isso, a gente pode usar a estrutura if/else. Se a condição for verdadeira, somente o código do if vai ser executado. Caso contrário, o código a ser executado vai ser o dentro do else.
Mas também é possível aninhar os ifs.
Ou seja, caso a idade não seja menor que 18 a gente faz outra verificação: se é igual a 18. Com isso, abordamos os 3 casos, onde a idade é menor que 18, igual a 18 ou maior que 18. Repara que o código dentro do último else só vai ser executado se os dois últimos ifs não forem verdadeiros, ok?!
Pra facilitar nossa vida na hora de aninhar, a gente também pode usar a estrutura if/elif/else.
Dessa forma a gente consegue fazer as verificações sem ter que colocar um if dentro do outro. Todas as estruturas de comparação tem que começar com um if, e só podem ter um else, mas podem ter vários elif, beleza?
A última coisa que você tem que ficar esperto é que as comparações são feitas em ordem, uma de cada vez, e o if para assim que uma das condições é verdadeira, beleza? Somente um bloco de código vai ser executado na sua estrutura!
No primeiro elif deste código a gente já sabe que a idade NÃO É menor que 18, porque se fosse teria parado no primeiro if. No segundo elif sabemos que idade NÃO É igual a 18, porque se não teria parado no primeiro elif, e assim por diante… Se você fizer comparações redundantes você vai perder pontos, cara!
Agora que você tá sabendo tudo de estruturas condicionais, bora fazer uns exercícios de fixação?!! Te espero lá, doido!
Exercícios Resolvidos
Exercício Resolvido #1
UFU, Lista 08
Faça um programa que leia um código de operação (+,-,* ou /), e também dois valores inteiros A e B. O programa deve calcular o resultado da operação escolhida aplicado a A e B. Por exemplo, se a operação escolhida foi * e A = 1 e B = 3, o programa deve fornecer como resultado o valor de 1*3, que é 3.
Passo 1
Ops, parece que a gente tem que perguntar alguma coisa pro usuário. Nesse caso, já é certo que vamos usar a função input(). Vamos começar lendo um operador matemático e dois números.
Mas tu lembra que a função input() sempre retorna string?! Acontece que a gente tá esperando dados numéricos em A e B (números inteiros, pra ser mais exato). Por isso, já vamos converter direto o valor recebido pelo input() pra inteiro usando a função int(). Assim, os valores salvos em A e B serão inteiros. Beleza, agora vamos fazer nossas operações matemáticas!
Passo 2
Bom, a operação matemática que a gente precisa fazer agora depende do operador que a gente recebeu do usuário. A gente precisa checar qual operador ele passou, e vamos fazer isso usando estruturas condicionais (if).
Beleza! O valor da nossa variável “resultado” depende do que tem dentro da variável “operador”. Agora, a gente só precisa exibir pro usuário.
Passo 3
Exibir pro usuário sempre nos obriga a usar a função print() hahaha. Vamos lá!
Pronto! Agora, o resultado vai ser exibido logo depois de ser calculado. E assim, a gente finaliza a questão. Te espero na próxima, doido!
Mas sa
Resposta
Exercício Resolvido #2
PUC-Rio, Lista 8 (adaptado)
Escreva um programa que leia do teclado as duas notas de um aluno, calcule e exiba a média aritmética das notas. O programa deve, adicionalmente, exibir uma mensagem de parabéns caso o aluno esteja aprovado (média superior ou igual a 5,0)
Passo 1
E ai! O enunciado já começa dizendo pra gente ler do teclado duas notas. Isso significa que a gente precisa perguntar pro usuário, e pra isso a gente usa a função input()! Mas se liga na conversão de tipos!
Quando a gente pensa em notas, qual tipo de dado a gente espera? Se pensar nas nossas notas na faculdade, são sempre números reais, saca? Porque tem vírgula e tudo mais… Então, a gente converte direto pra float o resultado do nosso input(). É sempre importante pensar no tipo de dado que a gente espera do usuário e já fazer a conversão direto do input(), beleza? Não esquece disso, pufavô!
Passo 2
Beleza! Agora a gente já tem as duas notas nas variáveis. Bora calcular a média aritmética. Bom, a média aritmética é dada pela soma de todos os dados dividido pela quantidade de dados. Nesse caso, só tem 2 (as duas notas).
Bora adaptar isso pra Python!
Agora sim! Temos a média! Precisamos exibir a média pro usuário, e pra isso a gente vai usar o print()!
Se liga que a gente usou formatação de string ali, e existem vários tipos de formatação de string. O ideal é usar aquele que seu professor ensinou, ok?! Eu escolhi um método pra usar aqui na resolução, mas seu professor vai ficar BOLADÃO se você usar um método diferente do que ele ensinou (professores têm esses probleminhas). Mas o programa tá fluindo, hein!!
Obs: tem um tópico super curtinho sobre formatação de string aqui na playlist, e o nome é Operações com Strings. Caso você não esteja ligado na parada, dá uma olhada lá depois, jae?!
Pra finalizar, precisamos fazer a verificação pra exibir a mensagem caso o aluno tenha média maior que 5, assim como manda o enunciado. Pra isso, bora usar uma estrutura condicional!
Passo 3
Precisamos checar se a média é maior que 5. Pra fazer verificações, precisamos da palavra-chave if, lembra dela?
A nossa estrutura condicional fica com essa cara. A gente quer que, se a média for maior que 5, exibir uma mensagem parabenizando o aluno. Vamos colocar esse código dentro do escopo do if.
Pronto! Agora, o segundo print() só vai ser executado quando a média for maior que 5. Bora testar?
Passo 4
Vou executar o programa e colocar alguns dados aleatórios que vierem na minha cabeça pra testar.
Reparou que, como a média é menor que 5.0, a mensagem do segundo if não foi exibida? A ideia das estruturas condicionais é justamente essa: mudar o comportamento do programa de acordo com diferentes situações. Vamos executar de novo!
Dessa vez, como a média foi maior do que 5, o segundo print() funcionou!
E é isso, finalizamos o ex! Te vejo no próximo, doido!
Resposta
Exercício Resolvido #3
UFU, Lista 2.
Leia um número fornecido pelo usuário. Se esse número for positivo, calcule a raiz quadrada do número. Se o número for negativo, mostre uma mensagem dizendo que o número é inválido.
Passo 1
Fala aí, doido! Bora começar perguntando pro usuário o número, igual tá mandando no enunciado. Mas, se liga, a gente vai fazer conta com esse dado que o usuário digitar. Se a gente vai fazer conta, a gente espera que seja um número, certo?! Então vamos fazer conversões direto no input().
Vamo aos códigosss!
Se liga que no enunciado não diz se é pra ser número real ou inteiro. Nesse caso, eu escolhi usar números reais (float), mas se você usou inteiros, não vai ter problema. Se não tá no enunciado, o coração não sente! Agora, precisamos checar se esse número aí é positivo ou negativo. Vamos precisar de uma estrutura condicional!
Passo 2
Se liga na cara que nossa estrutura vai ter:
A expressão é, se os números forem maiores ou iguais a 0, então executa o primeiro bloco, se não (se forem negativos), o segundo bloco. Mas mano, não esquece que o que eu faço aqui é só uma solução possível, beleza?! Todos os exercícios de prog tem mais de uma solução! Vou até te dar um exemplo de outra cara que essa estrutura poderia ter:
Pronto! Inverti a parada. Se liga, agora, se o número for negativo o primeiro bloco vai ser executado. Caso contrário (o contrário de negativo é positivo), então o segundo bloco vai ser executado. Viu? O código ficou diferente, mas o resultado tá igualmente certo, jae? Bora continuar escrevendo os códigos para números positivos.
Passo 3
No enunciado tá dizendo que, se for positivo, temos que calcular a raiz quadrada. Bom, não tá dizendo que é pra exibir, mas nesse caso a gente deduz que é pra exibir o resultado. Até porque, se a gente não exibir, o programa não vai servir pra nada, né?
Pronto! Se for positivo, a gente calcula a raiz e exibe. Se liga que eu to usando formatação de string ali no print()! Existem vários tipos de formatação de string, e eu escolhi uma das formas de fazer. Mas o ideal é você usar o mesmo método que seu professor usa, beleza?
Obs: Se tu não tiver ligado em formatação de string, dá uma olhada no tópico Operações com Strings. É rapidão, olha lá!
Passo 4
Agora, vamos escrever o código pros números negativos. No enunciado tá dizendo que, se for negativo, a gente precisa exibir uma mensagem falando que o número é inválido. Bora fazer isso usando um print()!
Pronto! Agora, se o número for negativo, uma mensagem de erro vai ser exibida. Caso contrário, vai ser exibida a raiz quadrada do número. Bora testar?
Passo 5
Pra testar, bora executar nosso código!
Executei uma vez e coloquei 81. Como é positivo, o programa respondeu com a raiz quadrada. Agora vou executar de novo e colocar um número negativo.
Opa! Como o número é negativo, o programa retornou a mensagem de número inválido que a gente programou! TÁ TUDO FUNCIONANDOOOOOO!
Conseguimos! Te espero no próximo exercício, hein!
Resposta
Exercício Resolvido #4
UFU, Lista 2.
Faça um programa que receba a altura e o sexo de uma pessoa e calcule e mostre o peso ideal, utilizando as seguintes fórmulas (onde h corresponde à altura):
Passo 1
E aí! Mano, tu percebeu que nosso programa tem que ter comportamentos diferentes dependendo do sexo do usuário? Pra conseguir fazer isso, vamos precisar de estruturas condicionais (if). Mas calma, primeiro, bora começar perguntando pro usuário o sexo e a altura.
Pronto! Repara que a gente criou um padrãozinho ali pra usuário escolher entre H ou M. Vamos considerar que o usuário digitou uma resposta válida, ok?! Um outro ponto que a gente não pode esquecer é de converter a altura pra float (número real). Isso porque a gente vai fazer conta com esse número, então a gente precisa dizer pro computador que o usuário vai digitar um numero, beleza?!
Passo 2
Agora, temos duas fórmulas pra aplicar. E pra escolher qual das fórmulas vamos aplicar, precisamos descobrir qual sexo foi digitado pelo usuário. Pra isso, vamos recorrer às estruturas condicionais!
Essa é a cara da nossa estrutura condicional. Se liga que a gente tá considerando que o usuário vai digitar sempre H ou M. Então, se não for H, é M, sacou? Se o enunciado tivesse falado pra gente checar se a entrada do usuário é inválida, aí a gente faria. Mas já que o professor não falou nada, a gente não faz. Quanto menos coisa a gente fizer, menos chance de errar! O macete é sempre fazer só o que o enunciado tá mandando, ok?!
Beleza! Agora, bora aplicar as fórmulas dentro da de cada escopo do if.
Show! Agora, depois do if a gente vai ter na variável “peso” o valor certo dependendo do sexo do usuário. Agora, a gente só precisa exibir a resposta.
Passo 3
Pra exibir o resultado da conta pro usuário, vamos usar a função print().
Mas se liga que, no print(), a gente usou uma formatação de string (com o % ali). Caso tu não esteja ligado no que é, dá uma olhada no tópico de Operações com Strings (é rapidinho, eu juro).
Bom, agora só falta a gente testar!
Passo 4
Pra testar, vou executar o programa e colocar alguns dados que vierem na minha cabeça.
Opa! Até aqui, tudo certo. Agora bora tentar colocar a mesma altura, mas com o sexo diferente.
Ahhh moleque! O programa tá aplicando fórmulas diferentes de acordo com o sexo que a gente coloca! TÁ FUNCIONANDO!
Show! Te vejo no próximo exercício, maninho! Até mais!
Resposta
Exercício Resolvido #5
UFU, Lista 2.
Faça um programa que receba um número inteiro e verifique se este número é par ou ímpar.
Passo 1
Fala aíiiii! Maninho, a gente precisa checar se um número é par. Mas como a gente pode fazer isso?! Qual a característica que números pares tem que ímpares não tem?!
São divisíveis por 2, brow! Se o número for ímpar, o resto da divisão inteira por 2 vai ser 1. Se for par, vai ser 0. Tenta dividir qualquer número ímpar por 2 aí! Sempre vai sobrar 1, diferente dos pares, que não vai sobrar nada. É dessa lógica que a gente consegue checar se um número é par ou não. Mas antes, vamos pedir o número pro usuário!
Antes de partir pro próximo passo, me responde aí: o número 19.4 é par ou ímpar?! MUAHAHAHA
Cara! O conceito de par e ímpar só faz sentido com números inteiros, okay? Por isso, a gente tá convertendo a entrada do usuário pra inteiros. Show! Agora que já temos o número, vamos fazer as checagens.
Passo 2
Pra gente fazer uma verificação, bora usar uma condicional (tô falando do if, não é cadeia não). Nosso if vai ter essa cara:
Se ligou na expressão que a gente colocou ali no if? Se o resto da divisão for igual a 0, então “num” é par, sacou?! Se for diferente de 0, aí é ímpar. Tudo ok até aqui!
Agora, vamos fazer o programa responder pro usuário.
Passo 3
Pra gente dar uma resposta pro usuário, bora usar a função print().
Pronto! O print() a ser executado depende do número. Bora testar!
Passo 4
Rodei o programa uma vez e digitei o número 3.
Parece tudo ok. Vamos testar um par agora!
TÁ FUNCIONANDO PERFEITAMENTE, BROW!
Te vejo no próximo ex, hein! Não desiste não, cara!
Resposta
Exercício Resolvido #6
IFC, Prof. Marcelo Cendron
As maçãs custam R$0,30 cada se forem compradas menos do que uma dúzia, e R$0,25 se forem compradas pelo menos doze. Escreva um programa que leia o número de maçãs compradas, calcule e escreva o valor total da compra.
Passo 1
Opa! Nessa questão, o preço da maçã muda de acordo com a quantidade. Precisamos calcular o preço final de uma compra, mas pra isso a gente precisa saber quantas maçãs o cliente comprou! Mas qual é o tipo de dado que a gente espera que o usuário digite quando a gente pede QUANTIDADE?!
Isso! A gente espera que o usuário digite um número inteiro! Então, bora pedir essa informação pro usuário, já convertendo a resposta pra inteiro.
Agora sim! A gente tem a quantidade de maçãs compradas armazenado na variável “quantidade”. Agora a gente tem que dizer o preço de cada maçã, dependendo da quantidade de maçãs compradas. Pra isso, vamos precisar de uma estrutura condicional!
Passo 2
O enunciado diz que se forem compradas PELO MENOS 12 maçãs, então o preço é R$0,25. Se não, é R$0,30. Esse “pelo menos” enfatiza pra gente que se a quantidade precisa ser maior ou igual a 12 pro preço diminuir. Bora montar nosso if então!
Show! O que a gente quer definir dependendo da quantidade é o preço. Então, vamos criar a variável dependendo da quantidade.
Pronto! Agora a gente só precisa fazer as contas e exibir o resultado final pro usuário, considerando que na variável “preço” já vai estar tudo ok!
Passo 3
O preço final é o preço unitário multiplicado pela quantidade.
Agora, a gente já tem o preço final calculado. Só falta a gente exibir, né?! Vamos fazer isso então.
Passo 4
Pra gente exibir, fazemos como mesmo???! Isso aí! Vamos usar a função print().
Mas se liga também que a gente usou formatação de string (aquela parada com o % ali). Tu precisa estar esperto em formatação de strings! Aqui na playlist tem tudo explicadinho sobre no tópico Operações com Strings. Dá uma olhada lá caso você esteja perdido, ok?!
Obs: eu usei um dos vários métodos de formatação, mas o ideal é você usar o que seu professor usa, jae?!
Mas ainda não acabouu! Testar o programa faz parte do ritual. Bora testar!
Passo 5
Rodei o programa uma vez e digitei o número 7.
Como o número é menor que 12, eu espero que o preço de cada maçã tenha sido R$0,30. Vamo ver se é isso mesmo:
Ufa! Minha calculadora concordou! Vamos testar com um número maior que 12 agora.
Vamos recorrer a famosa calculadora de novo!
Tá tudo funcionando, cara! Que emoção!
Tamo indo bem, cara! Vamo fazer mais um???
Resposta
Exercício Resolvido #7
PythonBrasil, Lista Oficial
Faça um Programa para leitura de três notas parciais de um aluno. O programa deve calcular a média alcançada por aluno e presentar:
- A mensagem "Aprovado", se a média for maior ou igual a 7, com a respectiva média alcançada;
- A mensagem "Reprovado", se a média for menor do que 7, com a respectiva média alcançada;
- A mensagem "Aprovado com Distinção", se a média for igual a 10.
Passo 1
Fala aí, meu consagrado! Se liga que a ideia aqui é a gente modificar a mensagem da resposta de acordo com a nota do usuário. Primeiramente, a gente precisa saber quais são as notas!
Pra isso, bora usar a função input() três vezes. Mas se liga que a gente espera que o usuário digite números reais! Por isso, já vamos converter a entrada pra float.
Pronto! Já temos as notas. Bora calcular a média!
Passo 2
A média aritmética é dada pelo somatório das notas dividido pela quantidade de notas.
Então, bora calcular essa parada em python!
Prontinho! Já temos a média calculada. Agora, bora definir a mensagem que a gente vai passar pro usuário. Pra isso, vamos precisar montar uma estrutura condicional! Saca só:
Mas cara, eu queria enfatizar também que essa estrutura aí podia estar montada de várias formas diferentes e ter o mesmo resultado, blz?! Se liga que no else, a média não é 10 e não é menor que 7. Então, a gente conclui que tá entre 7 e 10, sacou? Show! Bora personalizar as mensagens agora.
Passo 3
Pra dar uma resposta personalizada pro usuário de acordo com a média, a gente pode fazer de duas formas:
Pô, tá certo. Vai funcionar. Mas tu concorda comigo que tá bem repetitivo? A ideia da programação é justamente automatizar as coisas, cara! Por isso, cara, o ideal é a gente colocar dentro do escopo do if somente o que vai variar. Os códigos que são comuns a todos os escopos do if a gente coloca depois. Olha esse código aqui:
Viu? Ele funciona da mesma forma, mas assim você digita menos e seu professor vai gostar bem mais, acredita em mim!
Bora testar?
Passo 4
Rodei o programa uma vez e digitei os números 7, 6 e 8.
Funcionou de boa até aqui. Bora tentar com a média 10!
Aêee! Tô sentindo que vai tudo funcionar, hein! Bora testar agora a última situação possível: a reprovação (só de escrever já dói).
Funcionou tudo direitinho! Que gostoso que é quando tudo funciona.
Te vejo no próximo exercício, maninho! Que a força esteja com você!
Resposta
Exercício Resolvido #8
IFC, Prof. Marcelo Cendron
Escreva um programa para ler o número de lados de um polígono regular e a medida do lado (em cm). Calcular e imprimir o seguinte:
Passo 1
Ihhhh, para nossa alegria a gente não precisa calcular a área se for um pentágono. Pra começar nossa resolução, como em quase toda questão de prog 1, a gente vai perguntar umas paradas pro usuário: a medida do lado e a quantidade de lados. Mas quais são os tipos de dados de cada uma dessas informações?
A quantidade de lados é um número inteiro, e a medida é um número real. Quem concorda, respira.
Pronto! Agora a gente tem os dois dados que precisamos. Pra dar sequência no exercício, vamos precisar de uma estrutura condicional.
Passo 2
O enunciado tá dizendo pra gente checar se os dados se encaixam naquelas três situações. Bora criar o modelo da estrutura condicionado nos baseando no enunciado.
Bora começar calculando a as áreas do triângulo ou quadrado! Talvez você não se lembre, porque eu também não lembrava, mas o Google me disse que a área de um triângulo equilátero é dado pela seguinte fórmula:
Mas pelo menos a área do quadrado eu lembro, ok? Não me julgue.
Bora escrever essas fórmulas em Python!
Prontinho! Agora, bora exibir a área que a gente calculou.
Irado! Mas o enunciado também diz que a gente tem que dizer o nome da figura.
Passo 3
O nome da figura a gente pode dizer em qualquer um dos três casos. Pra isso, vamos lançar um print() brabo dentro de cada escopo do if.
Pronto! Antes de finalizar, bora testar.
Passo 4
Executei o programa e testei um triângulo. O resultado foi esse:
Brabo! Apareceu o nome e a área. Vou testar um pentágono e torcer pra dar tudo certo.
Aê! A área não foi calculada, mas apareceu o nome do polígono. Exatamente como diz no enunciado. Eba! Bora pro último teste, o quadrado!
FUNCIONOU TUDO! Agora a gente já pode finalizar o exercício.
Valeuuu! Até o próximo, doido!