Execução condicional e alternativas: if, if-else e if-elif-else

Tópicos e Objetivos

Ao final dessa aula você deverá saber:

  • Usar o comando de execução condicional if;

  • Usar e identificar situações onde a utilização do comando if-else é mais adequada.

  • Usar e identificar situações onde a utilização do comando if-elif-else é mais adequada.

  • Usar o operador de divisão inteira //

  • Usar o operador de resto de divisão %

Introdução

O comando if (que significa se em português) permite que uma parte do programa seja executada apenas quando uma condição for verdadeira. A sintaxe do comando ìf é a seguinte:

if condição_do_if:
    # bloco executado se a condição for verdadeira
    comando_1
    comando_2
    ...
    comando_m       # último comando do bloco

comando_após_if

Apenas caso a condição_do_if for verdadeira, o bloco contendo os comandos comando_1 a comando_m é executado. Caso contrário, esse bloco não é executado e a execução do programa continua com o comando comando_após_if.

Dessa forma, o if permite resolver problemas do tipo:

Como funciona esse trecho?

Após ler a idade (linha 1), o programa testa se a idade é maior ou igual a 18 na linha 3. Se a condição for verdadeira, o programa imprime a mensagem de parabéns (linha 4) e depois imprime “fim”. Caso contrário, o programa pula o bloco dentro do if e imprime “fim” direto.

Comando if-else

Em várias ocasiões é necessário executar blocos de forma alternativa. Nesses casos, podemos utilizar o comando if-else (que significa se-senão em português), cuja sintaxe é a seguinte:

if condição:
    # bloco contendo comandos a serem executados
    dentro_do_if_1
    dentro_do_if_2
    ...
    dentro_do_if_m
    else:
    dentro_do_else_1
    dentro_do_else_2
    ...
    dentro_do_else_n


    comando_apos_if

Apenas caso a condição for verdadeira, o bloco contendo os comandos comando_1 a comando_n é executado. Caso contrário, esse bloco não é executado e a execução do programa continua com o comando comando_apos_if.

Esse comando nos ajuda a resolver problemas como, por exemplo, determinar se um número é par ou ímpar:

Como funciona esse trecho?

Após n receber um número, o programa testa, na linha 3, se n é múltiplo de 2 usando o operador aritmético %. Esse operador determina o resto da divisão de n por 2. Caso a condição seja verdadeira (= True), o programa imprime que o número é par. Na linha 5 o programa recalcula o resto da divisão de n por 2 e verifica se o resto é diferente de zero, ou seja, se o número não é múltiplo de 2 e, nesse caso, imprime que o número é ímpar.

Observe que a condição dos ifs nas linhas 3 e 5 foram executadas, mesmo quando na linha 3 o número já foi identificado como par, o teste da linha 5 é realizado.

Embora essa solução produza resultados corretos, o uso do comando if-else torna o programa bem mais elegante e seguro:

Como funciona esse trecho?

Esse trecho usando if-else é muito semelhante ao anterior usando dois ifs. A grande diferença agora é que na linha 5 temos um else. Nesse caso, a condição do if é testada apenas uma vez e, caso verdadeira, o programa imprime que o número é par e, caso contrário, o programa vai direto para o bloco dentro do else, imprimindo que o número é ímpar, sem precisar perder tempo calculando outro teste.

Essa construção é mais elegante pois evita a computação de “n não é múltiplo de 2” e torna o programa mais fácil de ler, corrigir e modificar.

Um if-else é utilizado quando temos apenas duas alterativas. Quando o número de alternativas é maior, podemos aninhar comandos if-else. Por exemplo, considere o problema de ler a nota de um aluno para verificar se ele está reprovado, está de recuperação ou foi aprovado. Suponha que as notas são números inteiros entre 0 e 100. Um aluno está reprovado se sua nota e menor que 30, está de recuperação se sua nota é um inteiro entre 30 e 49 e está aprovado se sua nota é pelo menos 50. Uma solução aninhando comandos if-else seria:

Como funciona esse trecho?

Observe com atenção a tabulação desse programa, que mostra um if-else na mesma coluna da linha 1 e, dentro do primeiro else, vemos um outro comando if-else. Por esse deslocamento sabemos que o segundo if só será testado caso a condição do primeiro if (da linha 3) seja falsa.

Vamos simular esse trecho usando 3 testes: nota 2 (que deve resultar em reprovado), nota 4 (que deve resultar em recuperação) e nota 7 que deve resultar em aprovado.

Quando a nota é 2, a condição do primeiro if é verdadeira e assim o programa imprime “Reprovado”. Quando a condição do if é verdadeira o else correspondente não é executado, e o programa termina imprimindo “fim”.

Quando a nota é 4, a condição do primeiro if é falsa e o bloco dentro do else correspondente (que está na mesma coluna desse if) é executado, ou seja, o segundo if-else é executado. Para isso a condição do if na linha 6 é testada, resultando em verdadeiro. O programa imprime então “Recuperação”, o else correspondente não é executado e o programa termina com “fim”.

