Estruturas de repetição

As estruturas de repetição são utilizadas quando queremos que um bloco de código seja executado várias vezes.

Em Python existem duas formas de criar uma estrutura de repetição:

  • O for é usado quando se quer iterar sobre um bloco de código um número determinado de vezes.

  • O while é usado quando queremos que o bloco de código seja repetido até que uma condição seja satisfeita. Ou seja, é necessário que uma expressão booliana dada seja verdadeira. Assim que ela se tornar falsa, o while para.

Nota

Na linguagem Python a indentação é obrigatória. assim como nas estruturas de controle, as estruturas de repetição também precisam.

>>> # Aqui repetimos o print 3 vezes
>>> for n in range(0, 3):
...     print(n)
...
0
1
2

>>> # Aqui iniciamos o n em 0, e repetimos o print até que seu valor seja maior ou igual a 3
>>> n = 0
>>> while n < 3:
...     print(n)
...     n += 1
...
0
1
2

O loop for em Python itera sobre os itens de um conjunto, sendo assim, o range(0, 3) precisa ser um conjunto de elementos. E na verdade ele é:

>>> list(range(0, 3))
[0, 1, 2]

Para iterar sobre uma lista:

>>> lista = [1, 2, 3, 4, 10]
>>> for numero in lista:
...     print(numero ** 2)
...
1
4
9
16
100

Isso se aplica para strings também:

>>> # Para cada letra na palavra, imprimir a letra
>>> palavra = "casa"
>>> for letra in palavra:
...     print(letra)
...
c
a
s
a

Em dicionários podemos fazer assim:

>>> gatinhos = {"Português": "gato", "Inglês": "cat", "Francês": "chat", "Finlandês": "Kissa"}
>>> for chave, valor in gatinhos.items():
...     print(chave, "->", valor)
...
Português -> gato
Inglês -> cat
Francês -> chat
Finlandês -> Kissa

Para auxiliar as estruturas de repetição, existem dois comandos:

  • break: É usado para sair de um loop, não importando o estado em que se encontra.

  • continue: Funciona de maneira parecida com a do break, porém no lugar de encerrar o loop, ele faz com que todo o código que esteja abaixo (porém ainda dentro do loop) seja ignorado e avança para a próxima iteração.

Veja a seguir um exemplo de um código que ilustra o uso desses comandos. Note que há uma string de documentação no começo que explica a funcionalidade.

"""
Esse código deve rodar até que a palavra "sair" seja digitada.
* Caso uma palavra com 2 ou menos caracteres seja digitada, um aviso
  deve ser exibido e o loop será executado do início (devido ao
  continue), pedindo uma nova palavra ao usuário.
* Caso qualquer outra palavra diferente de "sair" seja digitada, um
  aviso deve ser exibido.
* Por fim, caso a palavra seja "sair", uma mensagem deve ser exibida e o
  loop deve ser encerrado (break).
"""

>>> while True:
...     string_digitada = input("Digite uma palavra: ")
...     if string_digitada.lower() == "sair":
...         print("Fim!")
...         break
...     if len(string_digitada) < 2:
...         print("String muito pequena")
...         continue
...     print("Tente digitar \"sair\"")
...
Digite uma palavra: oi
Tente digitar "sair"
Digite uma palavra: ?
String muito pequena
Digite uma palavra: sair
Fim!

Exercícios

  1. Calcule a tabuada do 13.

  2. Ler do teclado uma lista com 5 inteiros e imprimir o menor valor.

  3. Ler do teclado uma lista com 5 inteiros e imprimir True se a lista estiver ordenada de forma crescente ou False caso contrário.

  4. Exiba em ordem decrescente todos os números de 500 até 10.

  5. Ler do teclado 10 números e imprima a quantidade de números entre 10 e 50.

  6. Ler do teclado a idade e o sexo de 10 pessoas, calcule e imprima:

    1. idade média das mulheres

    2. idade média dos homens

    3. idade média do grupo

  7. Calcule o somatório dos números de 1 a 100 e imprima o resultado.

  8. Receba dois números inteiros correspondentes à largura e altura. Devolva uma cadeia de caracteres # que representa um retângulo com as medidas fornecidas.

  9. Ler do teclado um número inteiro e imprimir se ele é primo ou não.

  10. Um restaurante que enfrenta problemas com sua capacidade de clientes pediu sua ajuda para fazer um programa para saber quando eles atingem sua capacidade máxima. Faça um programa que leia um número inteiro da capacidade máxima do restaurante, e depois pergunte e leia a quantidade de clientes que chegaram até ocupar toda a capacidade do restaurante e quando lotar imprima na tela «Restaurante lotado, não há mais mesas disponíveis».

  11. O grupy-sanca tem uma fixação com números primos, e é uma tradição marcar seus eventos em horas e minutos que sejam números primos, como por exemplo 19:31.

    Você ficou responsável por marcar o próximo Pylestras, e, seguindo a tradição, gostaria de marcar o evento para um horário cuja hora e minuto sejam números primos.

    Para escolher a melhor opção, você gostaria de saber todos os horários que satisfazem esta condição!

    Crie um programa que imprime no formato HH:MM todos os horários cuja hora e minuto são números primos.

    Nota

    Zero não é um número primo e divisões por zero podem estragar suas contas!

  12. As reuniões mais memoráveis do grupy-sanca são, sem dúvidas, os PyBares! Quando finalmente foi decretado o final da pandemia de Covid-19, pythonistas de São Carlos e região se reuniram para comemorar, e a comemoração foi tanta, que neste momento estão com dificuldades de listar quais atividades e eventos são organizados pelo grupo, sem repetirem as já listadas.

    Como programar já é a sua especialidade, você resolveu escrever um programa para sanar este pequeno problema. Seu programa deve ler um número N que determina quantos eventos e atividades foram elencados (que pode ter itens repetidos), e, em seguida, N nomes de atividades e eventos organizados pelo grupy-sanca e imprimir uma lista ordenada alfabeticamente e sem itens repetidos.

    Dica: utilize o operador in para testar se uma entrada já está na lista, e o método sort para ordená-la. Também pode ser útil utilizar o método strip no seu input para evitar que espaços em branco interfiram nas suas comparações.

  13. Uma das atividades preferidas do grupy-sanca é o Coding Dojo. Coding Dojo é uma atividade colaborativa onde pessoas se reúnem a fim de resolver desafios de programação juntas, programando em pares, e utilizando a metodologia de desenvolvimento orientada a testes (TDD). A pessoa na posição do piloto programará por 5 minutos, orientada pela pessoa na posição de copiloto, e ao final deste tempo, o piloto voltará para a plateia, o copiloto será promovido a piloto e uma pessoa da plateia tomará a posição de copiloto.

    plateia -> copiloto -> piloto -> plateia

    Você está responsável pela organização do Coding Dojo de hoje, e, para garantir que todas as pessoas participarão da atividade da forma mais justa possível, você resolveu criar um programa que imprimirá o nome de cada dupla que representará copiloto e piloto em cada rodada.

    Você pegou no Meetup uma lista com N nomes de participantes, a duração do evento é de 2 horas, e cada rodada dura 5 minutos. Caso você chegue ao final da lista e o tempo ainda não tiverem passado as 2h do Coding Dojo, você começará de novo.

    Nota

    Utilize o operador de resto da divisão (%) para iterar circularmente sobre a lista.