🐍 Dominando Loops em Python

While Loops e For in Range - Do básico ao avançado com explicações que até um bebe entenderia!

🎯 O que é um Loop While?

Imagine que você precisa contar até 10, mas só tem uma calculadora que conta de 1 em 1. Um loop while é como ter um assistente que vai repetir a ação de contar para você, ENQUANTO uma condição for verdadeira.

🧠 Conceito Fundamental

O while é uma estrutura que fala: "Ei Python, continue fazendo isso ENQUANTO aquela condição for verdadeira"


while # "enquanto" # faça isso aqui # e continue fazendo...

🏗️ Anatomia do While

# Estrutura básicawhile condição: # código que vai ser repetido # IMPORTANTE: modificar a variável da condição!
🎯

Condição

Uma pergunta que retorna True ou False. Ex: x < 10

🔄

Repetição

O código dentro do while executa toda vez que a condição for True

🛑

Parada

Quando a condição vira False, o loop para

🔄 While vs For: Quando Usar Cada Um?

Imagine que você quer fazer 100 flexões. Existem duas maneiras de contar:

While Loop

Use quando: Não sabe EXATAMENTE quantas vezes vai repetir

"Continue até eu me cansar"

🔢

For Loop

Use quando: Sabe EXATAMENTE quantas vezes quer repetir

"Quero fazer exatamente 100 flexões"

📊 Comparação Prática

# WHILE - Usado quando a condição pode mudar dinamicamente energia = 100 while energia > 0: # Não sabemos quando vai parar print("Fazendo flexão...") energia -= 10 # Energia diminui aleatoriamente # FOR - Usado quando sabemos o número exato for i in range(100): # Exatamente 100 vezes print(f"Flexão número {i+1}")

👶 Exemplo Super Básico - While

Vamos contar de 1 até 3. Simples como respirar:

# Contando de 1 até 3contador = 1 # Começamos com 1while contador <= 3: # Enquanto contador for menor ou igual a 3 print(contador) # Mostra o número contador += 1 # Adiciona 1 (SUPER IMPORTANTE!)print("Acabou!")
1 2 3 Acabou!

💡 Por que funciona?

  1. contador = 1 → Condição: 1 <= 3? SIM! → Executa
  2. contador = 2 → Condição: 2 <= 3? SIM! → Executa
  3. contador = 3 → Condição: 3 <= 3? SIM! → Executa
  4. contador = 4 → Condição: 4 <= 3? NÃO! → Para

🚀 Introdução ao FOR IN RANGE

O for in range() é como ter um contador automático! É perfeito quando você sabe exatamente quantas vezes quer repetir algo.

🎯 O que é o range()?

O range() é uma função que cria uma sequência de números. É como uma máquina de números!

  • range(5) → 0, 1, 2, 3, 4 (5 números, começando do 0)
  • range(1, 6) → 1, 2, 3, 4, 5 (do 1 até 5)
  • range(2, 10, 2) → 2, 4, 6, 8 (de 2 em 2)

🔍 Anatomia do For In Range

# Estrutura básica for variavel in range(numero): # código que vai ser repetido # A variável muda automaticamente!

🏃‍♂️ Exemplo Prático

# Contando de 0 até 4 (5 números) for i in range(5): print(f"Número: {i}")
Número: 0 Número: 1 Número: 2 Número: 3 Número: 4

⚠️ Atenção: range(5) vai de 0 até 4!

O Python sempre exclui o último número. É como uma fila: se você quer 5 pessoas, numera de 0 até 4!

🎛️ Variações do Range()

1️⃣ range(stop) - Só o Final

# De 0 até n-1 for i in range(3): print(i) # Imprime: 0, 1, 2

2️⃣ range(start, stop) - Início e Final

# De start até stop-1 for i in range(1, 5): print(i) # Imprime: 1, 2, 3, 4

3️⃣ range(start, stop, step) - Com Passo

