Escolar Documentos
Profissional Documentos
Cultura Documentos
PROPÓSITO
Esclarecer as estruturas de decisão e de repetição e as estruturas disponíveis em Python.
PREPARAÇÃO
Antes de iniciar o conteúdo deste tema, instale em seu computador a versão Python 3.7.1.
Busque um tutorial sobre Instalação do Interpretador Python 3 e a IDE PyCharm.
OBJETIVOS
MÓDULO 1
MÓDULO 2
MÓDULO 4
INTRODUÇÃO
Os primeiros programas que são desenvolvidos em qualquer linguagem normalmente têm a
mesma sequência de instruções a serem executadas. Frequentemente, começamos com um
programa que só exibe na tela uma mensagem, depois recebemos dados do usuário e os
processamos de alguma forma, para depois exibir algum resultado.
AS LINGUAGENS DE PROGRAMAÇÃO EM
GERAL – E PYTHON ESPECIFICAMENTE –
OFERECEM AS ESTRUTURAS DE DECISÃO E AS
DE REPETIÇÃO PARA FACILITAR A
PROGRAMAÇÃO.
MÓDULO 1
INTRODUÇÃO
Tomamos decisões o tempo todo: ao acordar, escolhemos se vamos levantar ou não. Em
seguida, escolhemos se vamos tomar banho ou escovar os dentes. Poderíamos listar uma
infinidade de situações em que decidimos por A ou B ao longo de um dia. No mundo da
computação, os exemplos são outros.
CONCEITOS
As estruturas de decisão permitem que partes do código-fonte do programa sejam executadas
e outras partes não sejam, dependendo de critérios definidos pelo desenvolvedor. Decidir qual
ação executar, condicionada a algum critério objetivo, é algo que fazemos o tempo todo.
EXEMPLO
Decidimos, por exemplo, se o banho será quente ou frio. Provavelmente, essa decisão estará
condicionada à temperatura ambiente no momento do banho.
O exemplo do banho e temperatura externa tem apenas uma condição, mas já ilustra como
processos decisivos podem ser feitos. Essas estruturas, no entanto, costumam ser mais
complexas. Em Python, elas podem ser de caminho único ou de caminho duplo. Vamos
analisar cada uma delas a partir de agora.
A ESTRUTURA DE DECISÃO IF
Considere a situação em que você quer informar aos pais se eles devem vacinar seu filho
contra a gripe. A vacinação ocorre para crianças com menos de 5 anos completos. Uma forma
possível de orientar esses pais é:
Observe alguns pontos importantes:
A orientação sobre vacinar a criança só será exibida caso a idade seja menor que 5 anos.
A mensagem final de despedida será exibida em todos os casos.
Em Python, a estrutura if permite que haja um bloco de instruções a serem executadas caso
uma condição seja verdadeira. Por isso, ela é chamada de estrutura de caminho único. Em
geral, o formato da estrutura if é:
if <condição>:
Bloco de código que será executado caso condição seja True
Instrução fora do if
O critério para executar a linha 3 é que a condição (da linha 2) seja verdadeira (True), ou
seja, que a idade seja menor que 5;
Nesse caso, só havia uma instrução a ser executada caso a condição fosse verdadeira. Mas
nem sempre será assim.
ATENÇÃO
É preciso diferenciar o que está dentro do if do conteúdo do que está fora da condicional. Isso
é feito pela indentação.
De acordo com a PEP8 [1], é necessário utilizar 4 (quatro) espaços para deslocar para a direita
todas as instruções que estiverem dentro do if. Dessa maneira, todas as linhas que estiverem
com 4 espaços abaixo do if farão parte do bloco que só será executado caso a condição seja
verdadeira. Veja um exemplo na figura a seguir:
A estrutura if, que acabamos de estudar, não apresenta um caminho alternativo para o caso de
a condição ser falsa. Em outras palavras, caso a condição seja falsa, nada especial será
executado.
Usando o mesmo exemplo da vacinação, imagine que desejássemos exibir uma mensagem
para o caso em que a criança NÃO é menor de 5 anos. O fluxo pode ser representado como na
figura a seguir:
if <condição>:
Bloco de código que será executado caso condição seja True
else:
Bloco de código que será executado caso condição seja False
Instrução fora do if
Voltando ao nosso exemplo da vacinação, suponha que houvesse uma orientação diferente, de
acordo com as opções a seguir:
Caso seja falsa (idade maior ou igual a 5), haverá um novo teste, com a segunda
condição (idade = 5);
Caso a segunda condição seja verdadeira (idade igual a 5), a informação é “a vacina
estará disponível em breve”;
Caso a segunda condição seja falsa (idade maior que 5), a informação é “a vacinação só
ocorrerá daqui a 3 meses”;
Assim, o bloco 2 (linhas 7 e 8) somente será executado caso a segunda condição seja
verdadeira;
Caso a segunda condição seja falsa, o bloco 3 será executado (linhas 10 e 11);
Já a linha 12 será executada em todos os casos, porque está fora de todas as estruturas
if-else.
ATENÇÃO
DICA
Nesses casos, uma forma de reduzir o código é utilizar a estrutura elif. Ela presta exatamente
a mesma função, mas permite um código mais limpo e menor.
if <condição 1>:
Bloco de código que será executado caso condição seja True
elif <condição 2>:
Bloco de código que será executado caso condição 1 seja False e condição 2 seja True
else:
Bloco de código que será executado caso condição 1 seja False e condição 2 seja False
Instrução fora do if
CONDIÇÕES COMPOSTAS
Vale ressaltar que as condições dos exemplos deste módulo foram simples, ou seja, apenas
um valor booleano (True ou False). Porém, isso não é regra. É possível utilizar condições
compostas, ou seja, operações com mais de um valor booleano (utilizando o and ou o or, por
exemplo).
RESUMO
No vídeo a seguir o professor apresentará um resumo dos principais conceitos abordados no
módulo 1. Assista:
VERIFICANDO O APRENDIZADO
MÓDULO 2
INTRODUÇÃO
Na nossa vida cotidiana, é comum executarmos ações repetidas para uma lista de itens. Por
exemplo: ao fazer compras, percorremos toda a lista para verificar se cada item dela foi
realmente colocado no carrinho.
Outro exemplo é a verificação de itens para sairmos de casa: carteira, celular e chave.
Passamos mentalmente por essa lista e verificamos, item a item, se já o pegamos.
Neste módulo, você vai conhecer a estrutura de repetição com variável de controle. Essa
estrutura permite executar ações repetidas, como os exemplos, para cada item de uma lista.
CONCEITOS
As estruturas de repetição permitem que partes do código-fonte do programa sejam
executadas repetidamente, até que alguma condição indique que essa repetição deve ser
interrompida.
Neste módulo, a repetição – também chamada de laço – será controlada por uma variável. Ou
seja, uma variável indicará se o laço deve ou não continuar a ser executado. Chamamos essa
estrutura de repetição em Python de for.
Porém, antes de começar o for, vamos conhecer uma função de Python que gera uma lista de
valores numéricos. Essa lista ajudará a verificar a repetição e deixará mais claro o
entendimento do laço.
EXEMPLO
Para que a sequência não comece em 0, podemos informar o início e o fim como parâmetros,
lembrando que o parâmetro fim não entra na lista (exclusive o fim). O padrão é incrementar
cada termo em uma unidade. Ou seja, a chamada range(2, 7) cria a sequência (2, 3, 4, 5, 6).
Também é possível criar sequências mais complexas, indicando os parâmetros de início, fim e
passo, nessa ordem. O passo é o valor que será incrementado de um termo para o próximo.
EXEMPLO
A ESTRUTURA FOR
A estrutura for permite que um bloco de instruções seja repetido para todos os itens de uma
sequência. O laço for tem, em geral, o seguinte formato:
Vamos começar com um exemplo simples: imprimir todos os elementos de uma sequência
criada com a chamada range().
A linha 1 mostra a criação do laço, com a variável item percorrendo a sequência (0, 1, 2),
criada pela chamada range(2, 9, 3).
A linha 2 indica a instrução que será executada para cada repetição desse laço.
O laço for executa a instrução da linha 2 três vezes, uma para cada elemento da sequência (2,
5, 8).
sequência 2 5 8
Iteração 1 do laço item = 2
STRING
Suponha que você quer soletrar o nome informado pelo usuário. Uma possível implementação
está na figura a seguir:
A linha 1 faz com que a palavra inserida pelo usuário seja armazenada na variável nome.
A linha 2 mostra a criação do laço, com a variável letra percorrendo a sequência de caracteres
armazenada na variável nome.
A linha 3 indica a instrução que será executada para cada repetição desse laço.
ATENÇÃO
O laço for executa a instrução da linha 3 tantas vezes quantos forem os elementos da
sequência que está na variável nome.
Supondo que o usuário entre com o nome Laura, as iterações ocorrem de acordo com a tabela
a seguir:
nome L a u r a
Para isso, temos que usar a estrutura de repetição (para que os números variem de 1 a 10) e a
estrutura de decisão (para testar se o número é par ou ímpar). Ou seja, podemos usar o laço
for em conjunto com a estrutura if (ou if-else).
Em cada iteração do laço for, a variável num assume o valor de um inteiro dessa
sequência. Na linha 2, testamos se o resto da divisão de num por 2 é zero (lembrando do
operador de comparação ==);
Se o resto for zero, significa que a variável num é par (naquela iteração). Então, é
impressa a mensagem que ela é par (linha 3);
Caso contrário (linha 4) – ou seja, se o resto da divisão de num por 2 não for zero – a
variável num é ímpar (naquela iteração). Então, é impressa a mensagem que ela é ímpar
(linha 5).
Para resolver esse problema, vamos utilizar uma variável chamada soma. Ela começa com
valor zero e será utilizada para armazenar o valor da soma parcial a cada termo que for
adicionado.
soma ← 0
Ler(limite)
soma = soma + x
A linha 2 representa o pedido de entrada do valor por parte do usuário e armazena esse
valor na variável limite;
A linha 3 cria o laço for, com a variável num percorrendo a sequência criada pela
chamada range(1, limite + 1) – ou seja, os inteiros de 1 a limite. Em cada iteração do
laço for, a variável num assume o valor de um inteiro dessa sequência;
Na linha 4, a variável soma armazena o valor que ela tinha anteriormente somado ao
valor atual da variável num;
A linha 5 representa a impressão da mensagem final, com a soma dos inteiros positivos
desde 1 até limite.
soma soma
num
(no início da iteração) (no final da iteração)
Iteração 1 do for 0 1 1
Iteração 2 do for 1 2 3
Iteração 3 do for 3 3 6
Iteração 4 do for 6 4 10
Iteração 5 do for 10 5 15
Logicamente, o número de iterações vai depender da variável limite, cujo valor foi informado
pelo usuário. Assim, a variável soma vai acumulando, a cada iteração, o valor anterior somado
ao valor corrente da variável num.
Incrementando um pouco mais nosso problema atual, considere que também precisamos
imprimir, ao final da execução do programa, a média aritmética dos inteiros positivos de 1 até o
limite informado pelo usuário.
Uma variável utilizada como contador serve, essencialmente, para contar. Porém, ele será
utilizado neste problema como uma ferramenta ainda mais útil. Vale lembrar que a média
aritmética de um conjunto de valores é calculada por:
soma, contador ← 0
Ler(limite)
contador = contador + 1
Iteração 1
0 1 1 1
do for
Iteração 2
1 2 3 2
do for
Iteração 3
3 3 6 3
do for
Iteração 4
6 4 10 4
do for
Iteração 5
10 5 15 5
do for
ATENÇÃO
Vale observar que, especificamente neste exemplo, a variável num poderia ter sido usada
como denominador do cálculo da média, já que ela tem os mesmos valores que a variável
contador em todas as iterações. Porém, isso só se aplica a este caso.
Além disso, existe outra possibilidade de solução, utilizando como denominador o tamanho da
sequência criada pela chamada range(1, limite+1). Para obter esse tamanho, utilizamos o
método len(sequência), que retorna o tamanho de sequência. Ou seja, o denominador poderia
ter sido len(range(1, limite+1)). Porém, o objetivo deste exemplo foi, entre outras funções,
apresentar o uso do contador.
0 1 2 3 4
Iteração 1 nome
‘Laura’
do laço =
Iteração 2 nome
‘Lis’
do laço =
Iteração 4 nome
‘Enzo’
do laço =
Iteração 5 nome
‘Arthur’
do laço =
RESUMO
No vídeo a seguir o professor apresentará um resumo dos principais conceitos abordados no
módulo 2. Assista:
VERIFICANDO O APRENDIZADO
MÓDULO 3
INTRODUÇÃO
Na introdução do módulo anterior, abordamos a lista de compras e a nossa lista mental para
sair de casa: carteira, celular e chave. Já vimos que a repetição de um bloco de instruções é
algo extremamente útil quando programamos.
Porém, nem sempre o laço for será o mais indicado para controlar essas repetições. Você
consegue imaginar o motivo?
O laço for permite um número determinado de repetições, uma vez que as iterações são
sobre uma sequência finita de itens. Vamos ver agora como tratar o caso em que precisamos
de um número indeterminado de repetições.
CONCEITOS
Nos módulos anteriores deste tema, você foi apresentado às estruturas de decisão (if e if-else)
e de repetição com variável de controle (for). Agora, você será apresentado a outra estrutura
de repetição, mas que depende de uma condição. É como se estivéssemos mesclando a
repetição do for com o teste condicional do if. O nome desta estrutura é while.
A ESTRUTURA WHILE
while <condição>:
Bloco que será repetido enquanto a condição for verdadeira
Instrução fora do while
Ler(palavra)
Ler(palavra)
A linha 1 representa a solicitação ao usuário para que ele insira uma palavra, que será
armazenada na variável palavra;
A linha 2 cria o laço while, que depende da condição <valor da variável palavra ser
diferente de ‘sair’>;
A linha 3 será repetida enquanto a condição for verdadeira, ou seja, enquanto o valor da
variável palavra for diferente de ‘sair’. Quando o valor da variável palavra for igual a ‘sair’,
a condição do laço while será falsa e o laço será encerrado;
Perceba que ao digitar ‘sair’ logo na primeira solicitação, a linha 3 do nosso programa não é
executada nenhuma vez. Ou seja, o programa nem chega a entrar no laço while.
Em outras linguagens como C ou Java, existe outra estrutura muito semelhante ao while,
chamada do-while. A diferença básica entre elas é o momento em que a condição é testada.
ATENÇÃO
No laço while, a condição é testada antes da iteração. No laço do-while, a condição é testada
após a iteração. Em outras palavras, o laço while testa e executa.
O laço do-while executa e testa. Infelizmente, a estrutura do-while NÃO existe em Python.
Isso não chega a ser um grande problema, porque podemos adaptar nosso programa e
controlar as repetições com o laço while, como foi feito no exemplo anterior.
OPERAÇÃO 1
Considere que queremos saber depois de quantos anos uma aplicação, com juros anuais
informados pelo usuário, terá atingido 50% de rendimento sobre o valor aplicado inicialmente.
Ou seja, se a aplicação inicial foi de R$1.000,00, quantos anos serão necessários para atingir o
valor de R$1.500,00?
Veja que a aplicação de R$1.000,00 precisa atingir R$1.500,00, ou seja, precisa ser
multiplicada por 1,5.
ATENÇÃO
Além da variável fator, utilizaremos a variável contador para sabermos quantos anos passam
até atingirmos nosso objetivo.
fator ← 1
contador ← 0
Ler(taxa)
contador = contador + 1
Iteração 1 do
1 1 + 0,08*1 = 1,08 1
while
Veja que a rentabilidade desejada de 50% é atingida durante o sexto ano. Como estamos
trabalhando com anos completos, é necessário então completar o sexto ano, levando à
resposta final de 6 anos.
OPERAÇÃO 2
Vamos analisar uma progressão geométrica que tem termo inicial 1 e razão 0,5.
RELEMBRANDO
A progressão geométrica é aquela em que cada termo é calculado a partir do termo anterior,
multiplicado pela razão.
1 1 1 1
1, , , , , …
2 4 8 16
Observe que a progressão geométrica acima é infinita, não tem limite de termos. Caso nós
quiséssemos saber a soma dos termos, como poderíamos agir?
Como calcular a soma de uma sequência que não tem fim? Veja que os termos vão ficando
cada vez menores, mas nunca chegam de fato a zero.
É necessário, então, determinar quando paramos de somar. Suponha que queremos ter
precisão de 0,01. Ou seja, quando a soma for atualizada apenas na 3ª casa decimal, podemos
parar de somar.
Para resolver o problema, vamos utilizar uma variável chamada termo. Utilizaremos também a
variável soma para manter atualizado o valor da soma dos termos. Além dessas, utilizaremos a
variável contador para obtermos o número de termos necessários até que paremos de somar.
termo ← 1
soma ← 1
contador ← 1
termo = termo*0,5
contador = contador + 1
A linha 2 cria o laço while, que depende da condição <valor da variável termo ser maior
ou igual a 0,01>;
while True:
Bloco que será repetido indefinidamente
Como exemplo, suponha que você deseja criar uma aplicação que permanece por meses ou
anos sendo executada, registrando a temperatura ou a umidade de um ambiente. Logicamente,
estamos supondo que você tenha essa informação disponível pela leitura de algum sensor.
ATENÇÃO
É necessário tomar cuidado e ter certeza que seu uso é realmente necessário, para evitar
problemas de consumo excessivo de memória.
RESUMO
No vídeo a seguir o professor apresentará um resumo dos principais conceitos abordados no
módulo 3. Assista:
VERIFICANDO O APRENDIZADO
MÓDULO 4
Reconhecer as instruções auxiliares de controle de iteração
INTRODUÇÃO
Neste tema, você foi apresentado a estruturas de decisão e de repetição. Para aumentar seu
poder sobre essas estruturas, é necessário conhecer as instruções auxiliares. Elas permitem
que você pule ou interrompa iterações, entre outras funcionalidades.
CONCEITOS
As instruções auxiliares interferem no comportamento das estruturas que você aprendeu,
permitindo que o desenvolvedor, de forma consciente e controlada, altere o padrão esperado
para as estruturas if-else e os laços for e while.
A INSTRUÇÃO BREAK
A instrução break interrompe as repetições dos laços for e while. Quando a execução do
programa chega a uma instrução break, a repetição é encerrada e o fluxo do programa segue
a partir da primeira instrução seguinte ao laço.
Para exemplificar o uso da instrução break, vamos voltar ao primeiro exemplo do laço while,
utilizando o laço infinito. O laço será encerrado quando o usuário inserir a palavra ‘sair’. Veja a
figura a seguir:
A linha 1 cria o laço infinito, em que o bloco – composto pelas linhas 2, 3 e 4 – será
repetido indefinidamente;
Somente após a saída do laço será executada a linha 5, que representa a impressão da
mensagem de saída do laço ao usuário.
Caso haja vários laços aninhados, o break será relativo ao laço em que ele estiver inserido.
Veja a figura a seguir:
Veja um exemplo de execução desse programa:
A INSTRUÇÃO CONTINUE
A instrução continue também atua sobre as repetições dos laços for e while, como a instrução
break, mas ela não interrompe todas as repetições do laço. A instrução continue interrompe
APENAS a iteração corrente, fazendo com que o laço passe para a próxima iteração.
O exemplo a seguir imprime todos os números inteiros, de 1 até 10, pulando apenas o 5. Veja
uma implementação:
Para ressaltar a diferença entre as instruções break e continue, vamos agora alterar a linha 3
do nosso programa, trocando a instrução continue pela instrução break. Veja a nova
execução:
A INSTRUÇÃO PASS
SAIBA MAIS
Claramente, seria possível reescrever a condição do if-else, para que pudéssemos transformá-
la em um if simples, sem else. Porém, o objetivo aqui é mostrar o uso da instrução pass.
RESUMO
No vídeo a seguir o professor apresentará um resumo dos principais conceitos abordados no
módulo 4. Assista:
VERIFICANDO O APRENDIZADO
CONCLUSÃO
CONSIDERAÇÕES FINAIS
Neste tema, você aprendeu os conceitos de estruturas de decisão em Python, além das
estruturas de repetição com uma variável de controle e baseado em uma condição. O uso
correto destes conceitos é essencial na sua jornada de formação como programador.
Recomendamos que fique atento aos detalhes e procure sempre programar de forma
organizada, utilizando os comentários e nomes de variáveis que ajudem a entender seu
significado. Isto vai evitar erros e tornar sua experiência mais agradável.
PODCAST
AVALIAÇÃO DO TEMA:
REFERÊNCIAS
PERKOVIC, L. Introdução à computação usando Python: um foco no desenvolvimento de
aplicações. Rio de Janeiro: LTC, 2016.
CONTEUDISTA
Humberto Henriques de Arruda
CURRÍCULO LATTES