5  Estruturas de Repetição em Python

5.1 O que você saberá se você ler todo este capítulo?

  1. Estruturas de Repetição: Como usar for e while para repetir código
  2. Loop for: Quando e como usar para sequências conhecidas
  3. Loop while: Quando e como usar para condições dinâmicas
  4. Função range(): Como gerar sequências de números
  5. Função len(): Como medir o tamanho de strings e listas
  6. Combinação de estruturas: Como misturar if com loops
  7. Controle de fluxo: break e continue para controlar loops
  8. Aplicações práticas: Menus, validações, cálculos repetitivos

🎓 Vindo do Capítulo 4? Perfeito! Você já domina estruturas de seleção. Agora é hora de aprender a repetir código! Este capítulo ensina como fazer o programa executar a mesma ação várias vezes.

🎯 Objetivo deste capítulo: Ao final, você será capaz de criar programas que repetem ações, como calculadoras, jogos simples ou sistemas de menu.

⚠️ Importante: Este capítulo é fundamental! Sem loops, você teria que copiar e colar código infinitamente. Aqui você aprende a automatizar repetições!

5.2 Explicando loops com bolos e brigadeiros

Lembra quando introduzimos o conceito de algoritmos com uma receita de bolo? Vamos agora pensar em uma receita de brigadeiros. O que acha?

Imagem contendo vários doces do tipo brigadeiro.
Brigadeiros. Servido? Créditos: Mayra Chiachia, no Flickr.

5.2.1 Ingredientes

  • 1 lata de leite condensado
  • 2 colheres (sopa) de cacau em pó
  • 1 colher (sopa) de manteiga sem sal
  • Granulado de chocolate para cobrir

5.2.2 Modo de preparo

  1. Em uma panela, adicione o leite condensado, o cacau em pó e a manteiga sem sal.
  2. Leve a panela ao fogo baixo e mexa sem parar até que a mistura comece a soltar do fundo da panela.
  3. Desligue o fogo e continue mexendo a mistura até que ela esfrie um pouco.
  4. Coloque o granulado em um prato.
  5. Enquanto ainda tiver mistura sobrando, faça:
  6.     Pegue uma pequena porção da mistura e faça uma bolinha do tamanho de uma cereja.
  7.     Passe a bolinha de brigadeiro no granulado, cobrindo-a completamente.
  8.     Coloque a bolinha em uma forma.
  9. No final, coloque as bolinhas em forminhas de papel ou em um prato para servir.

5.2.3 Resultado esperado

Brigadeiros cobertos com granulado de chocolate.

5.3 A Essência dos Loops: Repetição Inteligente

5.3.1 Exemplo do Bolo

Agora, imagine outro exemplo - agora, com bolo. Você está preparando uma receita de bolo de chocolate e precisa misturar os ingredientes até obter uma massa homogênea. Neste exemplo, é necessário utilizar um loop (uma repetição) para misturar os ingredientes secos de forma adequada e obter uma mistura homogênea.

💡 Percebeu algo parecido entre o exemplo do brigadeiro e o bolo? A repetição! No caso do bolo, nós estaríamos repetindo a mesma operação de colocar um ingrediente em uma tigela e misturar com os demais por algumas vezes.

5.3.2 O Loop dos Brigadeiros

Agora, preste atenção nos passos 6, 7 e 8 da receita de brigadeiro. Você consegue se enxergar repetindo aqueles passos por várias e várias vezes até a massa de brigadeiro acabar?

Dependendo de quem faz (e da fome), poderíamos fazer com 10 brigadeiros grandes ou 50 brigadeiros pequenos - independentemente disso, iremos por algumas vezes repetir os passos 6, 7 e 8 em sequência.

5.3.2.1 Sequência de Execução

Se fôssemos colocar um exemplo de como alguém percorreria estes passos sairia algo mais ou menos assim:

1-2-3-4-5-6-7-8-6-7-8-6-7-8-6-7-8-6-7-8-6-7-8-6-7-8-6-7-8-6-7-8-9-10

🎯 Veja o padrão? Os passos 6, 7 e 8 se repetem várias vezes! Isso é exatamente o que um loop faz na programação.

5.4 Um Exemplo em Python

🎯 E como este tipo de operação seria no Python? Melhor: como as coisas não seriam com o uso de loops?

Imagine criar um algoritmo que mostre na tela todos os números de 1 a 10. Fácil, né? Olha só:

print(1)
print(2)
print(3)
print(4)
print(5)
print(6)
print(7)
print(8)
print(9)
print(10)

5.4.1 O Problema da Repetição Manual

E se eu pedisse a você para mudar este código para mostrar todos os números de 1 a 1000? Aí complica, né?

Problemas:

  • Muito código: 1000 linhas de print()
  • Propenso a erros: Fácil esquecer um número ou digitar errado
  • Difícil de manter: Mudanças precisam ser feitas em 1000 lugares
  • Tempo perdido: Copiar e colar 1000 vezes

💡 Solução: Usar loops para automatizar a repetição!

5.5 Repetições com for (“para”) e while (“enquanto”)

🎯 As estruturas de repetição como o para e enquanto servem para resolver problemas como esse cenário de mostrar todos os números de 1 a 1000 de forma inteligente!

5.5.1 Analogia: Caminhada vs. Exploração

Vamos imaginar um cenário em que precisamos caminhar por um trajeto pré-determinado ou explorar uma área desconhecida.

5.5.1.1 for - Trajeto Conhecido

O “para” é como caminhar por um trajeto conhecido, onde você sabe onde está o ponto de partida e o ponto de chegada. Você pode contar o número de passos e ter uma ideia de quanto tempo levará para chegar ao destino.

💡 Na programação: Use for quando sabe exatamente quantas vezes quer executar uma ação.

Exemplos:

  • Mostrar números de 1 a 100
  • Percorrer uma lista de nomes
  • Calcular a soma de 10 números

5.5.1.2 while - Exploração Desconhecida

O “enquanto” é como explorar uma área desconhecida, onde você não sabe exatamente onde está indo, mas continua caminhando enquanto houver caminho.

💡 Na programação: Use while quando quer executar uma ação enquanto uma determinada condição for verdadeira.

Exemplos:

  • Pedir senha até acertar
  • Continuar jogando enquanto o usuário quiser
  • Processar dados até encontrar um valor específico

5.5.2 Resumo

Loop Quando usar Exemplo
for Sabe quantas vezes executar “Repetir 10 vezes”
while Sabe quando parar “Enquanto não acertar a senha”

🎯 Em resumo: for = quantidade conhecida, while = condição de parada conhecida!

Veja como seria o uso do “para” em pseudocódigo para escrever todos os números de 1 a 1000 na tela:

Início
  Inteiro: i

  Para todo i de 1 até 1000, faça:
    Escreva(i)
  Fim Para
Fim

Aqui, observe que existe uma variável chamada i. Este nome é uma convenção comum usada em loops para representar um índice ou contador. O nome i é uma abreviação de índice e é frequentemente usado em loops para rastrear a posição atual na sequência que está sendo iterada. Por exemplo, no código acima o i começará com o valor de 1 na linha 4, e escreverá este valor na tela com a linha 5. Depois, voltamos para a linha 4 e incrementamos em um o valor de i, que agora vale 2, e mostraremos este valor na linha 5. Depois, voltamos novamente para a linha 4 e incrementamos i, que agora vale 3, e mostraremos este valor na linha 5. Repetiremos isto até chegar ao valor de 1000, mostrando-o na tela. Após alcançar o 1000 finalmente iremos para a linha 6, saindo do loop e encerrando o código.

Agora, veja o uso do “enquanto” para resolver o mesmo problema:

Início
  Inteiro: i

  i = 1
  Enquanto i <= 1000, faça:
    Escreva(i)
    i = i + 1
  Fim Enquanto
Fim

Aqui, na linha 4 inicializamos o i para valer 1. Enquanto a condição da linha 5 for verdadeira iremos percorrer as linhas 6 e 7 infinitamente: como i agora vale 1, a condição da linha 5 é verdade. Com isso, vamos para a linha 6 (mostrando 1 na tela) e incrementamos o valor de i, que agora vale 2. Agora, voltamos para a linha 5. A condição ainda é verdade, já que 2 é menor do que 1000. Com isso, vamos à linha 6 (mostrando 2 na tela) e incrementamos novamente o valor de i, que agora vale 3. Assim, vamos sucessivamente até chegar ao 1000. Após mostrar 1000 na tela, incrementamos novamente o valor de i, que agora vale 1001. Com isso, voltamos para a linha 5. Agora, a condição é falsa, já que 1001 não é maior ou igual a 1000. Como é falsa, finalmente sairemos do loop e pularemos as linhas 6 e 7, indo diretamente para a linha 8 e finalizando o código.

5.5.3 Loop for - Quando Você Sabe Quantas Vezes Repetir

Veja como seria o uso do “para” em pseudocódigo para escrever todos os números de 1 a 1000 na tela:

Início
  Para i de 1 até 1000 faça
    Escreva(i)
  FimPara
Fim

5.5.3.1 E Como Seria em Python? Ainda Mais Fácil!

for i in range(1, 1001):
    print(i)

🎯 Veja que a linha for i in range(1, 1001): está fazendo a mesma coisa que a linha Para i de 1 até 1000 faça do pseudocódigo!

5.5.3.2 Entendendo o range(1, 1001)

A diferença é que o Python usa range(1, 1001) para gerar uma sequência de números de 1 a 1000.

⚠️ Importante: O range sempre para um número antes do valor final, por isso usamos 1001 para chegar até 1000!

Exemplos de range:

  • range(1, 11) → números de 1 a 10
  • range(0, 5) → números de 0 a 4
  • range(10) → números de 0 a 9 (começa em 0)

5.5.3.3 A Variável de Controle i

A variável i é chamada de variável de controle ou contador e é ela que vai receber cada valor da sequência gerada pelo range.

Como funciona:

  • 1º ciclo: i recebe o valor 1
  • 2º ciclo: i recebe o valor 2
  • 3º ciclo: i recebe o valor 3
  • 1000º ciclo: i recebe o valor 1000

5.5.3.4 Execução do Loop

E o que está dentro do loop (a linha print(i)) é executado para cada valor de i. Por isso, quando executamos este código, vemos na tela todos os números de 1 a 1000.

💡 Resultado: 1000 linhas na tela, cada uma com um número diferente!

Em Python, o “para” se chama for. Lembra daquele problema de mostrar na tela todos os números de 1 a 1000? Olha como isso ficaria usando for:

for i in range(1, 1001):
    print(i)

A estrutura for é usada em Python quando temos que executar um bloco de código um número específico de vezes, baseado em uma sequência de valores. No exemplo acima, o loop vai executar mil vezes, uma vez para cada número na sequência. Lemos aquele for i in range(1, 1001) como “Para todo i que está no intervalo de 1 a 1000, faça:”.

🔄 Função range(): Nesse caso, a função range(), que gera automaticamente uma sequência de números inteiros de acordo com os parâmetros fornecidos. No exemplo acima, a sequência começa em 1 e termina em 1000 (o número final não é incluso: um jeito de ler aquele range(1, 1001) seria “gere uma sequência de valores de 1 até 1001, mas sem contar o 1001.”). Experimente como funcionaria aquele código com range(1, 1001, 2) e range(-1000, 1).

5.5.3.5 Exemplos

Bom, o que acha de colocar a mão na massa com alguns exemplos? Recomendo que você teste comigo todos estes códigos no seu PyCharm. Se possível use o debugger para entender o que está acontecendo com o código a cada linha executada. Vamos lá?

5.5.3.6 Soma de 1 a 10

Este é um código que tem como objetivo calcular a soma dos números inteiros de 1 a 10 e mostrar o resultado na tela:

soma = 0
for num in range(1, 11):
    soma += num
print("A soma dos números é:", soma)

Primeiramente, é criada uma variável chamada soma e atribuído o valor zero a ela. Em seguida, é utilizado o loop for para percorrer todos os números de 1 a 10, representados pela função range(1, 11) (lembra que eu falei que o último número desse range não é considerado, né? Seria um “de 1 até 11, mas sem contar o 11”. A cada iteração do loop, o número é adicionado à variável soma por meio do operador +=. soma += num é outra forma de escrever soma = soma + num, mas de um jeito mais curto.

Ao final do loop, a variável soma terá armazenado a soma de todos os números de 1 a 10. Então, a função print() é usada para mostrar a mensagem “A soma dos números é:” seguida do valor da variável soma.

5.5.3.7 Soma de 10 a 50

E se não quiséssemos usar range(), ou se tivéssemos um conjunto de números que não fossem necessariamente uma sequência? Também podemos usar o for para isso. Veja e rode o código abaixo em seu computador:

numeros = [10, 25, 1, 40, -4]
soma = 0
for num in numeros:
    soma += num
print("A soma dos números é:", soma)

O código acima começa criando uma lista de números, chamada numeros, contendo 5 elementos. Sabemos que é uma lista porque é um conjunto de valores delimitados por colchetes ([]) e separados por vírgulas.

🐱‍🏍 Fique tranquilo! Um pouco depois deste capítulo iremos nos aprofundar em listas.

Em seguida, é criada uma variável chamada soma com valor inicial igual a 0.

O loop for percorre cada elemento da lista numeros, e para cada elemento, o valor é adicionado à variável soma. Ou seja, o loop está somando cada número da lista. Primeiro, ele soma o valor 10, que é o primeiro elemento da lista. Depois, soma o 25. Depois, o 1. Depois, o 40. Finalmente, o -4.

Por fim, o programa imprime a mensagem “A soma dos números é:” seguida do valor da variável soma, que é a soma total dos elementos da lista numeros.

5.5.3.8 Quadrado

Agora, e se fôssemos calcular o quadrado de cada número de uma sequência? Veja só:

numeros = [1, 2, 3, 4, 5]
for num in numeros:
    quadrado = num ** 2
    print(quadrado)

O código acima começa criando uma lista de números chamada numeros, contendo os valores de 1 a 5. Em seguida, é utilizado um loop for para percorrer cada um dos números da lista.

Para cada número, o loop realiza o cálculo do quadrado do número através da operação de exponenciação com o operador **, atribuindo o resultado à variável quadrado. Depois, o loop imprime na tela o valor de “quadrado” correspondente a cada número da lista. A cada loop este valor de quadrado é sobrescrito (substituído) com um novo valor.

Dessa forma, o código irá imprimir os valores dos quadrados dos números de 1 a 5, ou seja: 1, 4, 9, 16 e 25.

5.5.3.9 Percorrendo strings

Sabia que também podemos usar o for em strings? E se quiséssemos mostrar todas as letras do seu nome com uma letra a cada linha? Então teste este código:

nome = input("Digite o seu nome: ")

for letra in nome:
    print(letra)

O código acima começa solicitando ao usuário que digite seu nome e armazena esse nome na variável nome. Em seguida, é iniciado um loop for que vai percorrer cada letra contida na variável nome.

A cada iteração do loop, a variável letra recebe a próxima letra contida em nome, que é então impressa com a função print(letra). O resultado final é a impressão de cada letra do nome digitado pelo usuário em uma linha separada.

Por exemplo, se o usuário digitar “Maria”, o resultado mostrado na tela será:

M
a
r
i
a

5.5.3.10 Percorrendo listas de palavras

E se quiséssemos percorrer uma lista de palavras e verificar se alguma delas contém a letra r? Olha só:

for palavra in ["casa", "amor", "árvore", "abacaxi"]:
    if 'r' in palavra:
        print(palavra)

A estrutura for palavra in ["casa", "amor", "arvore", "abacaxi"]: indica que o loop irá percorrer cada palavra da lista ["casa", "amor", "arvore", "abacaxi"].

Dentro do loop, a condição if 'r' in palavra: verifica se a letra "r" está presente (está dentro) em cada palavra. Se estiver, o print(palavra) será executado, exibindo a palavra que contém a letra "r".

Portanto, ao executar esse código, serão exibidas as palavras “amor” e “arvore”, que são as palavras da lista que possuem a letra "r".

Esse tipo de estrutura é muito útil para filtrar informações em uma lista, de acordo com uma condição específica. Ah, percebeu também que estamos começando a combinar if com for? Pois bem: esta flexibilidade no uso de diferentes estruturas em desenvolvimento de software é o que contribui para que os códigos sejam tão poderosos para resolver diferentes tipos de problemas.

5.5.3.11 Filtrando números pares

Para fechar: como seria um código que pudesse percorrer uma sequência de números e mostrar na tela somente aqueles que fossem pares? Veja só:

for num in range(1, 21):
    if num % 2 == 0:
        print(num, " é um número par")

Este código mostrará na tela apenas os números pares dentro de um intervalo de 1 a 20. A linha for num in range(1, 21): cria um loop que percorre todos os números de 1 a 20, atribuindo cada um deles à variável num, um de cada vez.

Em seguida, o if verifica se o número é par, o que é feito usando o operador módulo %. Se o resto da divisão do número por 2 for igual a zero, isso significa que o número é par. Caso contrário, ele é ímpar e será ignorado pelo código.

Por fim, a linha print(num, " é um número par") imprime o número par encontrado.

5.5.4 Loop while - Quando Você Sabe Quando Parar

Veja como seria o uso do “enquanto” em pseudocódigo para escrever todos os números de 1 a 1000 na tela:

Início
  Inteiro: i
  i = 1
  Enquanto i <= 1000, faça:
    Escreva(i)
    i = i + 1
  Fim Enquanto
Fim

5.5.4.1 E Como Seria em Python? Também Fácil!

i = 1
while i <= 1000:
    print(i)
    i = i + 1

🎯 Veja que a linha while i <= 1000: está fazendo a mesma coisa que a linha Enquanto i <= 1000, faça: do pseudocódigo!

5.5.4.2 Entendendo o while

O while funciona de forma diferente do for:

  1. Inicialização: i = 1 (começamos com i valendo 1)
  2. Condição: while i <= 1000: (enquanto i for menor ou igual a 1000)
  3. Ação: print(i) (mostra o valor de i na tela)
  4. Atualização: i = i + 1 (incrementa i em 1)

5.5.4.3 Como Funciona o Ciclo

1º ciclo:

  • i = 1 → condição 1 <= 1000 é verdadeira
  • Executa print(1) → mostra 1 na tela
  • Executa i = i + 1 → i agora vale 2

2º ciclo:

  • i = 2 → condição 2 <= 1000 é verdadeira
  • Executa print(2) → mostra 2 na tela
  • Executa i = i + 1 → i agora vale 3

…continua até…

1000º ciclo:

  • i = 1000 → condição 1000 <= 1000 é verdadeira
  • Executa print(1000) → mostra 1000 na tela
  • Executa i = i + 1 → i agora vale 1001

Fim do loop:

  • i = 1001 → condição 1001 <= 1000 é falsa
  • Sai do loop e continua o programa

💡 Resultado: 1000 linhas na tela, cada uma com um número diferente!

Em Python, o “enquanto” se chama while. Aquele problema de mostrar na tela todos os números de 1 a 1000 usando o while ficaria assim:

i = 1
while i <= 1000:
    print(i)
    i += 1

Este código começa definindo uma variável chamada i com o valor inicial de 1. Em seguida, ele entra em um loop que continuará enquanto i for menor ou igual a 1000.

Dentro do loop, ele executa a ação de imprimir o valor de i e, em seguida, incrementa o valor de i em 1. Agora, queria chamar a sua atenção para isso: experimente testar o seu código sem usar aquela linha i += 1 (que é a mesma coisa de i = i + 1): o loop se repetiria infinitamente e imprimiria o número 1 infinitamente. Isto acontece porque, sem esta linha, o número em i jamais mudaria e ficaríamos infinitamente executando o print(i) porque a condição i <= 1000 seria para sempre verdade.

Ah, e como comentei antes, o while é usado quando não se sabe exatamente quantas vezes um loop precisa ser executado. Ele continuará executando até que a condição seja falsa. Neste exemplo, a condição é i <= 1000, o que significa que o loop continuará até que i seja maior que 1000.

5.5.4.4 Soma de 1 a 10

Como seria aquele código que mostra a soma de todos os números de 1 a 10 que já vimos antes com o for, mas com o while no lugar? Veja e teste:

i = 1
soma = 0
while i <= 10:
    soma += i
    print(soma)
    
    i += 1

No início e antes de entrar no loop, a variável i é iniciada com o valor de 1 e a variável soma com o valor de 0 (até porque não somamos nada até agora). A condição do loop é que a variável i seja menor ou igual a 10. Enquanto essa condição for verdadeira, o código dentro do loop será executado.

Dentro do loop, primeiro fazemos a soma do valor atual de i com o que já estava armazenado na variável soma, e mostramos isto na tela. Em seguida, a variável i é incrementada em 1 unidade com a linha i += 1. O loop é encerrado quando a variável i atingir o valor 11, pois a condição do loop deixará de ser verdadeira. Portanto, o resultado na tela será a soma da sequência numérica de 1 a 10, com cada número em uma linha diferente. O funcionamento será assim:

  1. Primeiro passo: soma (0) + i (1) = 1, que passará a ser o novo valor de soma.
  2. Segundo passo: soma (1) + i (2) = 3, que passará a ser o novo valor de soma.
  3. Terceiro passo: soma (3) + i (3) = 6, que passará a ser o novo valor de soma.
  4. Quarto passo: soma (6) + i (4) = 10, que passará a ser o novo valor de soma.
  5. Quinto passo: soma (10) + i (5) = 15, que passará a ser o novo valor de soma.
  6. Sexto passo: soma (15) + i (6) = 21, que passará a ser o novo valor de soma.
  7. Sétimo passo: soma (21) + i (7) = 28, que passará a ser o novo valor de soma.
  8. Oitavo passo: soma (28) + i (8) = 36, que passará a ser o novo valor de soma.
  9. Nono passo: soma (36) + i (9) = 45, que passará a ser o novo valor de soma.
  10. Décimo passo: soma (45) + i (10) = 55, que passará a ser o novo valor de soma.

5.5.4.5 Testando uma senha

E um algoritmo simples para validar uma senha e que só mostre a frase “Acesso permitido!” somente depois do usuário informar uma senha correta? Veja:

senha = ""
while senha != "12345":
    senha = input("Digite a senha: ")
print("Acesso permitido!")

O código acima cria um loop usando a estrutura while que pede ao usuário que digite uma senha. Ele mantém o loop enquanto a senha digitada não for igual à string "12345". Enquanto o usuário não digitar a senha correta, ele solicitará para que o usuário insira a senha e armazena a entrada em uma variável chamada senha. Se a senha estiver correta e for igual a "12345", o loop é interrompido e a mensagem “Acesso permitido!” é exibida. Se a senha digitada não for igual a "12345", o loop continuará a pedir que o usuário insira a senha correta infinitamente.

5.5.4.6 Fazendo um menu

E o que acha de fazer um menu bonitão para o usuário? Com o while, isto é possível. Veja:

opcao = ''
while opcao != 's':
    print("MENU:")
    print("a. Opção 1")
    print("b. Opção 2")
    print("c. Opção 3")
    print("s. Sair")
    opcao = input("Digite uma opção: ")
    if opcao == 'a':
        print("Opção 1 selecionada")
    elif opcao == 'b':
        print("Opção 2 selecionada")
    elif opcao == 'c':
        print("Opção 3 selecionada")
    elif opcao == 's':
        print("Saindo...")
    else:
        print("Opção inválida.")

Este código mostra um menu para o usuário e permite que ele selecione uma opção digitando a letra correspondente à opção. O programa entra em um loop enquanto o usuário não digita a opção "s" (sair). Em cada iteração do loop, o programa imprime o menu e solicita ao usuário que digite uma opção. Depois disso, o programa verifica qual opção foi selecionada pelo usuário e executa a ação correspondente. Se o usuário selecionar a opção "s", o programa encerra o loop e imprime a mensagem “Saindo…”. Se o usuário selecionar uma opção inválida, o programa imprime a mensagem “Opção inválida.” e retorna ao início do loop para apresentar o menu novamente e aguardar uma nova seleção do usuário.

👉 Pontos importantes neste código: veja que há uma combinação de while e if/elif/else. Experimente remover por completo o else: como seria a experiência do usuário em não se ter nenhuma mensagem apresentada para ele quando ele digita uma opção inválida? Talvez sejam em casos assim em que a utilidade do else fique mais clara para você.

5.5.4.7 Testando números positivos e negativos

Agora, vamos imaginar um código em que pediremos para que o usuário digite um número. Se o número for zero, sairemos do programa. Enquanto não for zero, testaremos se aquele número é positivo ou negativo, mostraremos este resultado na tela, e pediremos por um outro número logo em seguida. Veja e teste:

num = int(input("Digite um número (digite 0 para sair): "))
while num != 0:
    if num > 0:
        print("O número é positivo")
    else:
        print("O número é negativo")
    num = int(input("Digite outro número (digite 0 para sair): "))

O código começa pedindo ao usuário para digitar um número e armazena essa entrada na variável num. Em seguida, o código entra em um loop while que só será interrompido quando o usuário digitar o número 0. Dentro desse loop, o código verifica se o número digitado é maior que zero (positivo) ou menor que zero (negativo), imprimindo a mensagem correspondente na tela.

Em seguida, o código pede ao usuário para digitar outro número e armazena a entrada na variável num novamente. Esse processo continua até que o usuário digite zero e, assim, interrompa o loop.

O uso do while é importante aqui, pois permite que o código continue pedindo novos números até que o usuário decida sair, sem que seja necessário determinar previamente quantas vezes o loop será executado.

5.5.4.8 Inserindo notas válidas

Lembra dos exemplos com notas que vimos no capítulo anterior? Em nenhum momento testamos casos em que a nota era menor do que 0 ou maior do que 10, certo? O que acha de usarmos o while para validar o que o usuário digitou, garantindo assim que ele informe apenas valores válidos? Teste isto:

nota = -1
while nota < 0 or nota > 10:
    nota = float(input("Digite uma nota entre 0 e 10: "))
print("Nota válida:", nota)

Esse código solicita ao usuário que digite uma nota entre 0 e 10. Caso a nota digitada não esteja dentro desse intervalo, o programa continuará pedindo para que o usuário digite uma nota válida. Esse processo é feito por meio de um loop while. Para testar este código, tente informar notas inválidas como 1000, -5 e 1234. Veja que o programa irá rejeitar estas notas. Se você testar letras no lugar de números você verá um erro bem feio (resolveremos isso mais adiante, também).

Na primeira linha do loop, a variável nota é inicializada com o valor -1. Em seguida, a expressão nota < 0 or nota > 10 verifica se a nota digitada está dentro do intervalo desejado. Se a nota não estiver dentro desse intervalo, o loop continuará executando e pedindo para que o usuário digite outra nota válida.

Quando o usuário finalmente digita uma nota válida, o loop para de ser executado e o programa imprime a mensagem “Nota válida:” seguida da nota digitada.

5.6 Exercícios Práticos (respostas no final da página)

🚀 Hora de praticar! Aqui estão 25 exercícios organizados por dificuldade. Cada exercício tem solução completa com explicação linha por linha!

5.6.1 MUITO FÁCIL (Nível 1)

1. Contador Simples Crie um programa que mostre na tela os números de 1 a 5 usando um loop for.

  • Exemplo: Output → 1, 2, 3, 4, 5

2. Contador com While Crie um programa que mostre na tela os números de 1 a 3 usando um loop while.

  • Exemplo: Output → 1, 2, 3

3. Números Pares Crie um programa que mostre na tela os números pares de 2 a 10 usando for.

  • Exemplo: Output → 2, 4, 6, 8, 10

4. Contagem Regressiva Crie um programa que mostre na tela uma contagem regressiva de 5 a 1 usando for.

  • Exemplo: Output → 5, 4, 3, 2, 1

5. Soma Simples Crie um programa que calcule e mostre a soma dos números de 1 a 5 usando for.

  • Exemplo: Output → A soma é: 15

5.6.2 FÁCIL (Nível 2)

6. Tabuada do 2 Crie um programa que mostre a tabuada do 2 (de 1 a 10) usando for.

  • Exemplo: Output → 2 x 1 = 2, 2 x 2 = 4, ..., 2 x 10 = 20

7. Validação de Senha Crie um programa que peça uma senha até que o usuário digite “123” usando while.

  • Exemplo: Input → 456789123 | Output → Acesso liberado!

8. Números Ímpares Crie um programa que mostre na tela os números ímpares de 1 a 15 usando for.

  • Exemplo: Output → 1, 3, 5, 7, 9, 11, 13, 15

9. Soma com While Crie um programa que calcule a soma dos números de 1 a 10 usando while.

  • Exemplo: Output → A soma é: 55

10. Menu Simples Crie um programa com um menu que mostre “1. Opção A” e “2. Opção B” e continue até que o usuário digite “2”.

  • Exemplo: Input → 12 | Output → Você escolheu A, Você escolheu B, Programa encerrado

5.6.3 MÉDIO (Nível 3)

11. Fatorial Crie um programa que calcule o fatorial de um número usando for.

  • Exemplo: Input → 5 | Output → O fatorial de 5 é 120

12. Validação de Nota Crie um programa que peça uma nota entre 0 e 10 até que o usuário digite uma válida usando while.

  • Exemplo: Input → 15-58 | Output → Nota válida: 8.0

13. Soma de Números Pares Crie um programa que calcule a soma dos números pares de 1 a 20 usando for.

  • Exemplo: Output → A soma dos números pares é: 110

14. Contador com Break Crie um programa que conte de 1 a 10, mas pare quando chegar em 7 usando for e break.

  • Exemplo: Output → 1, 2, 3, 4, 5, 6, Loop encerrado

15. Tabuada Completa Crie um programa que mostre a tabuada de um número digitado pelo usuário usando for.

  • Exemplo: Input → 3 | Output → Tabuada do 3: 3 x 1 = 3, ..., 3 x 10 = 30

5.6.4 DIFÍCIL (Nível 4)

16. Jogo de Adivinhação Crie um programa que gere um número aleatório de 1 a 10 e peça para o usuário adivinhar até acertar usando while.

  • Exemplo: Input → 573 | Output → Muito baixo!, Muito alto!, Parabéns! Você acertou em 3 tentativas!

17. Calculadora com Menu Crie uma calculadora que permita somar, subtrair, multiplicar e dividir até que o usuário escolha sair.

  • Exemplo: Input → 1, 5, 32, 10, 45 | Output → 5 + 3 = 8, 10 - 4 = 6, Calculadora encerrada!

18. Sequência de Fibonacci Crie um programa que mostre os primeiros 10 números da sequência de Fibonacci usando for.

  • Exemplo: Output → 0, 1, 1, 2, 3, 5, 8, 13, 21, 34

19. Validação de CPF Crie um programa que peça um CPF até que o usuário digite um com 11 dígitos usando while.

  • Exemplo: Input → 12312345678912345678901 | Output → CPF deve ter exatamente 11 dígitos!, CPF deve ter exatamente 11 dígitos!, CPF válido: 12345678901

20. Contador de Vogais Crie um programa que conte quantas vogais tem em uma palavra usando for.

  • Exemplo: Input → python | Output → A palavra 'python' tem 1 vogal

5.6.5 MUITO DIFÍCIL (Nível 5)

21. Jogo da Forca Crie um jogo da forca simples onde o usuário tem 6 tentativas para adivinhar uma palavra.

  • Exemplo: Input → python | Output → Letra encontrada!, ..., Parabéns! Você ganhou! A palavra era: python

22. Sistema de Banco Crie um sistema bancário simples com depósito, saque e consulta de saldo.

  • Exemplo: Input → 1, 10032, 504 | Output → Depósito de R$ 100.00 realizado!, Saldo atual: R$ 100.00, Saque de R$ 50.00 realizado!, Obrigado por usar o Banco Python!

23. Calculadora de IMC com Histórico Crie uma calculadora de IMC que armazene o histórico de cálculos.

  • Exemplo: Input → 1, João, 70, 1.7523 | Output → João: IMC 22.86 - Peso normal, 1. João: IMC 22.86 - Peso normal, Obrigado por usar a Calculadora de IMC!

24. Jogo de Dados Crie um jogo onde o usuário rola dois dados e tenta adivinhar a soma.

  • Exemplo: Input → 1, 72 | Output → Dado 1: 4, Dado 2: 3, Quase! A soma foi 7. Você ganhou 5 pontos pela tentativa., Jogo encerrado! Pontuação final: 5 em 1 rodadas

25. Sistema de Notas Crie um sistema que permita cadastrar alunos e suas notas, calcular médias e mostrar relatórios.

  • Exemplo: Input → 1, Ana2, Ana, 8.52, Ana, 9.03, Ana45 | Output → Aluno Ana cadastrado!, Nota 8.5 adicionada, Nota 9.0 adicionada, Média de Ana: 8.75, Ana: 2 notas, média 8.75, Sistema encerrado!

5.7 Respostas e Explicações

5.7.1 MUITO FÁCIL (Nível 1)

1. Contador Simples

for i in range(1, 6):
    print(i)

Explicação linha por linha:

  • Linha 1: for i in range(1, 6): - Cria um loop que vai de 1 a 5 (range para antes do 6)
  • Linha 2: print(i) - Mostra o valor atual de i na tela

2. Contador com While

i = 1
while i <= 3:
    print(i)
    i += 1

Explicação linha por linha:

  • Linha 1: i = 1 - Inicializa a variável contadora com valor 1
  • Linha 2: while i <= 3: - Continua enquanto i for menor ou igual a 3
  • Linha 3: print(i) - Mostra o valor atual de i
  • Linha 4: i += 1 - Incrementa i em 1 (importante para não criar loop infinito)

3. Números Pares

for i in range(2, 11, 2):
    print(i)

Explicação linha por linha:

  • Linha 1: for i in range(2, 11, 2): - range(2, 11, 2) gera números de 2 a 10 pulando de 2 em 2
  • Linha 2: print(i) - Mostra cada número par

4. Contagem Regressiva

for i in range(5, 0, -1):
    print(i)

Explicação linha por linha:

  • Linha 1: for i in range(5, 0, -1): - range(5, 0, -1) gera números de 5 a 1 em ordem decrescente
  • Linha 2: print(i) - Mostra cada número da contagem regressiva

5. Soma Simples

soma = 0
for i in range(1, 6):
    soma += i
print("A soma é:", soma)

Explicação linha por linha:

  • Linha 1: soma = 0 - Inicializa a variável soma com zero
  • Linha 2: for i in range(1, 6): - Loop que vai de 1 a 5
  • Linha 3: soma += i - Adiciona o valor atual de i à soma
  • Linha 4: print("A soma é:", soma) - Mostra o resultado final

5.7.2 FÁCIL (Nível 2)

6. Tabuada do 2

for i in range(1, 11):
    resultado = 2 * i
    print(f"2 x {i} = {resultado}")

Explicação linha por linha:

  • Linha 1: for i in range(1, 11): - Cria um loop que vai de 1 a 10
  • Linha 2: resultado = 2 * i - Calcula 2 vezes o valor atual de i
  • Linha 3: print(f"2 x {i} = {resultado}") - Mostra a multiplicação formatada

7. Validação de Senha

senha = ""
while senha != "123":
    senha = input("Digite a senha: ")
print("Acesso liberado!")

Explicação linha por linha:

  • Linha 1: senha = "" - Inicializa senha com string vazia para entrar no loop
  • Linha 2: while senha != "123": - Continua enquanto senha não for “123”
  • Linha 3: senha = input("Digite a senha: ") - Pede nova senha ao usuário
  • Linha 4: print("Acesso liberado!") - Mostra mensagem de sucesso quando sair do loop

8. Números Ímpares

for i in range(1, 16, 2):
    print(i)

Explicação linha por linha:

  • Linha 1: for i in range(1, 16, 2): - range(1, 16, 2) gera números ímpares de 1 a 15 (pula de 2 em 2)
  • Linha 2: print(i) - Mostra cada número ímpar

9. Soma com While

i = 1
soma = 0
while i <= 10:
    soma += i
    i += 1
print("A soma é:", soma)

Explicação linha por linha:

  • Linha 1: i = 1 - Inicializa contador com valor 1
  • Linha 2: soma = 0 - Inicializa acumulador com valor 0
  • Linha 3: while i <= 10: - Continua enquanto i for menor ou igual a 10
  • Linha 4: soma += i - Adiciona o valor atual de i à soma
  • Linha 5: i += 1 - Incrementa contador em 1
  • Linha 6: print("A soma é:", soma) - Mostra o resultado final

10. Menu Simples

opcao = ""
while opcao != "2":
    print("1. Opção A")
    print("2. Opção B")
    opcao = input("Escolha uma opção: ")
    if opcao == "1":
        print("Você escolheu A")
    elif opcao == "2":
        print("Você escolheu B")
    else:
        print("Opção inválida")
print("Programa encerrado")

Explicação linha por linha:

  • Linha 1: opcao = "" - Inicializa variável de controle com string vazia
  • Linha 2: while opcao != "2": - Continua até escolher opção “2”
  • Linhas 3-4: Mostram o menu para o usuário
  • Linha 5: opcao = input("Escolha uma opção: ") - Pede escolha do usuário
  • Linhas 6-11: Verificam a opção escolhida e executam ação correspondente
  • Linha 12: print("Programa encerrado") - Mensagem final quando sair do loop

5.7.3 MÉDIO (Nível 3)

11. Fatorial

numero = int(input("Digite um número: "))
fatorial = 1
for i in range(1, numero + 1):
    fatorial *= i
print(f"O fatorial de {numero} é {fatorial}")

Explicação linha por linha:

  • Linha 1: numero = int(input("Digite um número: ")) - Solicita um número ao usuário e converte para inteiro
  • Linha 2: fatorial = 1 - Inicializa fatorial com 1 (elemento neutro da multiplicação)
  • Linha 3: for i in range(1, numero + 1): - Loop que vai de 1 até o número digitado
  • Linha 4: fatorial *= i - Multiplica fatorial pelo valor atual de i (equivalente a fatorial = fatorial * i)
  • Linha 5: print(f"O fatorial de {numero} é {fatorial}") - Mostra o resultado final

12. Validação de Nota

nota = -1
while nota < 0 or nota > 10:
    nota = float(input("Digite uma nota entre 0 e 10: "))
print(f"Nota válida: {nota}")

Explicação linha por linha:

  • Linha 1: nota = -1 - Inicializa com valor inválido para garantir entrada no loop
  • Linha 2: while nota < 0 or nota > 10: - Continua enquanto nota for menor que 0 OU maior que 10
  • Linha 3: nota = float(input("Digite uma nota entre 0 e 10: ")) - Solicita nova nota ao usuário
  • Linha 4: print(f"Nota válida: {nota}") - Mostra a nota válida quando sair do loop

13. Soma de Números Pares

soma = 0
for i in range(1, 21):
    if i % 2 == 0:
        soma += i
print(f"A soma dos números pares é: {soma}")

Explicação linha por linha:

  • Linha 1: soma = 0 - Inicializa acumulador com valor 0
  • Linha 2: for i in range(1, 21): - Loop que vai de 1 a 20
  • Linha 3: if i % 2 == 0: - Verifica se i é par (resto da divisão por 2 é zero)
  • Linha 4: soma += i - Adiciona i à soma apenas se for par
  • Linha 5: print(f"A soma dos números pares é: {soma}") - Mostra o resultado final

14. Contador com Break

for i in range(1, 11):
    if i == 7:
        break
    print(i)
print("Loop encerrado")

Explicação linha por linha:

  • Linha 1: for i in range(1, 11): - Loop que vai de 1 a 10
  • Linha 2: if i == 7: - Verifica se i é igual a 7
  • Linha 3: break - Quebra o loop imediatamente quando i for 7
  • Linha 4: print(i) - Mostra i apenas se não for 7 (linha não executada quando break)
  • Linha 5: print("Loop encerrado") - Mensagem após o loop ser interrompido

15. Tabuada Completa

numero = int(input("Digite um número para a tabuada: "))
print(f"Tabuada do {numero}:")
for i in range(1, 11):
    resultado = numero * i
    print(f"{numero} x {i} = {resultado}")

Explicação linha por linha:

  • Linha 1: numero = int(input("Digite um número para a tabuada: ")) - Solicita um número ao usuário
  • Linha 2: print(f"Tabuada do {numero}:") - Mostra cabeçalho da tabuada
  • Linha 3: for i in range(1, 11): - Loop que vai de 1 a 10
  • Linha 4: resultado = numero * i - Calcula a multiplicação do número por i
  • Linha 5: print(f"{numero} x {i} = {resultado}") - Mostra cada linha da tabuada formatada

5.7.4 DIFÍCIL (Nível 4)

16. Jogo de Adivinhação

import random
numero_secreto = random.randint(1, 10)
tentativas = 0
while True:
    palpite = int(input("Digite seu palpite (1 a 10): "))
    tentativas += 1
    if palpite == numero_secreto:
        print(f"Parabéns! Você acertou em {tentativas} tentativas!")
        break
    elif palpite < numero_secreto:
        print("Muito baixo! Tente novamente.")
    else:
        print("Muito alto! Tente novamente.")

Explicação linha por linha:

  • Linha 1: import random - Importa o módulo random para gerar números aleatórios
  • Linha 2: numero_secreto = random.randint(1, 10) - Gera um número aleatório entre 1 e 10
  • Linha 3: tentativas = 0 - Inicializa contador de tentativas
  • Linha 4: while True: - Loop infinito até acertar o número
  • Linha 5: palpite = int(input("Digite seu palpite (1 a 10): ")) - Solicita palpite do usuário
  • Linha 6: tentativas += 1 - Incrementa contador de tentativas
  • Linha 7: if palpite == numero_secreto: - Verifica se acertou
  • Linha 8: print(f"Parabéns! Você acertou em {tentativas} tentativas!") - Parabeniza e mostra tentativas
  • Linha 9: break - Sai do loop quando acerta
  • Linha 10: elif palpite < numero_secreto: - Verifica se palpite é menor
  • Linha 11: print("Muito baixo! Tente novamente.") - Dá dica para aumentar
  • Linha 12: else: - Se não é igual nem menor, é maior
  • Linha 13: print("Muito alto! Tente novamente.") - Dá dica para diminuir

17. Calculadora com Menu

while True:
    print("\n=== CALCULADORA ===")
    print("1. Somar")
    print("2. Subtrair")
    print("3. Multiplicar")
    print("4. Dividir")
    print("5. Sair")
    
    opcao = input("Escolha uma opção: ")
    
    if opcao == "5":
        print("Calculadora encerrada!")
        break
    elif opcao in ["1", "2", "3", "4"]:
        num1 = float(input("Digite o primeiro número: "))
        num2 = float(input("Digite o segundo número: "))
        
        if opcao == "1":
            resultado = num1 + num2
            print(f"{num1} + {num2} = {resultado}")
        elif opcao == "2":
            resultado = num1 - num2
            print(f"{num1} - {num2} = {resultado}")
        elif opcao == "3":
            resultado = num1 * num2
            print(f"{num1} x {num2} = {resultado}")
        elif opcao == "4":
            if num2 != 0:
                resultado = num1 / num2
                print(f"{num1} ÷ {num2} = {resultado}")
            else:
                print("Erro: Divisão por zero!")
    else:
        print("Opção inválida!")

Explicação linha por linha:

  • Linha 1: while True: - Loop infinito até escolher sair
  • Linhas 2-8: Mostram menu da calculadora com opções
  • Linha 10: opcao = input("Escolha uma opção: ") - Solicita escolha do usuário
  • Linha 12: if opcao == "5": - Verifica se escolheu sair
  • Linha 13: print("Calculadora encerrada!") - Mensagem de despedida
  • Linha 14: break - Sai do loop principal
  • Linha 15: elif opcao in ["1", "2", "3", "4"]: - Verifica se escolheu operação válida
  • Linhas 16-17: Solicita os dois números para cálculo
  • Linhas 19-28: Executa a operação escolhida e mostra resultado
  • Linhas 29-31: Verifica divisão por zero e mostra erro
  • Linhas 32-33: Trata opção inválida

18. Sequência de Fibonacci

a, b = 0, 1
print("Sequência de Fibonacci:")
print(a)
print(b)
for i in range(8):
    proximo = a + b
    print(proximo)
    a, b = b, proximo

Explicação linha por linha:

  • Linha 1: a, b = 0, 1 - Inicializa os dois primeiros números da sequência
  • Linha 2: print("Sequência de Fibonacci:") - Mostra cabeçalho
  • Linha 3: print(a) - Mostra o primeiro número (0)
  • Linha 4: print(b) - Mostra o segundo número (1)
  • Linha 5: for i in range(8): - Loop para gerar mais 8 números
  • Linha 6: proximo = a + b - Calcula próximo número somando os dois anteriores
  • Linha 7: print(proximo) - Mostra o próximo número
  • Linha 8: a, b = b, proximo - Atualiza valores: a recebe b, b recebe próximo

19. Validação de CPF

cpf = ""
while len(cpf) != 11 or not cpf.isdigit():
    cpf = input("Digite um CPF (11 dígitos): ")
    if len(cpf) != 11:
        print("CPF deve ter exatamente 11 dígitos!")
    elif not cpf.isdigit():
        print("CPF deve conter apenas números!")
print(f"CPF válido: {cpf}")

Explicação linha por linha:

  • Linha 1: cpf = "" - Inicializa CPF com string vazia
  • Linha 2: while len(cpf) != 11 or not cpf.isdigit(): - Continua enquanto CPF não tiver 11 dígitos OU não for apenas números
  • Linha 3: cpf = input("Digite um CPF (11 dígitos): ")) - Solicita CPF do usuário
  • Linha 4: if len(cpf) != 11: - Verifica se não tem 11 dígitos
  • Linha 5: print("CPF deve ter exatamente 11 dígitos!") - Mostra erro de tamanho
  • Linha 6: elif not cpf.isdigit(): - Verifica se não é apenas números
  • Linha 7: print("CPF deve conter apenas números!") - Mostra erro de formato
  • Linha 8: print(f"CPF válido: {cpf}") - Mostra CPF válido quando sair do loop