Finalmente quando a nota é 7, a condição dos dois ifs é falsa e, nesse caso, o bloco dentro do segundo else (linha 9) é executado. Assim o programa imprime “Aprovado” e em seguida imprime “fim”.

Observe que esse mesmo trecho de código poderia ser escrito apenas com ifs da seguinte forma:

Dica de estilo

Embora seja possível utilizar apenas ifs, o uso de if-else é bem mais elegante pois torna o código mais simples, fácil de entender, de encontrar erros e de corrigi-los. Por esses motivos, sempre que possível, prefira usar if-else ao invés de apenas ifs.

Comando if-elif-else

Para simplificar ainda mais o código de programas com if-else aninhados, o Python oferece o comando if-elif-else.

Usando esse comando poderíamos escrever o programa para saber a condição de um aluno da seguinte forma:

O elif portanto é apenas uma contração do else if que torna mais claro o tratamento das várias alternativas, encadeando as condições. Blocos de elif podem ser repetido várias vezes. Suponha por exemplo que gostaríamos de conhecer os alunos aprovados com louvor, ou seja, com nota superior a 90. Nesse caso, o código seria o seguinte.

A sintaxe do comando if-elif-else é a seguinte:

if condição:
    # bloco contendo comandos a serem executados
    dentro_do_if_1
    dentro_do_if_2
    ...
    dentro_do_if_p

elif condição elif1:
    dentro_do_elif1_1
    dentro_do_elif1_2
    ...
    dentro_do_elif1_m1

elif condição elif2:
    dentro_do_elif2_1
    dentro_do_elif2_2
    ...
    dentro_do_elif2_m2

# outros possíveis blocos de elif, cada um com a sua condição

elif condição elifk:
    dentro_do_elifk_1
    dentro_do_elifk_2
    ...
    dentro_do_elifk_mk

else:
    dentro_do_else_1
    dentro_do_else_2
    ...
    dentro_do_else_q


comando_apos_if

Ou seja, o if-elif-else pode ter um ou mais blocos com elif, cada um com a sua condição específica. Cada bloco (condição) é testado um de cada vez, até que uma condição seja satisfeita e apenas os comandos dentro desse bloco são executados. Quando nenhuma condição é satisfeita, os comandos dentro do else são executados. Assim, não é necessário que haja um else no final.

Faça experimentos com o trecho de código a seguir.

Exercícios

Exercício 1

Dados um número inteiro n, n > 0, e uma sequência com n números inteiros, determinar a soma dos pares. Por exemplo, para a sequência

6 2 7 0 5 8 4

o seu programa deve escrever o número 14.

Dica: para resolver esse exercício utilize o operador “%”, que retorna o resto da divisão. Assim:

1 % 3 é 1
2 % 3 é 2
3 % 3 é 0
4 % 3 é 1

Exercício 2

Dados um número inteiro n, n > 0, e uma sequência com n números inteiros, determinar quantos números da sequência são pares e quantos são ímpares. Por exemplo, para a sequência

6   -2   7   0  -5   8  4

o seu programa deve escrever o número 4 para o número de pares e 2 para o de ímpares.

Tente escrever a sua solução abaixo primeiro e, depois, clique aqui para ver algumas soluções.

Exercício 3

Dados um número inteiro n, n > 0, e um dígito d. 0 <= d <= 9, determinar quantas vezes d ocorre em n.

Exemplo 1:

>>> Digite o valor de n (n > 0): 63543
>>> Digite o valor de d (0<=d<=9): 3
O dígito 3 ocorre 2 vezes em  63543

Exemplo 2:

>>> Digite o valor de n (n > 0): 0
>>> Digite o valor de d (0<=d<=9): 0
O dígito 0 ocorre 0 vezes em  0

Exemplo 3:

>>> Digite o valor de n (n > 0): 0110
>>> Digite o valor de d (0<=d<=9): 0
O dígito 0 ocorre 1 vezes em  110

Dica: para resolver esse exercício utilize o operador “//”, que realiza a divisão inteira. Assim:

1 // 3 é 0
5 // 3 é 1
8 // 3 é 2
19 // 10 é 1

Tente escrever a sua solução abaixo primeiro e, depois, clique aqui para ver uma solução.

Exercício 4

Exercício 10 da lista sobre inteiros.

Dizemos que um número inteiro positivo é triangular se ele é o produto de três numeros inteiros consecutivos. Por exemplo, 120 é triangular, pois

>>> 4 * 5 * 6
120

Dado um número inteiro positivo n, verificar se n é triangular.

Tente escrever a sua solução abaixo primeiro e, depois, clique aqui para ver uma solução.

Exercício 5

Exercício 18 da lista sobre inteiros.

Escreva um programa que leia três números naturais e verifica se eles formam os lados de um triângulo retângulo.

Exercício 6

Exercício 19 da lista sobre inteiros.

Escreva um programa que leia três números inteiros e os imprima em ordem crescente.

Next Section - Indicadores de passagem