# De start até stop-1, pulando de step em step for i in range(0, 10, 2): print(i) # Imprime: 0, 2, 4, 6, 8

4️⃣ Range Decrescente

# Contagem regressiva! for i in range(5, 0, -1): print(i) # Imprime: 5, 4, 3, 2, 1 print("🚀 Decolagem!")

🥊 While vs For: Round Final!

Vamos fazer a mesma tarefa com os dois métodos para você ver a diferença:

🎯 Missão: Imprimir números de 1 até 5

🔄 Método While

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

Linhas: 4 | Controle: Manual

🚀 Método For

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

Linhas: 2 | Controle: Automático

🏆 Veredito:

  • For: Mais limpo, menos código, sem risco de loop infinito
  • While: Mais flexível, pode parar com condições complexas

⚠️ Cuidado com o Loop Infinito!

🚨 PERIGO: Loop Infinito

Se você esquecer de modificar a variável da condição, seu programa vai rodar para sempre!

# ❌ CÓDIGO PERIGOSO - NÃO RODE!contador = 1while contador <= 3: print(contador) # Esqueceu do contador += 1 → LOOP INFINITO! # Vai imprimir 1, 1, 1, 1... para sempre!

🛡️ Como se proteger?

Sempre se pergunte: "O que vai fazer minha condição virar False?"

Se não souber a resposta, você provavelmente tem um loop infinito!

Dica: Use for quando souber quantas repetições precisa!

💪 Exercícios Progressivos

Exercícios cuidadosamente selecionados do básico ao expert, cobrindo desde problemas simples até desafios que você pode encontrar em competições e entrevistas técnicas!

🟢 Nível Iniciante - Fundamentos

FÁCIL

🍎 Exercício 1: Contador de Maçãs

Contexto: Você trabalha em um pomar e precisa contar quantas maçãs colheu.

Problema: Crie um programa que conte de 1 até 10 e imprima "Maçã número X" para cada número.

Exemplo de saída:

Maçã número 1 Maçã número 2 Maçã número 3 ... Maçã número 10 Total: 10 maçãs coletadas!
FÁCIL

🔢 Exercício 2: Soma dos Primeiros N Números

Inspirado em: LeetCode básico

Problema: Dado um número N, calcule a soma de todos os números de 1 até N usando while loop.

Exemplo:

  • Input: N = 5
  • Output: 15 (porque 1+2+3+4+5 = 15)
FÁCIL

⭐ Exercício 3: Contador de Estrelas

Contexto: Você está fazendo um desenho em ASCII e precisa criar linhas de estrelas.

Problema: Imprima 7 linhas, onde cada linha tem um número crescente de estrelas (linha 1 = 1 estrela, linha 2 = 2 estrelas, etc.).

Exemplo de saída:

* ** *** **** ***** ****** *******
FÁCIL

🎯 Exercício 4: Tabuada Simples

Contexto: Você está ajudando uma criança a estudar matemática.

Problema: Crie a tabuada do 5, mostrando as multiplicações de 5 × 1 até 5 × 10.

Exemplo de saída:

5 × 1 = 5 5 × 2 = 10 5 × 3 = 15 ... 5 × 10 = 50
FÁCIL

🏃 Exercício 5: Contador Regressivo

Contexto: Você está criando um timer para uma corrida.

Problema: Faça uma contagem regressiva de 10 até 1, e no final mostre "LARGADA!".

Exemplo de saída:

10 9 8 7 6 5 4 3 2 1 LARGADA!

🟡 Nível Médio - Aplicando Conceitos

MÉDIO

💰 Exercício 6: Simulador de Poupança

Contexto: Você quer saber quando sua poupança vai atingir uma meta.

Problema: Comece com R$ 1000,00. A cada mês, adicione R$ 150,00 e ganhe 0,5% de juros sobre o total. Calcule em quantos meses você chegará a R$ 3000,00.

Fórmula: novo_valor = (valor_atual + deposito) * 1.005

MÉDIO

🎲 Exercício 7: Jogo de Par ou Ímpar

