Enviar um café pro programador

Estruturas Aninhadas - IF ELSE dentro de IF ELSE

No tutorial de Python anterior de nosso curso grátis, falamos em mais detalhes sobre a estrutura de controle IF e apresentamos a sua companheira ELSE.

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 ELSE
Para 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.

6 comentários: