DEV Community

Joao Carlos Sousa do Vale
Joao Carlos Sousa do Vale

Posted on

Laços de Repetição - #14

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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!")
Enter fullscreen mode Exit fullscreen mode

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!
Enter fullscreen mode Exit fullscreen mode

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;
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

É 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)

Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

Novamente o incremento será de 1 unidade.

#Execução - usando range com dois argumentos 
20
21
22
23
24
25
26
27
28
29
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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()
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode
#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]
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode
#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))
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode
#Execução - exemploEnumerate.py 
0 preto
1 branco
2 vermelho
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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))
Enter fullscreen mode Exit fullscreen mode
#Execução - indentação incorreta
Elemento: 6
Elemento: -20
Elemento: 12
Elemento: 1
O dobro: 2
Enter fullscreen mode Exit fullscreen mode

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 ':'
Enter fullscreen mode Exit fullscreen mode

Top comments (0)