Contexto: Criar um jogo simples de par ou ímpar com o computador.

Problema: O usuário escolhe par ou ímpar, digita um número, o computador gera um número aleatório. Continue até o usuário decidir parar.

MÉDIO

🧮 Exercício 8: Calculadora de Fibonacci

Contexto: Implementar a sequência de Fibonacci usando while loop.

Problema: Gere os primeiros 15 números da sequência de Fibonacci (1, 1, 2, 3, 5, 8...).

MÉDIO

🔐 Exercício 9: Verificador de Número Primo

Contexto: Verificar se um número é primo usando while loop.

Problema: Crie um programa que verifica se um número informado pelo usuário é primo.

🔴 Nível Avançado - Desafios

DIFÍCIL

🎯 Exercício 10: Sistema de Login

Contexto: Sistema de autenticação com limite de tentativas.

Problema: Crie um sistema onde o usuário tem 3 tentativas para acertar uma senha. Após 3 erros, bloquear por 30 segundos.

🚀 Nível FOR IN RANGE - Novos Horizontes

FÁCIL

🎵 Exercício 11: Playlist de Músicas

Contexto: Você está organizando uma playlist e quer numerar as músicas.

Problema: Use for in range() para criar uma playlist de 8 músicas, mostrando "Música 1", "Música 2", etc.

Exemplo de saída:

🎵 Música 1 🎵 Música 2 🎵 Música 3 ... 🎵 Música 8 🎧 Total: 8 músicas na playlist!
FÁCIL

🔢 Exercício 12: Tabuada Moderna

Contexto: Ensinar tabuada para crianças de forma moderna.

Problema: Use for in range() para criar a tabuada do 7, de 7×1 até 7×12.

Exemplo de saída:

7 × 1 = 7 7 × 2 = 14 7 × 3 = 21 ... 7 × 12 = 84
MÉDIO

🎪 Exercício 13: Pirâmide de Números

Contexto: Criar uma pirâmide visual com números.

Problema: Use for in range() para criar uma pirâmide onde cada linha mostra números crescentes.

Exemplo de saída:

1 1 2 1 2 3 1 2 3 4 1 2 3 4 5
MÉDIO

🎯 Exercício 14: Contador de Pontos

Contexto: Sistema de pontuação de um jogo onde você ganha pontos específicos.

Problema: Use for in range(10, 101, 10) para mostrar pontuações de 10 em 10, até 100 pontos.

Desafio extra: Calcule e mostre o total de pontos acumulados.

Exemplo de saída:

🎯 Nível 1: 10 pontos 🎯 Nível 2: 20 pontos 🎯 Nível 3: 30 pontos ... 🎯 Nível 10: 100 pontos 🏆 Total acumulado: 550 pontos!

✅ Soluções Detalhadas

Cada solução vem com explicação passo a passo e pontos importantes destacados!

🍎 Solução 1: Contador de Maçãs

# Contador de Maçãs - Soluçãocontador = 1 # Inicializa o contadorwhile contador <= 10: # Enquanto contador for menor ou igual a 10 print(f"Maçã número {contador}") # Mostra a maçã atual contador += 1 # Incrementa o contadorprint(f"Total: {contador-1} maçãs coletadas!") # Total final

📋 Pontos importantes:

  1. Inicialização: Começamos com contador = 1
  2. Condição: while contador <= 10 (vai de 1 até 10)
  3. Incremento: contador += 1 evita loop infinito
  4. Total: contador-1 porque após o último loop, contador vira 11

🔢 Solução 2: Soma dos Primeiros N Números

# Soma dos Primeiros N Números - Soluçãon = 5 # Número até onde somar (você pode mudar)soma = 0 # Acumulador da somaatual = 1 # Número atual sendo somadowhile atual <= n: # Enquanto não chegou ao limite soma += atual # Adiciona o número atual à soma print(f"Somando {atual}, total agora: {soma}") # Debug atual += 1 # Próximo númeroprint(f"Resultado final: {soma}")

🧠 Conceito: Acumulador

A variável soma é um acumulador - ela guarda o resultado parcial e vai crescendo a cada iteração.

Padrão importante: acumulador += valor

⭐ Solução 3: Contador de Estrelas

# Contador de Estrelas - Soluçãolinha = 1 # Começamos na primeira linhawhile linha <= 7: # 7 linhas total estrelas = "*" * linha # Cria string com N estrelas print(estrelas) # Imprime a linha linha += 1 # Próxima linha

🔥 Dica Pro:

"*" * linha é um truque do Python que repete a string "*" um número específico de vezes!

  • "*" * 1 = "*"
  • "*" * 3 = "***"
  • "*" * 5 = "*****"

🎯 Solução 4: Tabuada Simples

# Tabuada do 5 - Soluçãomultiplicador = 1 # Começamos multiplicando por 1while multiplicador <= 10: # Vai até 10 resultado = 5 * multiplicador # Calcula 5 × multiplicador print(f"5 × {multiplicador} = {resultado}") # Mostra a conta multiplicador += 1 # Próximo número

💡 Conceito: f-strings

O f"texto {variavel}" é uma forma moderna e limpa de inserir variáveis dentro de strings em Python. Muito mais legível que concatenação!

🏃 Solução 5: Contador Regressivo

# Contador Regressivo - Soluçãotempo = 10 # Começamos em 10while tempo >= 1: # Enquanto maior ou igual a 1 print(tempo) # Mostra o número tempo -= 1 # DECREMENTA (diminui 1)print("LARGADA!") # Mensagem final

⚠️ Atenção: Decremento!

Aqui usamos tempo -= 1 em vez de tempo += 1!

Isso diminui o valor, fazendo a contagem ser regressiva.

Condição: while tempo >= 1 (não tempo <= 1!)

🟡 Soluções Nível Médio

💰 Solução 6: Simulador de Poupança

# Simulador de Poupança - Soluçãosaldo = 1000.00 # Valor inicialdeposito_mensal = 150.00 # Valor depositado por mêstaxa_juros = 1.005 # 0,5% = 1.005meta = 3000.00 # Objetivomes = 0 # Contador de mesesprint(f"💰 Meta: R$ {meta:.2f}")print(f"💵 Saldo inicial: R$ {saldo:.2f}")print("" + "="*40)while saldo < meta: # Enquanto não atingir a meta mes += 1 # Próximo mês saldo += deposito_mensal # Adiciona depósito saldo *= taxa_juros # Aplica juros print(f"Mês {mes:2d}: R$ {saldo:8.2f}")print("" + "="*40)print(f"🎉 Meta atingida em {mes} meses!")print(f"💰 Saldo final: R$ {saldo:.2f}")

🧠 Conceitos Financeiros

Juros compostos: saldo *= 1.005 (multiplica por 1 + taxa)

Formatação: {valor:.2f} mostra 2 casas decimais

Alinhamento: {mes:2d} alinha números à direita

🎲 Solução 7: Jogo de Par ou Ímpar

# Jogo de Par ou Ímpar - Soluçãoimport randomcontinuar = Truevitorias_usuario = 0vitorias_computador = 0print("🎲 Bem-vindo ao Jogo de Par ou Ímpar!")while continuar: print("\n" + "="*30) # Loop para validar escolha escolha_valida = False while not escolha_valida: escolha = input("Escolha PAR ou ÍMPAR: ").upper().strip() if escolha in ["PAR", "IMPAR", "ÍMPAR"]: escolha_valida = True else: print("❌ Digite apenas PAR ou ÍMPAR!") # Jogo em si numero_usuario = int(input("Digite um número (0-10): ")) numero_computador = random.randint(0, 10) soma = numero_usuario + numero_computador resultado = "PAR" if soma % 2 == 0 else "ÍMPAR" print(f"Você: {numero_usuario} | Computador: {numero_computador}") print(f"Soma: {soma} ({resultado})") if escolha == resultado or (escolha == "IMPAR" and resultado == "ÍMPAR"): print("🎉 Você ganhou!") vitorias_usuario += 1 else: print("😔 Computador ganhou!") vitorias_computador += 1 resposta = input("\nJogar novamente? (s/n): ").lower().strip() continuar = resposta in ["s", "sim", "y", "yes"]print(f"\n🏆 Placar Final:")print(f"Você: {vitorias_usuario} | Computador: {vitorias_computador}")