20. Contador de Vogais

palavra = input("Digite uma palavra: ").lower()
vogais = "aeiou"
contador = 0
for letra in palavra:
    if letra in vogais:
        contador += 1
print(f"A palavra '{palavra}' tem {contador} vogais")

Explicação linha por linha:

  • Linha 1: palavra = input("Digite uma palavra: ").lower() - Solicita palavra e converte para minúscula
  • Linha 2: vogais = "aeiou" - Define string com todas as vogais
  • Linha 3: contador = 0 - Inicializa contador de vogais
  • Linha 4: for letra in palavra: - Loop por cada letra da palavra
  • Linha 5: if letra in vogais: - Verifica se a letra é uma vogal
  • Linha 6: contador += 1 - Incrementa contador se for vogal
  • Linha 7: print(f"A palavra '{palavra}' tem {contador} vogais") - Mostra resultado final

5.7.5 MUITO DIFÍCIL (Nível 5)

21. Jogo da Forca

palavra_secreta = "python"
palavra_oculta = "_" * len(palavra_secreta)
tentativas = 6
letras_usadas = []

while tentativas > 0 and "_" in palavra_oculta:
    print(f"\nPalavra: {palavra_oculta}")
    print(f"Tentativas restantes: {tentativas}")
    print(f"Letras usadas: {letras_usadas}")
    
    letra = input("Digite uma letra: ").lower()
    
    if letra in letras_usadas:
        print("Você já usou essa letra!")
        continue
    
    letras_usadas.append(letra)
    
    if letra in palavra_secreta:
        print("Letra encontrada!")
        for i in range(len(palavra_secreta)):
            if palavra_secreta[i] == letra:
                palavra_oculta = palavra_oculta[:i] + letra + palavra_oculta[i+1:]
    else:
        print("Letra não encontrada!")
        tentativas -= 1

