Controle de Fluxo em Python: Exercícios e Aplicações

Este material oferece um conjunto abrangente de exercícios para solidificar o entendimento sobre controle de fluxo em Python, abordando estruturas como condicionais (if, elif, else) e loops (while, for), além das instruções de controle (break, continue).

Parte 1: Testes de Múltipla Escolha (20 pontos)

Conceitos Fundamentais

  1. Qual das seguintes opções cria um loop infinito?

    • A. for i in range(10):
    • B. while True:
    • C. for i in [1, 2, 3]:
    • D. while x < 10: (assumindo que x é 0 inicialmente)

    Resposta: B - A condição True em um loop while nunca se tornará falsa, resultando em um loop infinito.

  2. Qual a saída do seguinte código? ```

    x = 5 if x > 3: print("A") elif x > 2: print("B") else: print("C")

    
     **Resposta: A** - A primeira condição `x > 3` é verdadeira, então "A" é impresso e o restante do bloco `if-elif-else` é ignorado.
    
  3. Qual é a função da instrução break?

    • A. Pula as instruções restantes do loop atual e passa para a próxima iteração.
    • B. Sai completamente do loop.
    • C. Sai do programa.
    • D. Pausa a execução do programa.

    Resposta: B - break encerra a execução do loop imediatamente.

  4. Qual dos seguintes loops executará 3 vezes?

    • A. for i in range(3):
    • B. for i in range(1, 3):
    • C. for i in range(0, 3, 2):
    • D. for i in range(3, 0):

    Resposta: A - range(3) gera a sequência 0, 1, 2, que resulta em 3 iterações.

  5. Em Python, elif é uma abreviação para:

    • A. else if
    • B. else for
    • C. else in
    • D. else loop

    Resposta: A - elif é usado para encadear múltiplas condições.

Análise de Código

  1. Qual a saída do seguinte código? ```

    total = 0 for i in range(1, 6): if i % 2 == 0: continue total += i print(total)

    
     **Resposta: B** - O loop itera com i = 1, 2, 3, 4, 5. `continue` pula os números pares (2 e 4). O total acumula 1 + 3 + 5 = 9.
    
  2. Qual o valor de count após a execução do código abaixo? ```

    count = 0 while count < 5: count += 1 if count == 3: break

    
     **Resposta: B** - `count` se torna 1, depois 2, e então 3. No momento em que `count` é 3, o `break` é acionado, encerrando o loop.
    
  3. Qual expressão condicional retornará True?

    • A. 5 < 3 and 2 > 1
    • B. not (4 == 4)
    • C. 3 >= 3 or 5 < 2
    • D. 2 != 2

    Resposta: C - 3 >= 3 é True. Em uma operação or, se uma das condições for True, o resultado é True.

Aplicação Prática

  1. Para imprimir os números de 1 a 10, mas pular o número 5, qual estrutura de loop deve ser usada? ```

    for i in range(1, 11): if i == 5: __________ print(i)

    
     **Resposta: B** - `continue` pula a iteração atual quando `i` é 5, sem sair do loop.
    
  2. Qual a funcionalidade do código abaixo? ```

    number = 7 is_prime = True for i in range(2, number): if number % i == 0: is_prime = False break

    
     **Resposta: B** - O código verifica se o número 7 é divisível por qualquer número de 2 até 6. Se for, não é primo.
    
    

Parte 2: Testes de Verdadeiro ou Falso (10 pontos)

  1. A instrução if pode existir sem uma cláusula else, mas uma cláusula else deve sempre ter uma instrução if correspondente. (Verdadeiro)
  2. Um loop while executa o corpo do loop pelo menos uma vez, independentemente da condição ser verdadeira ou falsa. (Falso) - O corpo só executa se a condição for verdadeira inicialmente.
  3. Após usar break em um loop for, a cláusula else associada a esse loop não será executada. (Verdadeiro)
  4. range(5) gera uma sequência de inteiros de 0 a 4, totalizando 5 números. (Verdadeiro)
  5. Na expressão ternária x = a if condition else b, se a condição for verdadeira, o valor de x será b. (Falso) - Se a condição for verdadeira, x receberá o valor de a.

Parte 3: Preenchimento de Lacunas (30 pontos)

Exercício 1: Jogo de Adivinhação de Números


import random

print("🎮 Jogo de Adivinhação")
secret = random.randint(1, 50)
attempts = 0
max_attempts = 7

print(f"Pensei em um número entre 1 e 50. Você tem {max_attempts} chances!")

while attempts < max_attempts:  # Preenchimento 1: Condição do loop
    try:
        guess = int(input(f"\nTentativa {attempts + 1}: "))
    except ValueError:
        print("Por favor, insira um número válido!")
        continue  # Preenchimento 2: Pula esta iteração
        
    attempts += 1
    
    if guess < secret:
        print("Muito baixo!")
    elif guess > secret:  # Preenchimento 3: Condição de comparação
        print("Muito alto!")
    else:
        print(f"🎉 Parabéns! Você adivinhou o número {secret} na tentativa {attempts}!")
        break  # Preenchimento 4: Sai do loop
    
    remaining = max_attempts - attempts
    if remaining > 0:
        print(f"💡 Dica: Você tem {remaining} chances restantes.")

# Verifica se o jogador perdeu
if attempts == max_attempts and guess != secret:  # Preenchimento 5: Condição de falha
    print(f"\n😔 Que pena, suas chances acabaram!")
    print(f"O número correto era: {secret}")

Exercício 2: Classificador de Notas


print("📊 Sistema de Classificação de Notas")
print("=" * 30)

while True:
    score_input = input("Digite a nota (0-100), ou 'q' para sair: ")
    
    if score_input.lower() == 'q':
        print("Obrigado por usar o sistema. Até logo!")
        break  # Preenchimento 6: Sai do loop
    
    try:
        score = float(score_input)
    except ValueError:
        print("⚠️ Por favor, insira um valor numérico válido!")
        continue  # Preenchimento 7: Continua para a próxima iteração
    
    # Validação do intervalo da nota
    if score < 0 or score > 100:  # Preenchimento 8: Operador lógico
        print("⚠️ A nota deve estar entre 0 e 100!")
        continue
    
    # Determinação da classificação
    if score >= 90:
        grade = "A"
        comment = "Excelente"
    elif score >= 80:  # Preenchimento 9: Múltiplas condições
        grade = "B"
        comment = "Muito Bom"
    elif score >= 70:
        grade = "C"
        comment = "Bom"
    elif score >= 60:
        grade = "D"
        comment = "Satisfatório"
    else:  # Preenchimento 10: Outros casos
        grade = "F"
        comment = "Insatisfatório"
    
    print(f"Nota: {score:.2f} → Classificação: {grade} ({comment})")
    print("-" * 30)

Parte 4: Prática de Programação (40 pontos)

Exercício 1: Imprimir Padrão

Objetivo: Usar loops aninhados para imprimir um triângulo retângulo de asteriscos.


num_linhas = int(input("Digite o número de linhas: "))

for i in range(1, num_linhas + 1):
    for j in range(i):
        print("*", end="")
    print()

Exercício 2: Calculadora Simples

Objetivo: Criar uma calculadora que suporta operações contínuas e tratamento de erros.


print("=== Calculadora Simples ===")

while True:
    expressao = input("Digite a expressão (ex: 3 + 4), ou 'q' para sair: ")
    if expressao.lower() == 'q':
        print("Obrigado por usar a calculadora!")
        break

    try:
        partes = expressao.split()
        if len(partes) != 3:
            print("Formato inválido. Use o formato: número operador número.")
            continue

        num1 = float(partes[0])
        operador = partes[1]
        num2 = float(partes[2])

        resultado = None
        if operador == '+':
            resultado = num1 + num2
        elif operador == '-':
            resultado = num1 - num2
        elif operador == '*':
            resultado = num1 * num2
        elif operador == '/':
            if num2 == 0:
                print("Erro: Divisão por zero não é permitida!")
                continue
            resultado = num1 / num2
        else:
            print("Operador inválido. Use +, -, *, ou /.")
            continue
            
        print(f"Resultado: {resultado}")

    except ValueError:
        print("Erro: Certifique-se de que os números são válidos.")
    except Exception as e:
        print(f"Ocorreu um erro inesperado: {e}")

Exercício 3: Números de Armstrong

Objetivo: Encontrar todos os números de Armstrong de 3 dígitos.


numeros_armstrong = []

for num in range(100, 1000):
    # Extrai os dígitos
    centena = num // 100
    dezena = (num // 10) % 10
    unidade = num % 10
    
    # Calcula a soma dos cubos dos dígitos
    soma_cubos = centena**3 + dezena**3 + unidade**3
    
    # Verifica se é um número de Armstrong
    if num == soma_cubos:
        numeros_armstrong.append(num)

print("Os números de Armstrong de 3 dígitos são:", numeros_armstrong)

Parte 5: Design Integrado (20 pontos)

Projeto: Sistema de Gerenciamento de Notas de Alunos

Funcionalidades:

  1. Menu principal com opções.
  2. Entrada de dados de alunos (nome e notas de várias disciplinas).
  3. Consulta de notas e média por nome.
  4. Estatísticas gerais (média da turma, maior/menor nota).
  5. Análise de distribuição de notas por faixas.
  6. Saída do sistema.

Estrutura de dados sugerida: Lista de dicionários.


# Exemplo de estrutura de dados
alunos = [
    {
        "nome": "Ana Silva",
        "notas": [85, 92, 78],
        "media": 85.0
    },
    {
        "nome": "Bruno Costa",
        "notas": [70, 65, 88],
        "media": 74.33
    }
]

# O sistema completo envolveria loops, condicionais e funções para implementar as opções do menu.
# Por exemplo, a opção de adicionar aluno usaria input() e append() em uma lista.
# A consulta usaria um loop para encontrar o nome e calcular/exibir a média.
# As estatísticas envolveriam loops e funções de agregação (sum, max, min).

Este conjunto de exercícios abrange desde conceitos básicos até a aplicação prática de controle de fluxo, preparando o terreno para tópicos mais avançados.

Tags: Python controle de fluxo if else elif

Publicado em 6-16 06:23 por Thomas