🎯 Conceitos Avançados Aplicados:

  • While aninhado: Loop dentro de loop para validação
  • Operador módulo (%): soma % 2 == 0 verifica se é par
  • Operador ternário: valor = A if condição else B
  • Métodos de string: .upper(), .lower(), .strip()

🚀 Soluções FOR IN RANGE

🎵 Solução 11: Playlist de Músicas

# Playlist de Músicas - Solução# Criando playlist com 8 músicasfor i in range(1, 9): # De 1 até 8 print(f"🎵 Música {i}")print("🎧 Total: 8 músicas na playlist!")

🎯 Por que range(1, 9)?

  • Queremos: Números de 1 até 8
  • range(1, 9): Começa em 1, para ANTES de 9
  • Resultado: 1, 2, 3, 4, 5, 6, 7, 8 ✅
  • Lembre-se: O último número é sempre EXCLUÍDO!

🔢 Solução 12: Tabuada Moderna

# Tabuada do 7 - Soluçãonumero = 7 # Número da tabuadaprint(f"📚 Tabuada do {numero}:")print("-" * 20)for i in range(1, 13): # De 1 até 12 resultado = numero * i print(f"{numero} × {i:2d} = {resultado:3d}")

🎨 Formatação Profissional

{i:2d} = Alinha número à direita em 2 espaços

{resultado:3d} = Alinha resultado em 3 espaços

"-" * 20 = Cria uma linha de 20 traços

Isso deixa a saída organizada e bonita! 📐

🎪 Solução 13: Pirâmide de Números

# Pirâmide de Números - Soluçãoaltura = 5 # Altura da pirâmideprint("🎪 Pirâmide de Números:")# Para cada linha da pirâmidefor linha in range(1, altura + 1): # De 1 até altura numeros_da_linha = [] # Lista para guardar os números # Para cada número na linha for numero in range(1, linha + 1): numeros_da_linha.append(str(numero)) # Junta os números com espaço e imprime print(" ".join(numeros_da_linha))print("🎉 Pirâmide completa!")

🧠 For dentro de For!

Este exercício usa loops aninhados (um for dentro de outro):

  • For externo: Controla as linhas (1, 2, 3, 4, 5)
  • For interno: Controla os números de cada linha
  • Linha 1: números de 1 até 1 → "1"
  • Linha 2: números de 1 até 2 → "1 2"

🎯 Solução 14: Contador de Pontos

# Contador de Pontos - Soluçãototal_pontos = 0 # Acumulador de pontosnivel = 1 # Contador de nívelprint("🎮 Sistema de Pontuação:")print("=" * 30)# De 10 em 10, até 100for pontos in range(10, 101, 10): print(f"🎯 Nível {nivel:2d}: {pontos:3d} pontos") total_pontos += pontos # Acumula os pontos nivel += 1 # Próximo nívelprint("=" * 30)print(f"🏆 Total acumulado: {total_pontos} pontos!")# Bônus: Calculando de forma matemáticatotal_matematico = sum(range(10, 101, 10))print(f"🧮 Verificação matemática: {total_matematico} pontos")

🚀 Conceitos Avançados

  • range(10, 101, 10): De 10 até 100, pulando de 10 em 10
  • Acumulador: total_pontos += pontos
  • Formatação: {nivel:2d} alinha em 2 dígitos
  • sum(range()): Soma automática de uma sequência
  • Verificação: Sempre bom conferir o resultado!