if "_" not in palavra_oculta:
    print(f"\nParabéns! Você ganhou! A palavra era: {palavra_secreta}")
else:
    print(f"\nGame Over! A palavra era: {palavra_secreta}")

Explicação linha por linha:

  • Linha 1: palavra_secreta = "python" - Define a palavra a ser adivinhada
  • Linha 2: palavra_oculta = "_" * len(palavra_secreta) - Cria versão oculta com underscores
  • Linha 3: tentativas = 6 - Define número máximo de tentativas
  • Linha 4: letras_usadas = [] - Lista para controlar letras já tentadas
  • Linha 6: while tentativas > 0 and "_" in palavra_oculta: - Continua enquanto há tentativas e letras ocultas
  • Linhas 7-9: Mostram estado atual do jogo
  • Linha 11: letra = input("Digite uma letra: ").lower() - Solicita letra e converte para minúscula
  • Linhas 13-15: Verificam se letra já foi usada e pulam para próxima iteração
  • Linha 17: letras_usadas.append(letra) - Adiciona letra à lista de usadas
  • Linhas 19-24: Processam letra correta, revelando posições na palavra
    • Linha 20: print("Letra encontrada!") - Confirma acerto
    • Linha 21: for i in range(len(palavra_secreta)): - Loop por cada posição da palavra
    • Linha 22: if palavra_secreta[i] == letra: - Verifica se letra está na posição i
    • Linha 23: palavra_oculta = palavra_oculta[:i] + letra + palavra_oculta[i+1:] - Revela letra na posição i
  • Linhas 25-27: Processam letra incorreta, diminuindo tentativas
  • Linhas 29-32: Verificam fim do jogo e mostram resultado

