Fizemos um programinha simples, e hackeamos ele, encontrando alguns problemas, reveja o tutorial:
IF e ELSE em Python
Corrigindo Bugs
No tutorial anterior, propomos uma questão:O usuário deve dizer qual o maior e melhor time de futebol do mundo.
Se digitar 1, diz que é o Corinthians.
Se digitar 2, afirma que o Flamengo é tal clube.
Nosso código Python ficou assim:
print('1. Corinthians') print('2. Flamengo') resposta = int (input('Qual melhor time: ') ) if resposta == 1: print('Você deve ser corinthiano') else: print('Você deve torcer Flamengo')
Mas aí notamos um problema: se você digitar 3, 4, -1, 0 ou qualquer outro número que não seja 1, diz que você torce Flamengo.
Isso está errado (nada contra o Flamengo), é que se você digitou 3, 4 ou outro número, você não está escolhendo o Flamengo, então por que raios aparece que sou torcedor do Flamengo?
A resposta é simples.
Se você digitar 1, o teste condicional do IF vai dar verdadeiro e cai no print do Corinthians. Até ai ok.
Mas para qualquer outro número que digitar, vai cair no ELSE e falar do Flamengo!
Isso é um bug, uma falha. Vamos consertar!
Devemos incrementar o seguinte ao nosso programa: qualquer outro número que não seja 1 ou 2, o script deve exibir a mensagem na tela "É, você não deve ser torcedor de Corinthians o Flamengo".
Pronto, agora sim vai ficar bacana.
Vamos resolver esse bug de nosso código.
Estruturas Aninhadas - IF ELSE dentro de IF ELSE
Veja que, inicialmente, fazemos o teste no código, pra verificar se a resposta foi 1. Se sim, ok, fala do Corinthians.Quando a resposta não for 1, devemos fazer outro teste: checar se o número digitado foi 2. Se for, exibir a mensagem do Flamengo. Se não (else), exibir a mensagem que o usuário deve torcer outro time.
E como fazer esse outro teste?
Ué, usando IF e ELSE.
A diferença é que vamos fazer esse outro teste dentro o else,
Ou seja, estamos aninhando as estruturas de controle IF e ELSE, colocando uma dentro da outra.
Nosso código vai ficar assim:
print('1. Corinthians') print('2. Flamengo') resposta = int (input('Qual melhor time: ') ) if resposta == 1: print('Você deve ser corinthiano') else: if resposta == 2: print('Você deve torcer Flamengo') else: print('Certamente você não torce Corinthians nem Flamengo')
Nossa lógica é a seguinte: Se digitar 1, ok é corintiano.
Se não for 1, vai pro ELSE e vamos fazer outro teste.
Dentro do ELSE, colocamos um IF pra testar se ele digitou 2.
Se sim, ok é flamenguista.
Se não for, cai dentro do ELSE, mas desse novo ELSE, ok?
O usuário só cai dentro desse novo ELSE se não digitar nem 1 e nem o 2.
Faz sentido, né?
Aninhar e Indentar em Python
Note algumas coisas sobre IF e ELSEPara cada IF, temos um ELSE.
Podemos criar um IF sem um ELSE, mas não existe ELSE sem IF
Você tem sempre que alinhar o IF de seu ELSE
Se usar IF ELSE aninhado, ele deve estar abaixo e um pouco mais pra frente que o IF ou ELSE anterior
O molde de IF ELSE's aninhados é o seguinte:
if condição1: # Primeiro IF [codigo] if condição2: # Segundo IF [codigo] else: # ELSE é do segundo IF [codigo] else: # ELSE do primeiro IF if condição3: [codigo] else: # ELSE do terceiro IF [codigo]
Não tem limite de aninhamento.
O importante é um estar dentro (aninhado) do outro, e alinhado (indentado).
Ok ?
IF e ELSE aparecem aos pares, e o Python só vai saber a qual IF o ELSE pertence, de acordo com o alinhamento, por isso você deve deixar tudo muito bem aninhado e organizado.
Por isso que dizemos que o código Python é 'organizado', pois somos obrigados a deixar tudo bem alinhado, senão não funciona seu código.
Interessante, isso do if else alinhado
ResponderExcluirMuito boa a explicação. Parabéns pela dedicação e empenho de vocês.
ResponderExcluirExcelente conteúdo, nota 1000
ResponderExcluirUm elif seria melhor nesse caso.
ResponderExcluirMelhor curso!
ResponderExcluirUsar if dentro de if usar if chama-se aninhar. Tá certo?
ResponderExcluir