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 Verdadeira

Cuidado: É 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}")