22. Sistema de Banco

saldo = 0
while True:
    print("\n=== BANCO PYTHON ===")
    print("1. Depositar")
    print("2. Sacar")
    print("3. Consultar Saldo")
    print("4. Sair")
    
    opcao = input("Escolha uma opção: ")
    
    if opcao == "1":
        valor = float(input("Digite o valor do depósito: "))
        if valor > 0:
            saldo += valor
            print(f"Depósito de R$ {valor:.2f} realizado! Saldo atual: R$ {saldo:.2f}")
        else:
            print("Valor inválido!")
    
    elif opcao == "2":
        valor = float(input("Digite o valor do saque: "))
        if valor > 0 and valor <= saldo:
            saldo -= valor
            print(f"Saque de R$ {valor:.2f} realizado! Saldo atual: R$ {saldo:.2f}")
        elif valor > saldo:
            print("Saldo insuficiente!")
        else:
            print("Valor inválido!")
    
    elif opcao == "3":
        print(f"Saldo atual: R$ {saldo:.2f}")
    
    elif opcao == "4":
        print("Obrigado por usar o Banco Python!")
        break
    
    else:
        print("Opção inválida!")

Explicação linha por linha:

  • Linha 1: saldo = 0 - Inicializa saldo da conta com zero
  • Linha 2: while True: - Loop infinito até escolher sair
  • Linhas 3-8: Mostram menu do banco com opções disponíveis
  • Linha 10: opcao = input("Escolha uma opção: ") - Solicita escolha do usuário
  • Linhas 12-17: Processam depósito com validação de valor positivo
    • Linha 13: valor = float(input("Digite o valor do depósito: ")) - Solicita valor do depósito
    • Linha 14: if valor > 0: - Verifica se valor é positivo
    • Linha 15: saldo += valor - Adiciona valor ao saldo
    • Linha 16: print(f"Depósito de R$ {valor:.2f} realizado! Saldo atual: R$ {saldo:.2f}") - Confirma depósito
  • Linhas 19-26: Processam saque com validações de valor e saldo
  • Linhas 28-29: Mostram saldo atual
  • Linhas 31-33: Encerram programa com mensagem de despedida
  • Linhas 35-36: Tratam opção inválida

