Estruturas de repetição
Sintaxe while
A cláusula de repetição while permite que um bloco de código seja executado, repetidamente, enquanto a condição for verdadeira (True). Sua sintaxe contem:
- palavra reservada while
- uma condição ou expressão booleana
- dois pontos (:)
- bloco de código indentado (4 espaços), a ser executado se a condição while é True.
#Sintaxe while
while condição :
instruções
Algoritmo para imprimir os números de 1 a 10:
#Algoritmo - imprimir de 1 a 10
num = 1
while num <= 10:
print(num)
num = num+1
Na linha 02 temos a instrução while com a condição de que enquanto o valor da variável num for menor ou igual a 10, as instruções das linhas 03 e 04 serão executadas. Note a indentação ou os 4 espaços necessários para identificar as instruções que serão executadas repetidamente.
Quando trabalhamos com o bloco while é importante controlamos a cláusula condicional, para que ela se torne falsa (False) e finalize a execução do seu laço. Caso contrário teremos um loop infinito, seu código nunca terminará de executar.
Chamamos de iteração cada vez que o laço ou o bloco de código é executado. Do exemplo anterior, o laço possui 10 iterações, e antes que cada iteração seja executada, a cláusula condicional é avaliada.
Veja o exemplo de um loop que não se encerra enquanto o usuário não digita a palavra Python:
#Algoritmo - qual linguagem? (qualLinguagem.py)
linguagem = ""
while linguagem != "Python":
print("Qual linguagem estamos estudando? ")
linguagem = input()
print("Parabens! Voce acertou!")
Na linha 01 iniciamos uma variável do tipo string com valor em branco. Na linha 02, iniciamos o nosso bloco while, que executará o bloco de código das linhas 03 e 04, enquanto o valor da variável linguagem não é Python.
Somente quando o bloco de repetição for finalizado (quando o usuário digitar Python), a linha 05 será executada.
#Exemplo - execução de qualLinguagem.py
Qual linguagem estamos estudando?
c
Qual linguagem estamos estudando?
C++
Qual linguagem estamos estudando?
Java
Qual linguagem estamos estudando?
python
Qual linguagem estamos estudando?
Python
Parabens! Voce acertou!
Atribuição composta
A atribuição composta é uma forma simplificada de reutilizar a mesma variável nas operações aritméticas, como por exemplo +=, -=, *=, /=.
A expressão 2, abaixo, é a simplificação da expressão 1.
#Exemplo - sintaxe atribuição composta
#expressão 1
num = num + 5;
#expressão 2
num += 5;
Experimente algumas atribuições compostas no shell.
#Atribuição composta no shell
>>> num = 10
>>> print(num)
10
>>> num += 5
>>> print(num)
15
>>> num *= 2
>>> print(num)
30
>>> num %= 2
>>> print (num)
0
Vamos a outro exemplo, é comum o uso do laço while para deixar um programa executando até que o usuário digite algum valor para sair e finalizar a execução.
No exemplo abaixo, enquanto o usuário não digitar sair, o programa continuará executando, irá imprimir na tela o que o usuário digitou.
#Algoritmo - executeDigiteSair.py
texto = "\n Digite 'sair' para encerrar o programa"
texto += "\n Digite alguma mensagem: "
mensagem = ""
while mensagem != "sair":
mensagem = input(texto)
print(mensagem)
Criamos 2 variáveis, a variável texto para imprimir uma mensagem padrão ao usuário e a variável mensagem que receberá o valor digitado pelo usuário.
Observe o uso do “\n” para escrever em uma nova linha, e o uso do “+=” nas linhas 01 e 02.
Na linha 06 temos nosso laço principal, enquanto o valor de mensagem não for “sair”, o texto será mostrado e o usuário deverá digitar algo que será impresso na tela.
#Execução - executeDigiteSair.py
Digite 'sair' para encerrar o programa
Digite alguma mensagem: Alguma coisa
Alguma coisa
Digite 'sair' para encerrar o programa
Digite alguma mensagem: teste
teste
Digite 'sair' para encerrar o programa
Digite alguma mensagem: sair
sair
Sintaxe for
O laço for é uma estrutura de repetição alternativa ao laço while. Ele geralmente é aplicado quando já sabemos a quantidade de interação que vamos executar.
Sua sintaxe contem:
- palavra reservada for
- um nome de variável
- a palavra reservada in
- a chamada da função range que pode receber até três argumentos ou valores
- dois pontos (:)
- bloco de código indentado (4 espaços), a ser executado enquanto a condição é True.
#Sintaxe for
for <variavel> in range(<valor 1>, <valor 2>, <valor 3>):
instruções
Algoritmo para imprimir os números de 1 a 10:
#Algoritmo - imprimir de 1 a 10 usando for
for num in range(10):
print(num+1)
Para imprimirmos de 1 a 10 usando o for (linha 01), basta definirmos uma variável num que irá variar no intervalo de 10 (range(10)). A função range gerará números de ZERO a 9, por isso foi necessário na linha 02 somar o valor de num com 1.
Instruções break e continue
As instruções break e continue são palavras reservadas que só podem ser utilizadas dentro de laços de repetição.
Instrução break
A instrução break quando é executada, encerra a execução de um laço de repetição. Quando o intepretador Python encontra um comando break, automaticamente ele sairá de dentro do loop e continuará a execução normal do programa.
O exemplo abaixo irá imprimir somente até o número 7:
#Algoritmo - imprimir de 1 a 10 modificado com break
num = 1
while num <= 10:
print(num)
if num == 7:
break
num = num+1
Veja que o condicional do while é verdadeiro enquanto o num é menor ou igual a 10 (linha 02). Na linha 04 se o num é igual a 7, o comando break será executado e encerrará a execução do loop.
Também usando o break, podemos implementar outra solução para o problema qual linguagem:
#Algoritmo - qual linguagem com break
linguagem = ""
while True:
print("Qual linguagem estamos estudando? ")
linguagem = input()
if linguagem == "Python":
break
É muito comum encontrarmos algoritmos com uma condição infinita (while True), como do exemplo acima, mas no bloco de instruções temos o break para encerrar a execução do laço.
Instrução continue
Da mesma forma que a instrução break, a instrução continue deve estar dentro de um laço de repetição.
Quando uma instrução continue é encontrada, a execução da interação corrente é interrompida e a próxima interação executada.
Podemos imprimir os números múltiplos de 5 entre 1 e 30, usando o continue:
#Algoritmo - múltiplos de 5 entre 1 e 30
num = 0
while num <= 30:
num = num + 1
if (num % 5 != 0):
continue
print(num)
O algoritmo acima não é a única e nem a melhor forma de se imprimir os múltiplos de 5, mas foi escrito para explorarmos a sintaxe do continue da linha 05.
Na linha 01 inicializamos uma variável numérica num com valor ZERO e enquanto esta variável possuir o valor menor ou igual a 30 (bloco while - linhas 02 a 06), ela será incrementada de 1 unidade e na linha 04 se o resto da divisão for diferente de ZERO, a instrução continue será executada. A instrução continue sendo executada, automaticamente a linha 06 não será chamada (número não será impresso) e o laço executará a próxima iteração.
#Execução - múltiplos de 5 entre 1 e 30
5
10
15
20
25
30
Função range( )
Chamamos de argumento os valores que passamos para uma função.
Vimos que algumas funções não possuem argumentos, como o caso da função input( ) que espera algo ser digitado no teclado do computador, e outras que recebem um parâmetro como as funções print(‘Texto’) ou as funções str(valor), int(texto).
A função range utilizado nos laços de repetição for, pode receber até 3 argumentos, representando:
- ponto de início do laço (inclusivo)
- ponto final do laço (exclusivo)
- incremento da iteração
#Sintaxe range
range(argumento1, argumento2, argumento3)
Sintaxe range(argumento 1)
A função range( ) quando possui somente 1 argumento, o utilizará como ponto final do laço, não incluindo o valor.
#Algoritmo - usando range com um argumento
for i in range(5):
print(i)
O laço iniciará do valor ZERO e o incremento será de 1 unidade.
#Execução - usando range com um argumento
0
1
2
3
4
Note que o argumento é o valor 5 (linha 01) mas ele não será utilizado, o range será de ZERO a 4.
Sintaxe range(argumento 1, argumento 2)
Quando usamos 2 argumentos na função range( ), o primeiro argumento será o valor inicial e o segundo argumento o valor final não incluso da interação.
#Algoritmo - usando range com dois argumentos
for i in range(20, 30):
print(i)
Novamente o incremento será de 1 unidade.
#Execução - usando range com dois argumentos
20
21
22
23
24
25
26
27
28
29
Com o range(20, 30) serão impressos os valores de 20 a 29. O número 30 não é incluído.
Se você possuir um range decrescente, com 2 argumentos, não haverá execução do laço.
Agora é a sua vez! |
Reescreva o algoritmo “usando range com dois argumentos” utilizando um range(30, 20).
O que acontece na execução? Você receberá algum erro? Experimente! |
Sintaxe range(argumento 1, argumento 2, argumento 3)
Na sintaxe completa da função range( ) recebendo 3 argumentos, teremos o argumento 1 como ponto inicial, o argumento 2 como valor final exclusivo e o argumento 3 será o incremento em cada iteração.
Para entendermos, veja o exemplo abaixo imprimindo os valores de 0 a 30, de 5 em 5:
#Algoritmo - usando range com trê argumentos
for i in range(0, 31, 5):
print(i)
Com o terceiro argumento igual a 5, o incremento será de 5 unidades.
#Execução - usando range com três argumentos
0
5
10
15
20
25
30
O argumento de valor de iteração é flexível, aceitando valores negativos:
#Algoritmo - usando range com trê argumentos, negativo
for i in range(30, 9, -5):
print(i)
Com o terceiro argumento igual a -5, o incremento será subtraindo 5 unidades. Ou seja, com valores negativos, teremos um decremento.
#Execução - usando range com três argumentos, negativo
30
25
20
15
10
Gerando listas numéricas com range()
O método range() pode ser utilizado para gerar listas numéricas.
#Sintaxe range para gerar listas
<lista> = list(range(<arg1>, <arg2>, <arg3>))
arg2 e arg3 são opcionais no range()
Veja alguns exemplos usando o range() na criação de listas, o código abaixo não consegue ser executado no shell, você precisa criar o arquivo .py.
#Algoritmo - gerarListas.py
print("Exemplo 01")
lista = list(range(5))
print(lista)
print("Exemplo 02")
lista = list(range(10, 15))
print(lista)
print("Exemplo 03")
lista = list(range(30, 41, 2))
print(lista)
#Execução - gerarListas.py
Exemplo 01
[0, 1, 2, 3, 4]
Exemplo 02
[10, 11, 12, 13, 14]
Exemplo 03
[30, 32, 34, 36, 38, 40]
Funções max(), min(), sum()
Com listas numéricas, podemos aplicar algumas funções úteis da linguagem, como:
- max(), retorna o maior número da lista.
- min(), retorna o menor número da lista.
- sum(), retorna a soma dos números da lista.
#Execução - max(), min(), sum() no shell
>>> numeros = [4, 2, 8, 1]
>>> max(numeros)
8
>>> min(numeros)
1
>>> sum(numeros)
15
Percorrendo listas com for
Agora que sabemos o laço for, podemos utilizá-lo para acessar cada elemento de uma lista.
#Sintaxe for para percorrer listas
for <variavel_item> in <lista>:
instruções
#Algoritmo - imprimindo elementos de uma lista
#Imprime cada elemento de uma lista e calcula seu dobro
lista_numeros = [6, -20, 12, 1]
for num in lista_numeros:
print(f"Elemento: {num}")
print("O dobro: " + str(2 * num))
Na linha 01 temos um comentário indicando a funcionalidade do algoritmo, que define uma lista de números (linha 02), e no laço for, percorre cada item da lista e usa a variável num para armazená-los.
As instruções das linhas 04 e 05 pertencem ao bloco for, identificados pela identação ou 4 espaços, e imprimem o valor de num (linha 04) e o seu dobro (linha 05).
#Execução - imprimindo elementos de uma lista
Elemento: 6
O dobro: 12
Elemento: -20
O dobro: -40
Elemento: 12
O dobro: 24
Elemento: 1
O dobro: 2
Também é possível usar o laço for e percorrer sublistas. Por exemplo, dada uma lista de nomes, imprima os 3 primeiros e os 3 últimos elementos.
#Algoritmo - top3.py
ranking = ["Joao", "Jose", "Maria", "Igor", "Paulo", "Laura", "Andre", "Alex"]
print("Top 3: ")
for nome in ranking[:3] :
print("\t" + nome)
print("Last 3: ")
for nome in ranking[-3:] :
print("\t" + nome)
Nas linhas 04 e 09 usamos a sintaxe de sublistas para ler os elementos, também observe o “\t” para inserir 4 espaços na impressão da tela.
#Execução - top3.py
Top 3:
Joao
Jose
Maria
Last 3:
Laura
Andre
Alex
Usando função enumerate()
A função enumerate() retorna o índice e o item da lista.
#Algoritmo - exemploEnumerate.py
lista_cor = ["preto", "branco", "vermelho"]
for indice, cor in enumerate(lista_cor):
print(indice, cor)
#Execução - exemploEnumerate.py
0 preto
1 branco
2 vermelho
Preenchendo listas com while
Podemos usar uma lista while para preencher uma lista com valores.
#Algoritmo - listaAmigos.py
amigos = []
while True:
print("Digite o nome do amigo " + str(len(amigos) + 1) +
" ou enter para sair:")
name = input()
if name == "":
break
amigos.append(name)
print("Lista de amigos:")
for amigo in amigos:
print("\t" + amigo)
No algoritmo anterior, preenchemos a lista amigos enquanto o usuário fornece algum valor. Através do uso do laço while, pedimos ao usuário que forneça o nome de um amigo, e no laço condicional da linha 06, se o valor for vazio, executamos o break e saímos do laço while.
Finalmente na linha 09, fora do bloco de repetição, imprimimos na tela a lista de amigos.
#Execução - listaAmigos.py
Digite o nome do amigo 1 ou enter para sair:
Amigo 1
Digite o nome do amigo 2 ou enter para sair:
Joao
Digite o nome do amigo 3 ou enter para sair:
Lara
Digite o nome do amigo 4 ou enter para sair:
Paula
Digite o nome do amigo 5 ou enter para sair:
Lista de amigos:
Amigo 1
Joao
Lara
Paula
Erros comuns
Cuidado com loops infinitos, situação em que seu código nunca terminará de executar.
Veja o exemplo abaixo, usando o laço while, no qual a variável num nunca é atualizado, e nunca será maior que 10:
#Algoritmo - imprimir de 1 a 10 em loop infinito
01
02
03
num = 1
while num <= 10:
print(num)
Se você executar o código acima, seu programa irá imprimir o número 1 infinitamente. Para forçar o encerramento do programa, você deve digitar CTRL + C ou CTRL + Z.
A indentação continua importante, as instruções são identificadas através dos 4 espaços do bloco. O algoritmo abaixo é executado mas com o comportamento diferente do esperado, a linha 05 não pertence ao bloco for.
#Algoritmo - indentação incorreta
#Imprime cada elemento de uma lista e calcula seu dobro
lista_numeros = [6, -20, 12, 1]
for num in lista_numeros:
print(f"Elemento: {num}")
print("O dobro: " + str(2 * num))
#Execução - indentação incorreta
Elemento: 6
Elemento: -20
Elemento: 12
Elemento: 1
O dobro: 2
E não esqueça dos “:” da sintaxe.
#Erro de sintaxe - faltando os “:”
>>> for x in lista_nomes
File "<stdin>", line 1
for x in lista_nomes
^
SyntaxError: expected ':'
Top comments (0)