3 Laços de Repetição
Laços de repetição são estruturas fundamentais que nos permitem executar o mesmo bloco de código várias vezes. Em Python, os dois principais tipos de laços são o while e o for.
3.1 O Laço while
O laço while (enquanto) executa um bloco de código repetidamente enquanto uma condição especificada for verdadeira. É ideal para situações onde não sabemos de antemão quantas vezes o loop precisará ser executado.
Sintaxe:
while condicao:
# Código a ser executado enquanto a condição for VerdadeiraCuidado: É fundamental garantir que a condição do while possa se tornar falsa em algum momento. Caso contrário, o programa entrará em um laço infinito.
3.2 Exemplos Básicos de while
Contagem (contagem.py): Um exemplo clássico onde um contador é incrementado a cada iteração até que a condição do while se torne falsa.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
#
# Crie um programa que peça ao usuário um número inteiro e, em seguida,
# conte de 1 até esse número, imprimindo cada número em uma nova linha.
#
# O programa deve:
# 1. Pedir ao usuário para inserir um número.
# 2. Usar um loop `while` para contar de 1 até o número fornecido.
# 3. Imprimir cada número durante a contagem.
# 4. Exibir uma mensagem final após a conclusão da contagem.
#
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
print("Contador")
# Pede ao usuário para definir o número final da contagem
numero_final = int(input("Digite um número inteiro para a contagem: "))
# Inicializa a variável de controle com 1
contador = 1
# O loop continua ENQUANTO o contador for menor ou igual ao número final
while contador <= numero_final:
print(contador)
# Passo fundamental: aumenta o valor do contador para progredir na contagem
# e evitar um loop infinito.
contador = contador + 1
# Executa apenas quando o loop termina
print("Contagem concluída!")
Validação de Senha (validador.py): Similar ao anterior, mas usado para validar um PIN. O loop continua enquanto o PIN inserido estiver incorreto.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
#
# Crie um programa que simule a tela de bloqueio de um dispositivo que
# requer um PIN para ser desbloqueado. O programa deve continuar pedindo
# o PIN ao usuário até que ele digite a combinação correta.
#
# Requisitos:
#
# 1. PIN Secreto:
# - Dentro do seu código, defina uma variável chamada `segredo` e
# atribua a ela o valor "1234". Este será o PIN correto.
#
# 2. Entrada do Usuário:
# - O programa deve solicitar que o usuário "Digite o PIN de 4 dígitos: ".
#
# 3. Lógica de Validação com Leitura Antecipada:
# - Para resolver este problema, você deve usar o padrão de "leitura
# antecipada" (priming read):
# a. Solicite a entrada do usuário **uma vez antes** de iniciar o laço.
# b. O laço `while` deve verificar se a entrada fornecida é
# diferente do `segredo`.
# c. **Dentro do laço**, se o PIN estiver incorreto, exiba a
# mensagem "PIN errado, tente novamente." e peça a entrada novamente
# para que o laço possa ser reavaliado.
#
# 4. Saída de Sucesso:
# - Quando o usuário finalmente digitar o PIN correto, o laço deve
# terminar, e o programa deve exibir a mensagem "Dispositivo Desbloqueado."
#
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Define o PIN correto que o usuário precisa adivinhar.
segredo = "1234"
# A primeira entrada é solicitada *antes* do início do loop.
# Isso "prepara" a variável `pin` para a verificação na condição do `while`.
pin = input("Digite o PIN de 4 dígitos: ")
# O laço `while` continuará executando enquanto o `pin` inserido pelo usuário
# for diferente do `segredo`. Se o primeiro `pin` já estiver correto,
# o corpo deste loop nunca será executado.
while pin != segredo:
# Informa ao usuário que a tentativa foi malsucedida.
print("PIN errado, tente novamente.")
# Pede a entrada novamente. A cada nova tentativa, a variável `pin` é
# atualizada, e a condição do `while` será reavaliada na próxima iteração.
pin = input("Digite o PIN de 4 dígitos: ")
# Esta linha só é alcançada quando a condição do `while` se torna falsa,
# o que significa que `pin` é igual a `segredo`.
print("Dispositivo Desbloqueado.")
3.3 Aplicações Práticas com while
Jogo de Adivinhação (adivinhacao.py): O loop principal do jogo continua enquanto o palpite do jogador for diferente do número secreto.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
#
# Crie um programa que simula um jogo de adivinhação.
#
# O programa deve funcionar da seguinte maneira:
#
# 1. Gere um número inteiro aleatório entre 1 e 100. Este será o
# "número secreto" que o jogador precisa adivinhar.
#
# 2. Peça ao jogador para digitar um palpite.
#
# 3. Compare o palpite do jogador com o número secreto:
# - Se o palpite for menor que o número secreto, o programa deve
# imprimir a mensagem: "Muito baixo! Tente um número maior."
# - Se o palpite for maior que o número secreto, o programa deve
# imprimir a mensagem: "Muito alto! Tente um número menor."
#
# 4. O jogo deve continuar pedindo novos palpites até que o jogador
# acerte o número secreto.
#
# 5. Quando o jogador acertar, o programa deve imprimir uma mensagem
# de parabéns, revelando qual era o número secreto. Por exemplo:
# "Parabéns! Você acertou! O número secreto era 75."
#
# Para este desafio, assuma que o usuário sempre digitará um número
# inteiro válido quando solicitado.
#
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# A linha `from random import randint` importa especificamente a função `randint`
# do módulo `random`.
from random import randint
# A função `randint(1, 100)` gera um número inteiro aleatório
# entre 1 e 100 (incluindo 1 e 100). O operador `=` (atribuição)
# armazena esse número aleatório
# na variável `numero_secreto`.
numero_secreto = randint(1, 100)
print("--- Jogo de Adivinhação ---")
print("Tente adivinhar o número secreto entre 1 e 100.")
# Pede ao usuário para fornecer o primeiro palpite e converte o texto digitado (string) para um número inteiro.
palpite = int(input("Digite seu palpite: "))
# Inicia um laço `while` que continuará executando enquanto o palpite do usuário for diferente do número secreto.
while palpite != numero_secreto:
# Se o palpite for menor que o número secreto, informa ao usuário para tentar um número maior.
if palpite < numero_secreto:
print("Muito baixo! Tente um número maior.")
# Se o palpite for maior que o número secreto, informa ao usuário para tentar um número menor.
elif palpite > numero_secreto:
print("Muito alto! Tente um número menor.")
# Pede um novo palpite ao usuário para a próxima tentativa.
# Este passo é crucial para que o loop não se torne infinito.
palpite = int(input("Digite seu palpite: "))
# Quando o loop `while` termina, significa que o usuário acertou o número.
# O programa então exibe uma mensagem de parabéns, mostrando qual era o número secreto.
print(f"Parabéns! Você acertou! O número secreto era {numero_secreto}.")
print("Fim do jogo!")
Geração de Sequências (sequencia_fibonacci.py): O while é usado para gerar os números da sequência de Fibonacci até que um determinado limite seja atingido.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
#
# Crie um programa que gera e exibe a sequência de Fibonacci até um
# número limite fornecido pelo usuário.
#
# O programa deve solicitar ao usuário as seguintes informações:
# 1. Um número inteiro que servirá como o limite máximo para a sequência.
#
# A lógica para gerar a sequência é a seguinte:
# 1. A sequência de Fibonacci sempre começa com 0 e 1.
# 2. Cada número subsequente é a soma dos dois números anteriores.
# - Exemplo: 0, 1, 1 (0 + 1), 2 (1 + 1), 3 (1 + 2), 5 (2 + 3), ...
# 3. O programa deve gerar e imprimir os números da sequência que são
# menores ou iguais ao limite informado.
# 4. Os números devem ser impressos na mesma linha, separados por um espaço.
#
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Pede ao usuário para inserir o número limite e o converte para um inteiro.
limite = int(input("Digite um número limite para a sequência de Fibonacci: "))
# Inicia a sequência com os dois primeiros números.
# 'a' representa o número atual da sequência e 'b' o próximo.
a = 0
b = 1
# Imprime um cabeçalho para indicar o início da sequência.
print(f"Sequência de Fibonacci até {limite}:")
# O laço 'while' continua enquanto o número atual 'a' for menor ou igual ao limite.
while a <= limite:
# Imprime o número atual da sequência.
# O parâmetro `end=" "` faz com que o print termine com um espaço
# em vez de uma quebra de linha, mantendo os números na mesma linha.
print(a, end=" ")
# Calcula o próximo número da sequência somando os dois anteriores.
proximo_fibonacci = a + b
# Atualiza os valores para a próxima iteração do laço:
# O número atual 'a' se torna o próximo número 'b'.
a = b
# O próximo número 'b' se torna o novo valor calculado.
b = proximo_fibonacci
# Imprime uma linha em branco para separar a saída.
print()
# Informa que a geração da sequência foi concluída.
print("Fim da sequência.")
3.4 Controlando o Fluxo do Laço com break e continue
Às vezes, precisamos de mais controle sobre o comportamento de um loop.
break: Interrompe o loop imediatamente, e a execução do programa continua na linha seguinte ao loop.continue: Pula para a próxima iteração do loop, ignorando todo o código restante no bloco da iteração atual.
Sintaxe do break:
while condicao_loop:
# ... código ...
if condicao_parada:
break # Interrompe o loop
# ... mais código ...Sintaxe do continue:
while condicao_loop:
# ... código ...
if condicao_pular:
continue # Pula para a próxima iteração
# ... código que pode ser pulado ...3.5 Exemplos de break
Validação de Entrada (perguntador.py): O loop insiste até que o usuário forneça a entrada esperada (“sim”).
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
#
# Crie um programa que faz uma pergunta repetidamente até receber a resposta "sim".
#
# O programa deve funcionar da seguinte maneira:
#
# 1. Inicie um loop que continue indefinidamente (um laço `while True`).
# 2. Dentro do loop, faça a pergunta ao usuário: "Podemos ir ao parque? ".
# 3. Leia a resposta do usuário.
# 4. Verifique se a resposta é exatamente igual a "sim".
# 5. Se a resposta for "sim", o programa deve interromper o loop.
# 6. Se a resposta for qualquer outra coisa, o loop deve continuar, e a pergunta
# deve ser feita novamente.
# 7. Após o loop ser interrompido, o programa deve exibir a mensagem:
# "Finalmente! Vamos lá."
#
# Este exercício tem como objetivo praticar o uso do laço `while True`
# em conjunto com a instrução `break` para controlar o fluxo de um programa
# com base na entrada do usuário.
#
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# O laço `while True` cria um loop que, por si só, é infinito.
# A única maneira de sair deste loop é através de uma instrução `break`.
while True:
# A cada iteração, o programa pede uma entrada ao usuário.
resposta = input("Podemos ir ao parque? ")
# A estrutura `if` verifica a condição de parada.
# Se o usuário digitar "sim", o bloco de código do `if` será executado.
if resposta == "sim":
# A instrução `break` interrompe o laço `while` imediatamente.
# A execução do programa continuará na primeira linha após o loop.
break
# Esta linha só é alcançada depois que o `break` é executado,
# ou seja, somente quando o usuário responde "sim".
print("Finalmente! Vamos lá.")
Eco infinito (eco_infinito.py): Outro exemplo de laço infinito que é interrompido break quando o usuário digita “sair”.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
#
# Crie um programa que funcione como um "eco" contínuo, repetindo
# o que o usuário digita até que um comando específico de saída
# seja inserido.
#
# O programa deve funcionar da seguinte maneira:
#
# 1. O programa deve iniciar um laço que repita indefinidamente.
# 2. Dentro do laço, ele deve solicitar ao usuário que digite
# qualquer texto.
# 3. Após receber a entrada do usuário, o programa deve verificar
# o conteúdo do texto.
# 4. Se o texto digitado for exatamente igual a "sair", o programa
# deve imprimir uma mensagem de despedida e encerrar o laço.
# 5. Para qualquer outro texto, o programa deve imprimir a palavra
# "Eco: " seguida pelo texto que o usuário inseriu.
#
# Exemplo de uso do programa.
#
# Bem-vindo ao 'Eco Infinito'!
# Digite algo para eu repetir. Digite 'sair' para terminar.
# Sua vez: ola
# Eco: ola
# Sua vez: tudo bem?
# Eco: tudo bem?
# Sua vez: sair
# Entendido. Encerrando o programa...
# Fim do programa.
#
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Exibe uma mensagem de boas-vindas e as instruções para o usuário.
print("Bem-vindo ao 'Eco Infinito'!")
print("Digite algo para eu repetir. Digite 'sair' para terminar.")
# O laço `while True` cria um loop que, por padrão, executa para sempre.
# A única maneira de sair deste laço é usando uma instrução `break`.
while True:
# Solicita que o usuário insira um texto e armazena o valor na variável `entrada`.
entrada = input("Sua vez: ")
# Verifica se o texto digitado pelo usuário é exatamente igual à string "sair".
if entrada == "sair":
# Se a condição for verdadeira, exibe uma mensagem de encerramento.
print("Entendido. Encerrando o programa...")
# A instrução `break` interrompe imediatamente o laço `while`.
# O programa continuará a ser executado na primeira linha após o laço.
break
# Este código só é executado se a condição do `if` for falsa (ou seja,
# se o usuário não digitou "sair").
# Imprime a palavra "Eco: " seguida pelo texto que foi inserido.
print(f"Eco: {entrada}")
# Esta linha é executada após o laço `while` ser interrompido pelo `break`.
print("Fim do programa.")
Jogo com Tentativas Limitadas (jogo_palavra_secreta.py): O break encerra o jogo assim que o jogador acerta a palavra, antes que as tentativas acabem.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
#
# Crie um jogo de adivinhação onde o jogador deve descobrir uma
# palavra secreta em um número limitado de tentativas.
#
# O programa deve funcionar da seguinte maneira:
# 1. Defina uma palavra secreta (por exemplo, "python").
# 2. Estabeleça um número máximo de tentativas (por exemplo, 3).
# 3. O jogo deve continuar enquanto o jogador tiver tentativas restantes.
# 4. A cada rodada, o programa deve solicitar ao jogador que insira
# um palpite.
# 5. Se o palpite for igual à palavra secreta, o jogador ganha, e o
# jogo termina.
# 6. Se o palpite estiver incorreto, o número de tentativas diminui.
# 7. Se as tentativas acabarem e o jogador não tiver acertado a
# palavra, ele perde.
# 8. Ao final, o programa deve exibir uma mensagem indicando se o
# jogador ganhou ou perdeu. Se perdeu, revele qual era a palavra
# secreta.
#
# Exemplo de execução n. 1:
#
# --- Jogo da Palavra Secreta ---
# Você tem 3 tentativas para adivinhar a palavra.
# Dica: É uma linguagem de programação!
# Tentativa 1: limão
# Tentativa 2: python
# Parabéns, você acertou!
# Fim de jogo.
#
# Exemplo de execução n. 2:
#
# --- Jogo da Palavra Secreta ---
# Você tem 3 tentativas para adivinhar a palavra.
# Dica: É uma linguagem de programação!
# Tentativa 1: açaí
# Tentativa 2: pitaia
# Tentativa 3: manga
# Você perdeu! Suas tentativas acabaram.
# A palavra secreta era 'python'.
# Fim de jogo.
#
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Define a palavra que o jogador precisa adivinhar.
palavra_secreta = "python"
# Define o número máximo de chances que o jogador tem.
max_tentativas = 3
# Cria uma variável de controle (flag) para saber se o jogador venceu.
# Começa como False, pois o jogo ainda não terminou.
jogador_ganhou = False
# Inicia um contador para registrar quantas tentativas foram feitas.
tentativas_feitas = 0
print("--- Jogo da Palavra Secreta ---")
print(f"Você tem {max_tentativas} tentativas para adivinhar a palavra.")
print("Dica: É uma linguagem de programação!")
# O loop `while` continua enquanto o número de tentativas feitas for menor
# que o máximo permitido. A cada iteração, o jogador faz um novo palpite.
while tentativas_feitas < max_tentativas:
# Calcula o número da tentativa atual para exibir ao jogador.
tentativa_num = tentativas_feitas + 1
# Pede ao jogador para inserir um palpite.
palpite = input(f"Tentativa {tentativa_num}: ")
# Compara o palpite do jogador com a palavra secreta.
if palpite == palavra_secreta:
# Se o palpite estiver correto, a variável de controle muda para True.
jogador_ganhou = True
# O comando `break` interrompe o loop, pois o jogo já foi ganho.
break
# Se o palpite estiver incorreto, o contador de tentativas avança.
tentativas_feitas += 1
# Após o loop, o programa verifica o valor da variável `jogador_ganhou`.
# Esta abordagem centraliza a lógica de fim de jogo em um único lugar.
if jogador_ganhou:
# Se for True, significa que o jogador acertou a palavra.
print("Parabéns, você acertou!")
else:
# Se for False, significa que as tentativas acabaram e o jogador perdeu.
print("Você perdeu! Suas tentativas acabaram.")
print(f"A palavra secreta era '{palavra_secreta}'.")
print("Fim de jogo.")
Menu Interativo (caixa_eletronico.py): Um loop while True mantém um menu de caixa eletrônico ativo, processando as opções do usuário até que ele escolha sair ou tentar muitas tentativas inválidas.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
#
# Simulador de Caixa Eletrônico
#
# Este programa simula as operações de um caixa eletrônico.
# O usuário pode sacar dinheiro, e o programa verifica se o valor é válido
# e se há saldo suficiente.
#
# Conceitos:
# - Laço `while` para manter o menu ativo.
# - `if-elif-else` para processar a escolha do usuário.
# - Variáveis para controlar o saldo e o valor do saque.
#
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
saldo = 1000.00
tentativas_invalidas = 0
print("Bem-vindo ao Caixa Eletrônico")
print(f"Seu saldo atual é: R$ {saldo}")
while True:
print("Opções: sacar, saldo, sair")
escolha = input("Escolha uma opção: ")
if escolha == "sacar":
valor_saque = float(input("Digite o valor do saque: "))
if valor_saque <= 0:
print("Valor inválido. Digite um valor positivo.")
elif valor_saque > saldo:
print("Saldo insuficiente.")
else:
saldo -= valor_saque
print(f"Saque de R$ {valor_saque} realizado com sucesso.")
print(f"Saldo restante: R$ {saldo}")
elif escolha == "saldo":
print(f"Seu saldo atual é: R$ {saldo}")
elif escolha == "sair":
print("Obrigado por usar nosso caixa eletrônico. Volte sempre!")
break
else:
print("Opção inválida. Tente novamente.")
tentativas_invalidas += 1
if tentativas_invalidas >= 3:
print("Muitas tentativas inválidas. Encerrando.")
break
print("Fim da operação.")
3.6 Exemplos de continue
Ignorando Entradas (processar_dados.py): Neste exemplo, o continue é usado para ignorar números negativos em um somador.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
#
# Crie um programa para somar uma série de números, ignorando os negativos.
#
# O programa deve solicitar ao usuário as seguintes informações repetidamente:
# 1. Um número (para somar) ou a palavra "sair" (para finalizar).
#
# O programa deve funcionar da seguinte maneira:
# 1. Inicialize uma variável para manter a soma acumulada (começando em 0).
# 2. Crie um laço infinito para solicitar dados continuamente.
# 3. Se o usuário digitar "sair", encerre o laço imediatamente.
# 4. Caso contrário, converta a entrada para um número inteiro.
# 5. Verifique se o número é negativo:
# - Se for, exiba uma mensagem informando que ele foi ignorado e pule para a próxima iteração do laço (sem somar).
# 6. Se o número for positivo ou zero, adicione-o à soma acumulada e exiba a soma parcial.
# 7. Quando o laço terminar, exiba a soma final acumulada.
#
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Inicializa a variável 'soma' com 0 para acumular os valores
soma = 0
print("Digite números para somar. Digite 'sair' para terminar.")
# Inicia um laço infinito que continuará até que o comando 'break' seja executado
while True:
entrada = input("Digite um número ou 'sair': ")
# Verifica se o usuário deseja encerrar o programa
# `break` interrompe o laço imediatamente e vai para o código após o laço
if entrada == "sair":
break
# Converte a entrada de texto para um número inteiro
numero = int(entrada)
# Verifica se o número é negativo
if numero < 0:
print("Número negativo ignorado.")
# `continue` interrompe a iteração ATUAL e volta para o início do laço (linha do `while`)
# O código abaixo do `continue` (a soma) não será executado nesta vez
continue
# Se o programa chegou até aqui, o número não é negativo (e não era "sair")
# Adiciona o número à variável acumuladora 'soma'
soma = soma + numero
print(f"Soma parcial: {soma}")
# Exibe o resultado final após o encerramento do laço
print()
print(f"A soma final é: {soma}")
print("Fim do programa.")
Empréstimo (emprestimo.py): Usa o continue para interromper o processamento de um cliente assim que uma regra de validação falha (como salário inválido ou empréstimo muito alto), passando imediatamente para o próximo.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Crie um programa interativo para simular um Sistema de Análise de Crédito Bancário.
#
# O programa deve solicitar ao usuário as seguintes informações:
# 1. O salário mensal (do tipo float).
# 2. O valor do empréstimo solicitado (do tipo float).
# 3. O número de parcelas desejado (do tipo inteiro).
#
# O programa deve funcionar da seguinte maneira:
# 1. O programa deve processar exatamente 3 clientes usando um laço de repetição.
# 2. Para cada cliente, verifique se o salário é válido. Se o salário for menor ou igual a zero, o programa deve exibir uma mensagem de erro e pular para o próximo cliente.
# 3. Se o salário for válido, verifique se o valor do empréstimo é arriscado. O empréstimo não pode ser maior que 6 vezes o valor do salário. Se for maior, recuse o empréstimo.
# 4. Calcule o valor da prestação dividindo o valor do empréstimo pelo número de parcelas.
# 5. Verifique se a prestação cabe no orçamento. A prestação não pode exceder 30% do salário. Se exceder, recuse o empréstimo.
# 6. Se todas as verificações passarem, aprove o empréstimo e some o valor ao total acumulado do dia.
# 7. Ao final do processamento dos 3 clientes, exiba o total emprestado.
#
# Se um salário inválido, empréstimo recusado por risco ou recusado por margem ocorrer, o programa deve pular imediatamente para o próximo cliente sem contabilizar o empréstimo.
#
# Exemplo de execução:
#
# --- Banco Python: Sistema de Análise de Crédito ---
# Cliente 1
# Digite o salário mensal (R$): 1000
# Valor do empréstimo solicitado (R$): 10000
# RECUSADO: Valor total muito alto para a renda declarada.
# Cliente 2
# Digite o salário mensal (R$): 2000
# Valor do empréstimo solicitado (R$): 10000
# Número de parcelas desejado: 3
# RECUSADO: Prestação excede 30% do salário (Limite: R$ 600.00).
# Cliente 3
# Digite o salário mensal (R$): 3000
# Valor do empréstimo solicitado (R$): 3000
# Número de parcelas desejado: 12
# APROVADO: Empréstimo concedido com sucesso!
# Prestação calculada: R$ 250.0 por mês
# Total concedido em empréstimos hoje: R$ 3000.0
#
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
print("--- Banco Python: Sistema de Análise de Crédito ---")
# Conta quantos clientes foram atendidos
contador = 0
# Acumula o valor total dos empréstimos aprovados
total_emprestado = 0
# Loop principal para atender 3 clientes
while contador < 3:
contador = contador + 1
print(f"Cliente {contador}")
# Solicita o salário do cliente
salario = float(input("Digite o salário mensal (R$): "))
# Regra 1: Valida se o salário é positivo
if salario <= 0:
print("Salário inválido. Cadastro ignorado.")
continue # Pula para a próxima iteração do laço
# Solicita o valor do empréstimo
emprestimo = float(input("Valor do empréstimo solicitado (R$): "))
# Regra 2: O empréstimo não pode ser maior que 6 vezes o salário
if emprestimo > (6 * salario):
print("RECUSADO: Valor total muito alto para a renda declarada.")
# Encerra a análise deste cliente e vai para o próximo
continue
# Solicita o número de parcelas
num_parcelas = int(input("Número de parcelas desejado: "))
# Calcula o valor de cada prestação
prestacao = emprestimo / num_parcelas
# Regra 3: A prestação não pode comprometer mais que 30% da renda
limite_prestacao = salario * 0.30
if prestacao > limite_prestacao:
print(f"RECUSADO: Prestação excede 30% do salário (Limite: R$ {limite_prestacao}).")
# Encerra a análise deste cliente e vai para o próximo
continue
# Se chegou até aqui, o empréstimo foi aprovado
print("APROVADO: Empréstimo concedido com sucesso!")
print(f"Prestação calculada: R$ {prestacao} por mês")
# Atualiza o montante total emprestado pelo banco
total_emprestado = total_emprestado + emprestimo
# Exibe o resultado final após o laço terminar
print(f"Total concedido em empréstimos hoje: R$ {total_emprestado}")Versão Sem continue (emprestimo_sem_continue.py): Compare com o exemplo acima. Sem o continue, precisamos colocar o código de sucesso dentro de blocos else aninhados, o que aumenta a indentação e torna o código mais difícil de ler (o chamado “código seta”).
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Crie um programa interativo para simular um Sistema de Análise de Crédito Bancário.
#
# O programa deve solicitar ao usuário as seguintes informações:
# 1. O salário mensal (do tipo float).
# 2. O valor do empréstimo solicitado (do tipo float).
# 3. O número de parcelas desejado (do tipo inteiro).
#
# O programa deve funcionar da seguinte maneira:
# 1. O programa deve processar exatamente 3 clientes usando um laço de repetição.
# 2. Para cada cliente, verifique se o salário é válido. Se o salário for menor ou igual a zero, o programa deve exibir uma mensagem de erro e pular para o próximo cliente.
# 3. Se o salário for válido, verifique se o valor do empréstimo é arriscado. O empréstimo não pode ser maior que 6 vezes o valor do salário. Se for maior, recuse o empréstimo.
# 4. Calcule o valor da prestação dividindo o valor do empréstimo pelo número de parcelas.
# 5. Verifique se a prestação cabe no orçamento. A prestação não pode exceder 30% do salário. Se exceder, recuse o empréstimo.
# 6. Se todas as verificações passarem, aprove o empréstimo e some o valor ao total acumulado do dia.
# 7. Ao final do processamento dos 3 clientes, exiba o total emprestado.
#
# Se um salário inválido, empréstimo recusado por risco ou recusado por margem ocorrer, o programa deve pular imediatamente para o próximo cliente sem contabilizar o empréstimo.
#
# Exemplo de execução:
#
# --- Banco Python: Sistema de Análise de Crédito ---
# Cliente 1
# Digite o salário mensal (R$): 1000
# Valor do empréstimo solicitado (R$): 10000
# RECUSADO: Valor total muito alto para a renda declarada.
# Cliente 2
# Digite o salário mensal (R$): 2000
# Valor do empréstimo solicitado (R$): 10000
# Número de parcelas desejado: 3
# RECUSADO: Prestação excede 30% do salário (Limite: R$ 600.00).
# Cliente 3
# Digite o salário mensal (R$): 3000
# Valor do empréstimo solicitado (R$): 3000
# Número de parcelas desejado: 12
# APROVADO: Empréstimo concedido com sucesso!
# Prestação calculada: R$ 250.0 por mês
# Total concedido em empréstimos hoje: R$ 3000.0
#
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
print("--- Banco Python: Sistema de Análise de Crédito ---")
# Conta quantos clientes foram atendidos
contador = 0
# Acumula o valor total dos empréstimos aprovados
total_emprestado = 0
# Loop principal para atender 3 clientes
while contador < 3:
contador = contador + 1
print(f"Cliente {contador}")
# Solicita o salário do cliente
salario = float(input("Digite o salário mensal (R$): "))
# Regra 1: Valida se o salário é positivo
if salario <= 0:
print("Salário inválido. Cadastro ignorado.")
else:
# Solicita o valor do empréstimo
emprestimo = float(input("Valor do empréstimo solicitado (R$): "))
# Regra 2: O empréstimo não pode ser maior que 6 vezes o salário
if emprestimo > (6 * salario):
print("RECUSADO: Valor total muito alto para a renda declarada.")
else:
# Solicita o número de parcelas
num_parcelas = int(input("Número de parcelas desejado: "))
# Calcula o valor de cada prestação
prestacao = emprestimo / num_parcelas
# Regra 3: A prestação não pode comprometer mais que 30% da renda
limite_prestacao = salario * 0.30
if prestacao > limite_prestacao:
print(
f"RECUSADO: Prestação excede 30% do salário (Limite: R$ {limite_prestacao})."
)
else:
# Se chegou até aqui, o empréstimo foi aprovado
print("APROVADO: Empréstimo concedido com sucesso!")
print(f"Prestação calculada: R$ {prestacao} por mês")
# Atualiza o montante total emprestado pelo banco
total_emprestado = total_emprestado + emprestimo
# Exibe o resultado final após o laço terminar
print(f"Total concedido em empréstimos hoje: R$ {total_emprestado}")3.7 Listas e o Laço for
Antes de falarmos sobre repetição, precisamos conhecer as Listas. Uma lista é uma estrutura de dados que permite armazenar múltiplos itens em uma única variável. Em Python, criamos listas usando colchetes [].
O laço for é a ferramenta perfeita para iterar (percorrer) cada item de uma lista.
Inventário de Itens (lista_itens.py): Itera sobre uma lista de itens pré-definida.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Crie um programa para exibir os itens de um inventário de RPG.
#
# O programa deve executar os seguintes passos:
# 1. Crie uma lista chamada `itens` contendo: "Espada", "Escudo",
# "Poção" e "Mapa".
# 2. Exiba uma mensagem inicial "Itens no inventário:".
# 3. Use um laço de repetição `for` para percorrer cada item da lista.
# 4. Para cada item, imprima o nome do item com um traço ("- ") antes.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Uma lista [] permite guardar vários valores em uma única variável
itens = ["Espada", "Escudo", "Poção", "Mapa"]
print("Itens no inventário:")
# O laço for percorre cada item da lista, um por um.
# A variável 'item' assume o valor de cada elemento a cada volta do laço.
for item in itens:
print(f"- {item}")3.8 Adicionando Elementos a uma Lista
Podemos começar com uma lista vazia e adicionar elementos a ela usando o comando .append(). O laço for funciona da mesma maneira, percorrendo a lista não importa como ela foi construída.
Lista de Compras (lista_compras.py): Cria uma lista vazia, adiciona itens e depois imprime todos eles.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Desenvolva um programa para montar uma lista de materiais de bancada.
#
# O programa deve funcionar da seguinte maneira:
# 1. Comece com uma lista vazia chamada materiais.
# 2. Exiba uma mensagem informando que os itens serao adicionados.
# 3. Use append para adicionar tres materiais a lista.
# 4. Exiba uma mensagem de lista final.
# 5. Percorra a lista com for e imprima cada material em uma linha.
#
# Casos especiais:
# 1. O foco do exemplo e mostrar a construcao da lista com append.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Lista e uma colecao em ordem usada quando queremos armazenar varios itens
# e manter a sequencia em que eles foram adicionados.
# O metodo append coloca um novo valor no final da lista, sem substituir os anteriores.
# A lista inicia vazia e vai crescendo com append.
materiais = []
print("Adicionando materiais para a bancada de teste...")
# Cada append coloca um novo item no final da lista.
materiais.append("multimetro")
materiais.append("sensor de temperatura")
materiais.append("cabos de medicao")
print("Lista final de materiais:")
# O for percorre a lista um elemento por vez.
# Em listas, essa iteracao respeita a ordem de insercao, o que ajuda quando
# queremos processar os itens na mesma sequencia em que foram registrados.
for material in materiais:
print(f"Material necessario: {material}")3.9 Iterando com range()
Além de listas, o for é muito usado com a função range(), que gera uma sequência matemática de números. É útil quando queremos repetir uma ação um número específico de vezes, sem precisar criar uma lista manualmente.
range(5): Gera números de 0 a 4.range(1, 6): Gera números de 1 a 5.range(0, 11, 2): Gera números de 0 a 10, pulando de 2 em 2.
Exemplos:
Repetição Simples (repetidor.py): Executa uma ação um número fixo de vezes.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Crie um programa que demonstra uma repetição simples usando range().
#
# O programa deve funcionar da seguinte maneira:
# 1. Use um laço de repetição `for` com a função `range()`.
# 2. O laço deve se repetir 5 vezes.
# 3. Em cada repetição, exiba a mensagem: "Iteração número X",
# onde X é o número da iteração atual (começando de 0).
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# A função range(5) gera os números 0, 1, 2, 3, 4 (o 5 é exclusivo)
# A variável "i" assume um desses valores a cada volta
for i in range(5):
print(f"Iteração número {i}")
Acumulando Valores (acumulador.py): Usa um loop para somar uma sequência de números.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Crie um programa para somar uma sequência de números.
#
# O programa deve funcionar da seguinte maneira:
# 1. Inicie uma variável `total` com o valor 0.
# 2. Use um laço `for` com `range()` para gerar números de 1 a 5.
# 3. Em cada iteração:
# a. Adicione o número atual ao `total`.
# b. Exiba a mensagem mostrando o número adicionado e o total parcial.
# 4. Ao final do laço, exiba o valor da "Soma Final".
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Inicializa o total com zero
total = 0
# O loop vai de 1 até 5 (o 6 é exclusivo)
for numero in range(1, 6):
# Pega o valor atual de total e soma com o numero atual
total = total + numero
print(f"Adicionei {numero}, Total agora é {total}")
# Exibe o resultado final após o término do loop
print(f"Soma Final: {total}")
Contagem com Passos (pulador.py): Mostra como usar o terceiro argumento do range() para pular números.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Crie um programa que conte pulando números.
#
# O programa deve funcionar da seguinte maneira:
# 1. Exiba a mensagem "Apenas números pares:".
# 2. Use um laço `for` junto com a função `range()`.
# 3. Configure o `range()` para:
# a. Começar em 0.
# b. Ir até 10.
# c. Pular de 2 em 2 (passo).
# 4. Imprima cada número gerado.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
print("Apenas números pares:")
# range(início, fim, passo)
# Começa no 0, vai até (mas não inclui) 11, pulando de 2 em 2
# Ao usar range(0, 11, 2), obtemos: 0, 2, 4, 6, 8, 10
for i in range(0, 11, 2):
print(i)
Contagem Regressiva (contagem_regressiva.py): Mostra como usar um passo negativo no range() para contar de trás para frente.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Crie um programa de contagem regressiva para um lançamento de foguete.
#
# O programa deve funcionar da seguinte maneira:
# 1. Exiba a mensagem "Preparando para o lançamento...".
# 2. Use um laço `for` junto com a função `range()`.
# 3. Configure o `range()` para:
# a. Começar em 10.
# b. Terminar antes de 0 (ou seja, ir até 1).
# c. Diminuir de 1 em 1 (passo negativo).
# 4. Em cada iteração, exiba o número atual.
# 5. Após o loop, exiba "Fogo!".
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
print("Preparando para o lançamento...")
for i in range(10, 0, -1):
print(i)
print("Fogo!")Média de N Números (media_numeros.py): Combina o range() com entrada do usuário para decidir quantas vezes o loop irá rodar.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Crie um programa que calcula a média de N números inteiros.
#
# O programa deve funcionar da seguinte maneira:
# 1. Pergunte ao usuário quantos números ele deseja inserir.
# 2. Utilize um laço `for` com `range()` para coletar os números.
# 3. Para cada iteração, peça o número inteiro.
# 4. Calcule e exiba a média aritmética dos valores inseridos.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
quantidade = int(input("Quantos números você vai inserir? "))
soma = 0
for i in range(quantidade):
numero = int(input(f"Digite o {i+1} número: "))
soma += numero
if quantidade > 0:
media = soma / quantidade
print(f"A média dos {quantidade} números é: {media}")
else:
print("Quantidade inválida.")3.10 Iterando sobre Strings
O laço for também pode tratar um texto (String) como se fosse uma “lista de caracteres”. Ele percorre o texto letra por letra.
Contador de Vogais (conta_vogais.py): Itera sobre uma frase para contar as vogais.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Crie um programa para contar as vogais em uma frase.
#
# O programa deve solicitar ao usuário as seguintes informações:
# 1. Uma frase para ser analisada.
#
# O programa deve funcionar da seguinte maneira:
# 1. Defina uma string com as vogais ("aeiou").
# 2. Inicialize um contador com 0.
# 3. Use um laço `for` para percorrer cada letra da frase (convertida para minúscula).
# 4. Se a letra NÃO for uma vogal:
# a. Use `continue` para pular para a próxima iteração.
# 5. Se a letra FOR uma vogal:
# a. Exiba a vogal encontrada.
# b. Aumente o contador em 1.
# 6. Ao final, exiba o total de vogais encontradas.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
frase = input("Digite uma frase para contar as vogais: ")
contador_vogais = 0
print("Analisando a frase...")
# O laço `for` itera sobre cada caractere da frase.
for letra in frase:
# Esta é uma condição de "guarda". Se a letra não for uma vogal,
# não há mais nada a fazer nesta iteração.
if letra != "a" and letra != "e" and letra != "i" and letra != "o" and letra != "u":
# `continue` pula para a próxima `letra` no laço `for`,
# ignorando as linhas de código abaixo dentro do laço.
continue
# Este código só é executado se a condição do `if` for falsa,
# ou seja, apenas quando a `letra` é uma vogal.
print(f"Vogal encontrada: {letra}")
contador_vogais = contador_vogais + 1
print()
print(f"A frase contém {contador_vogais} vogais.")
print("Fim do programa.")
Limpador de Texto (limpador_de_texto.py): Itera sobre um texto para remover caracteres de pontuação. Observe o uso do operador in neste exemplo (if caractere in pontuacao:). Ele é usado para verificar se um valor existe dentro de uma sequência (como uma string ou uma lista). Se o caractere for encontrado na string de pontuações, o resultado é verdadeiro.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Desenvolva um programa para limpar um texto de observacao tecnica.
#
# O programa deve funcionar da seguinte maneira:
# 1. Defina um texto original com pontuacoes.
# 2. Defina uma string com os caracteres de pontuacao que serao removidos.
# 3. Crie uma string vazia para acumular o texto limpo.
# 4. Percorra o texto original caractere por caractere com um for.
# 5. Se o caractere estiver na string de pontuacao, exiba uma mensagem e use
# continue para pular para o proximo caractere.
# 6. Caso contrario, adicione o caractere ao texto limpo.
# 7. Exiba o texto original e o texto final sem pontuacao.
#
# Casos especiais:
# 1. O foco e praticar teste de pertencimento com o operador in.
# -#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-
# Texto de observacao que sera limpo caractere por caractere.
texto_original = "Sensor-3, pressao alta! Reavaliar? Sim."
# A string pontuacao guarda os caracteres que devem ser descartados.
# Neste exemplo, ela funciona como uma pequena colecao de referencia.
# O conceito novo aqui e o teste de pertencimento: perguntar se um elemento
# faz parte ou nao de uma colecao.
# Esse mesmo raciocinio aparece depois com conjuntos e dicionarios.
pontuacao = ",.!?-"
# O resultado final sera montado aos poucos nesta variavel.
texto_limpo = ""
print(f"Texto original: {texto_original}")
print("Limpando o texto...")
for caractere in texto_original:
# O operador in faz um teste de pertencimento.
# Em outras palavras, ele responde a pergunta:
# "o caractere atual aparece na colecao de pontuacoes?"
# Se a resposta for verdadeira, o caractere nao entra no texto final.
if caractere in pontuacao:
print(f"Pontuacao '{caractere}' removida.")
continue
# Se nao for pontuacao, o caractere entra no texto limpo.
texto_limpo = texto_limpo + caractere
print(f"Texto limpo: {texto_limpo}")