23. Calculadora de IMC com Histórico

historico = []
while True:
    print("\n=== CALCULADORA DE IMC ===")
    print("1. Calcular IMC")
    print("2. Ver Histórico")
    print("3. Sair")
    
    opcao = input("Escolha uma opção: ")
    
    if opcao == "1":
        nome = input("Digite seu nome: ")
        peso = float(input("Digite seu peso (kg): "))
        altura = float(input("Digite sua altura (m): "))
        
        imc = peso / (altura ** 2)
        
        if imc < 18.5:
            classificacao = "Abaixo do peso"
        elif imc < 25:
            classificacao = "Peso normal"
        elif imc < 30:
            classificacao = "Sobrepeso"
        else:
            classificacao = "Obesidade"
        
        resultado = f"{nome}: IMC {imc:.2f} - {classificacao}"
        historico.append(resultado)
        
        print(f"\n{resultado}")
    
    elif opcao == "2":
        print("\n=== HISTÓRICO ===")
        if historico:
            for i, resultado in enumerate(historico, 1):
                print(f"{i}. {resultado}")
        else:
            print("Nenhum cálculo realizado ainda.")
    
    elif opcao == "3":
        print("Obrigado por usar a Calculadora de IMC!")
        break
    
    else:
        print("Opção inválida!")

Explicação linha por linha:

  • Linha 1: historico = [] - Inicializa lista para armazenar histórico de cálculos
  • Linha 2: while True: - Loop infinito até escolher sair
  • Linhas 3-7: Mostram menu da calculadora
  • Linha 9: opcao = input("Escolha uma opção: ") - Solicita escolha do usuário
  • Linhas 11-26: Processam cálculo de IMC
    • Linhas 12-14: Coletam dados do usuário (nome, peso, altura)
    • Linha 16: imc = peso / (altura ** 2) - Calcula IMC usando fórmula padrão
    • Linhas 18-24: Classificam IMC em categorias de peso
    • Linha 26: resultado = f"{nome}: IMC {imc:.2f} - {classificacao}" - Formata resultado
    • Linha 27: historico.append(resultado) - Adiciona resultado ao histórico
    • Linha 29: print(f"\n{resultado}") - Mostra resultado do cálculo
  • Linhas 31-37: Mostram histórico de cálculos anteriores
  • Linhas 39-41: Encerram programa
  • Linhas 43-44: Tratam opção inválida

