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)

All DEV content is created by the community!

Hey, if you're landing here for the first time, you should know that this website is a global community of folks who blog about their experiences to help folks like you out.

Sign up now if you're curious. It's free!