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.
Para saber mais¶
Leituras
Vídeos