24. Jogo de Dados

import random
pontuacao = 0
rodadas = 0

while True:
    print(f"\n=== JOGO DE DADOS ===")
    print(f"Pontuação: {pontuacao}")
    print(f"Rodadas: {rodadas}")
    print("1. Jogar")
    print("2. Sair")
    
    opcao = input("Escolha uma opção: ")
    
    if opcao == "1":
        dado1 = random.randint(1, 6)
        dado2 = random.randint(1, 6)
        soma = dado1 + dado2
        
        print(f"Dado 1: {dado1}")
        print(f"Dado 2: {dado2}")
        
        palpite = int(input("Qual sua previsão para a soma? "))
        
        if palpite == soma:
            pontos = 10
            print(f"Parabéns! Você acertou! Ganhou {pontos} pontos!")
        else:
            pontos = 5
            print(f"Quase! A soma foi {soma}. Você ganhou {pontos} pontos pela tentativa.")
        
        pontuacao += pontos
        rodadas += 1
    
    elif opcao == "2":
        print(f"Jogo encerrado! Pontuação final: {pontuacao} em {rodadas} rodadas")
        break
    
    else:
        print("Opção inválida!")

Explicação linha por linha:

  • Linha 1: import random - Importa módulo para gerar números aleatórios
  • Linha 2: pontuacao = 0 - Inicializa pontuação total do jogador
  • Linha 3: rodadas = 0 - Inicializa contador de rodadas jogadas
  • Linha 5: while True: - Loop infinito até escolher sair
  • Linhas 6-12: Mostram menu e estatísticas atuais
  • Linha 14: opcao = input("Escolha uma opção: ") - Solicita escolha do usuário
  • Linhas 16-29: Processam uma rodada do jogo
    • Linhas 17-19: Geram valores aleatórios para os dois dados
    • Linhas 21-22: Mostram valores dos dados
    • Linha 24: palpite = int(input("Qual sua previsão para a soma? ")) - Solicita palpite do usuário
    • Linhas 26-30: Avaliam palpite e atribuem pontos (10 se acertar, 5 se errar)
    • Linha 32: pontuacao += pontos - Adiciona pontos à pontuação total
    • Linha 33: rodadas += 1 - Incrementa contador de rodadas
  • Linhas 35-37: Encerram jogo mostrando estatísticas finais
  • Linhas 39-40: Tratam opção inválida

25. Sistema de Notas

alunos = {}
while True:
    print("\n=== SISTEMA DE NOTAS ===")
    print("1. Cadastrar Aluno")
    print("2. Adicionar Nota")
    print("3. Calcular Média")
    print("4. Ver Relatório")
    print("5. Sair")
    
    opcao = input("Escolha uma opção: ")
    
    if opcao == "1":
        nome = input("Digite o nome do aluno: ")
        if nome not in alunos:
            alunos[nome] = []
            print(f"Aluno {nome} cadastrado com sucesso!")
        else:
            print("Aluno já cadastrado!")
    
    elif opcao == "2":
        nome = input("Digite o nome do aluno: ")
        if nome in alunos:
            nota = float(input("Digite a nota: "))
            if 0 <= nota <= 10:
                alunos[nome].append(nota)
                print(f"Nota {nota} adicionada para {nome}")
            else:
                print("Nota deve estar entre 0 e 10!")
        else:
            print("Aluno não encontrado!")
    
    elif opcao == "3":
        nome = input("Digite o nome do aluno: ")
        if nome in alunos and alunos[nome]:
            media = sum(alunos[nome]) / len(alunos[nome])
            print(f"Média de {nome}: {media:.2f}")
        else:
            print("Aluno não encontrado ou sem notas!")
    
    elif opcao == "4":
        print("\n=== RELATÓRIO ===")
        if alunos:
            for nome, notas in alunos.items():
                if notas:
                    media = sum(notas) / len(notas)
                    print(f"{nome}: {len(notas)} notas, média {media:.2f}")
                else:
                    print(f"{nome}: sem notas")
        else:
            print("Nenhum aluno cadastrado!")
    
    elif opcao == "5":
        print("Sistema encerrado!")
        break
    
    else:
        print("Opção inválida!")

Explicação linha por linha:

  • Linha 1: alunos = {} - Inicializa dicionário para armazenar alunos e suas notas
  • Linha 2: while True: - Loop infinito até escolher sair
  • Linhas 3-9: Mostram menu do sistema
  • Linha 11: opcao = input("Escolha uma opção: ") - Solicita escolha do usuário
  • Linhas 13-19: Cadastram novo aluno
    • Linha 14: nome = input("Digite o nome do aluno: ") - Solicita nome do aluno
    • Linha 15: if nome not in alunos: - Verifica se aluno não existe
    • Linha 16: alunos[nome] = [] - Cria entrada no dicionário com lista vazia de notas
  • Linhas 21-30: Adicionam nota a um aluno existente
    • Linha 25: if 0 <= nota <= 10: - Valida se nota está no intervalo válido
    • Linha 26: alunos[nome].append(nota) - Adiciona nota à lista do aluno
  • Linhas 32-37: Calculam e mostram média de um aluno
    • Linha 35: media = sum(alunos[nome]) / len(alunos[nome]) - Calcula média aritmética
  • Linhas 39-48: Mostram relatório completo de todos os alunos
    • Linha 43: for nome, notas in alunos.items(): - Loop por cada aluno no dicionário
  • Linhas 50-52: Encerram sistema
  • Linhas 54-55: Tratam opção inválida

🎯 Parabéns! Você completou todos os exercícios de estruturas de repetição! Agora você domina loops for e while em Python. Continue praticando e explore mais possibilidades!

5.8 Referências bibliográficas

  • COZINHA TÉCNICA. Brigadeiro de chocolate. Disponível em: https://www.cozinhatecnica.com/2014/10/brigadeiro/. Acesso em: 05 mar. 2023.
  • DOWNEY, Allen B. Think Python: How to Think Like a Computer Scientist. Green Tea Press, 2nd edition, 2012.
  • FORBELLONE, André Luiz Villar; EBERSPACHER, Henri Frederico L. Lógica de Programação: A Construção de Algoritmos e Estruturas de Dados. São Paulo: Pearson, 3ª edição, 2017.
  • PYTHON. Control Flow Tools: for statements. Disponível em: https://docs.python.org/3/tutorial/controlflow.html#for-statements. Acesso em: 05 mar. 2023.
  • PYTHON. Control Flow Tools: while statements. Disponível em: https://docs.python.org/3/tutorial/introduction.html#first-steps-towards-programming. Acesso em: 05
  • PYTHON. Control Flow Tools: for statements. Disponível em: https://docs.python.org/3/tutorial/controlflow.html#for-statements. Acesso em: 05 mar. 2023.
  • PYTHON. 4. More Control Flow Tools. Disponível em: https://docs.python.org/3/tutorial/controlflow.html#more-control-flow-tools. Acesso em: 06 mar. 2023.
  • PYTHON. 4.2. for Statements. Disponível em: https://docs.python.org/3/reference/compound_stmts.html#for. Acesso em: 06 mar. 2023.
  • W3SCHOOLS. Python for Loops. Disponível em: https://www.w3schools.com/python/python_for_loops.asp. Acesso em: 06 mar. 2023.
  • W3SCHOOLS. Python while Loops. Disponível em: https://www.w3schools.com/python/python_while_loops.asp. Acesso em: 06 mar. 2023.
  • ZIVIANI, Nivio. Projeto de Algoritmos com Implementações em Pascal e C. São Paulo: Cengage Learning, 2007.