Skip to the content.

💪 Exercícios Práticos PyBR

23 exercícios progressivos para você dominar programação do básico ao avançado!

📚 Sobre os Exercícios

Os exercícios foram cuidadosamente desenvolvidos para ensinar programação de forma progressiva. Cada exercício introduz novos conceitos enquanto reforça os anteriores.

Tempo estimado: 10-20 minutos por exercício
Pré-requisitos: Python 3.6+ instalado
Localização: Pasta exercicios/

🎯 Trilhas de Aprendizado

🟢 Nível 1: Fundamentos (Exercícios 1-6)

Objetivo: Aprender conceitos básicos de programação
Tempo: 2-3 horas
Você vai aprender: Variáveis, tipos de dados, entrada/saída, operadores

🟡 Nível 2: Controle e Estruturas (Exercícios 7-14)

Objetivo: Dominar estruturas de controle e funções
Tempo: 4-5 horas
Você vai aprender: Condicionais, laços, listas, funções

🔴 Nível 3: Programação Avançada (Exercícios 15-23)

Objetivo: Criar projetos completos com OOP e programação funcional
Tempo: 6-7 horas
Você vai aprender: Classes, projetos reais, lambda, filtrar, mapear, boas práticas


🟢 Exercícios Básicos (1-6)

01. Olá Mundo 👋

Conceitos: imprimir(), strings
Dificuldade: ⭐☆☆☆☆
Tempo: 5 minutos

Seu primeiro programa! Aprenda a exibir mensagens na tela.

imprimir("Olá, Mundo!")
imprimir("Bem-vindo ao PyBR!")

O que você aprende:

Desafio extra:


02. Variáveis 📦

Conceitos: Variáveis, tipos de dados
Dificuldade: ⭐☆☆☆☆
Tempo: 10 minutos

Aprenda a armazenar informações em variáveis.

# Textos (strings)
nome = "Ana"
sobrenome = "Silva"

# Números inteiros
idade = 15
ano = 2024

# Números decimais
altura = 1.65
peso = 52.5

# Booleanos
estudante = Verdadeiro

imprimir(f"{nome} {sobrenome} tem {idade} anos")

O que você aprende:

Desafio extra:


03. Cálculos ➕➖✖️➗

Conceitos: Operadores aritméticos
Dificuldade: ⭐☆☆☆☆
Tempo: 10 minutos

Faça operações matemáticas com Python.

a = 10
b = 3

soma = a + b
subtracao = a - b
multiplicacao = a * b
divisao = a / b
resto = a % b
potencia = a ** b

imprimir(f"Soma: {soma}")
imprimir(f"Divisão: {divisao:.2f}")

O que você aprende:

Desafio extra:


04. Entrada e Saída 🔄

Conceitos: entrada(), conversão de tipos
Dificuldade: ⭐⭐☆☆☆
Tempo: 15 minutos

Interaja com o usuário recebendo dados.

nome = entrada("Qual é o seu nome? ")
idade = inteiro(entrada("Qual é a sua idade? "))

imprimir(f"Olá, {nome}!")
imprimir(f"Você tem {idade} anos")

se idade >= 18:
    imprimir("Você é maior de idade")
senao:
    imprimir("Você é menor de idade")

O que você aprende:

Desafio extra:


05. Calculadora de IMC 📊

Conceitos: Fórmulas, conversão, condicionais
Dificuldade: ⭐⭐☆☆☆
Tempo: 15 minutos

Crie uma calculadora de Índice de Massa Corporal.

peso = flutuante(entrada("Digite seu peso (kg): "))
altura = flutuante(entrada("Digite sua altura (m): "))

imc = peso / (altura ** 2)

imprimir(f"Seu IMC é: {imc:.2f}")

se imc < 18.5:
    imprimir("Abaixo do peso")
senaose imc < 25:
    imprimir("Peso normal")
senaose imc < 30:
    imprimir("Sobrepeso")
senao:
    imprimir("Obesidade")

O que você aprende:

Desafio extra:


06. Estruturas Condicionais 🔀

Conceitos: se, senao, senaose
Dificuldade: ⭐⭐☆☆☆
Tempo: 15 minutos

Tome decisões no código com condicionais.

nota = flutuante(entrada("Digite sua nota (0-10): "))

se nota >= 9:
    conceito = "A - Excelente!"
senaose nota >= 7:
    conceito = "B - Bom"
senaose nota >= 5:
    conceito = "C - Regular"
senao:
    conceito = "D - Insuficiente"

imprimir(f"Seu conceito é: {conceito}")

O que você aprende:

Desafio extra:


🟡 Exercícios Intermediários (7-14)

07. Sistema de Login 🔐

Conceitos: Dicionários, validação
Dificuldade: ⭐⭐☆☆☆
Tempo: 20 minutos

Crie um sistema simples de autenticação.

usuarios = {
    "admin": "123456",
    "maria": "senha123",
    "joao": "abc456"
}

usuario = entrada("Usuário: ")
senha = entrada("Senha: ")

se usuario em usuarios e usuarios[usuario] == senha:
    imprimir(f"✓ Bem-vindo, {usuario}!")
senao:
    imprimir("✗ Usuário ou senha incorretos!")

O que você aprende:

Desafio extra:


08. Laços com Para 🔁

Conceitos: para, intervalo()
Dificuldade: ⭐⭐☆☆☆
Tempo: 20 minutos

Repita ações com laços de repetição.

# Contagem de 1 a 10
para i em intervalo(1, 11):
    imprimir(f"Número: {i}")

# Números pares de 0 a 20
para num em intervalo(0, 21, 2):
    imprimir(num, fim=" ")

# Iterando sobre listas
frutas = ["maçã", "banana", "laranja"]
para fruta em frutas:
    imprimir(f"Eu gosto de {fruta}")

O que você aprende:

Desafio extra:


09. Tabuada ✖️

Conceitos: Laços aninhados, formatação
Dificuldade: ⭐⭐⭐☆☆
Tempo: 20 minutos

Gere tabuadas completas.

numero = inteiro(entrada("Digite um número: "))

imprimir(f"\n=== TABUADA DO {numero} ===")
para i em intervalo(1, 11):
    resultado = numero * i
    imprimir(f"{numero} x {i:2d} = {resultado:3d}")

# Tabuada completa (1 a 10)
para n em intervalo(1, 11):
    imprimir(f"\n=== Tabuada do {n} ===")
    para i em intervalo(1, 11):
        imprimir(f"{n} x {i} = {n*i}")

O que você aprende:

Desafio extra:


10. Laço Enquanto 🔄

Conceitos: enquanto, quebre, continue
Dificuldade: ⭐⭐⭐☆☆
Tempo: 25 minutos

Use laços com condição.

# Contagem regressiva
contador = 10
enquanto contador >= 0:
    imprimir(f"{contador}...")
    contador -= 1
imprimir("🚀 Lançamento!")

# Menu com loop
enquanto Verdadeiro:
    imprimir("\n1. Opção 1")
    imprimir("2. Opção 2")
    imprimir("3. Sair")
    
    escolha = entrada("Escolha: ")
    
    se escolha == "3":
        quebre
    senaose escolha == "1":
        imprimir("Você escolheu 1")
    senao:
        imprimir("Opção inválida!")

O que você aprende:

Desafio extra:


11. Jogo de Adivinhação 🎮

Conceitos: Números aleatórios, loops, lógica
Dificuldade: ⭐⭐⭐☆☆
Tempo: 30 minutos

Crie um jogo interativo!

importar random

numero_secreto = random.randint(1, 100)
tentativas = 0

imprimir("=== JOGO DE ADIVINHAÇÃO ===")
imprimir("Adivinhe o número entre 1 e 100")

enquanto Verdadeiro:
    palpite = inteiro(entrada("\nSeu palpite: "))
    tentativas += 1
    
    se palpite == numero_secreto:
        imprimir(f"🎉 Parabéns! Acertou em {tentativas} tentativas!")
        quebre
    senaose palpite < numero_secreto:
        imprimir("📈 Tente um número maior!")
    senao:
        imprimir("📉 Tente um número menor!")

O que você aprende:

Desafio extra:


12. Trabalhando com Listas 📝

Conceitos: Listas, métodos, manipulação
Dificuldade: ⭐⭐⭐☆☆
Tempo: 25 minutos

Aprenda a trabalhar com coleções de dados.

# Criando listas
numeros = [1, 2, 3, 4, 5]
frutas = ["maçã", "banana", "laranja"]
mista = [1, "texto", 3.14, Verdadeiro]

# Adicionando elementos
frutas.append("uva")
frutas.insert(0, "morango")

# Removendo elementos
frutas.remove("banana")
ultima = frutas.pop()

# Acessando elementos
imprimir(frutas[0])  # Primeiro
imprimir(frutas[-1])  # Último

# Fatiamento
imprimir(frutas[1:3])

# Percorrendo
para i, fruta em enumerar(frutas):
    imprimir(f"{i+1}. {fruta}")

O que você aprende:

Desafio extra:


13. Funções Simples 🔧

Conceitos: definir, parâmetros
Dificuldade: ⭐⭐⭐☆☆
Tempo: 25 minutos

Organize código em funções reutilizáveis.

definir saudar(nome):
    imprimir(f"Olá, {nome}!")

definir somar(a, b):
    resultado = a + b
    imprimir(f"{a} + {b} = {resultado}")

definir exibir_menu():
    imprimir("=== MENU ===")
    imprimir("1. Opção 1")
    imprimir("2. Opção 2")
    imprimir("3. Sair")

# Usando as funções
saudar("Maria")
somar(5, 3)
exibir_menu()

O que você aprende:

Desafio extra:


14. Funções com Retorno ↩️

Conceitos: retornar, funções que retornam valores
Dificuldade: ⭐⭐⭐☆☆
Tempo: 30 minutos

Crie funções que retornam resultados.

definir somar(a, b):
    retornar a + b

definir calcular_media(notas):
    soma = sum(notas)
    retornar soma / tamanho(notas)

definir eh_par(numero):
    retornar numero % 2 == 0

# Usando funções
resultado = somar(10, 5)
imprimir(f"Soma: {resultado}")

notas = [8.5, 9.0, 7.5]
media = calcular_media(notas)
imprimir(f"Média: {media:.2f}")

se eh_par(10):
    imprimir("10 é par")

O que você aprende:

Desafio extra:


🔴 Exercícios Avançados (15-22)

15. Calculadora com Funções 🧮

Conceitos: Múltiplas funções, menu, organização
Dificuldade: ⭐⭐⭐⭐☆
Tempo: 40 minutos

Crie uma calculadora completa e organizada.

definir somar(a, b):
    retornar a + b

definir subtrair(a, b):
    retornar a - b

definir multiplicar(a, b):
    retornar a * b

definir dividir(a, b):
    se b == 0:
        retornar "Erro: divisão por zero"
    retornar a / b

enquanto Verdadeiro:
    imprimir("\n=== CALCULADORA ===")
    imprimir("1. Somar")
    imprimir("2. Subtrair")
    imprimir("3. Multiplicar")
    imprimir("4. Dividir")
    imprimir("5. Sair")
    
    opcao = entrada("Escolha: ")
    
    se opcao == "5":
        quebre
    
    # Resto do código...

O que você aprende:

Desafio extra:


16. Classe Cachorro 🐕

Conceitos: Classes, __init__, métodos
Dificuldade: ⭐⭐⭐⭐☆
Tempo: 35 minutos

Introdução à Programação Orientada a Objetos!

classe Cachorro:
    definir __init__(self, nome, idade, raca):
        self.nome = nome
        self.idade = idade
        self.raca = raca
    
    definir latir(self):
        imprimir(f"{self.nome} diz: Au au!")
    
    definir aniversario(self):
        self.idade += 1
        imprimir(f"{self.nome} fez {self.idade} anos!")
    
    definir apresentar(self):
        imprimir(f"Nome: {self.nome}")
        imprimir(f"Idade: {self.idade} anos")
        imprimir(f"Raça: {self.raca}")

# Criando objetos
rex = Cachorro("Rex", 3, "Labrador")
bobby = Cachorro("Bobby", 5, "Poodle")

rex.apresentar()
rex.latir()
rex.aniversario()

O que você aprende:

Desafio extra:


17. Classe Conta Bancária 💰

Conceitos: Métodos, encapsulamento
Dificuldade: ⭐⭐⭐⭐☆
Tempo: 40 minutos

Simule operações bancárias.

classe ContaBancaria:
    definir __init__(self, titular, saldo=0):
        self.titular = titular
        self.saldo = saldo
    
    definir depositar(self, valor):
        se valor > 0:
            self.saldo += valor
            imprimir(f"✓ Depósito de R$ {valor:.2f}")
        senao:
            imprimir("✗ Valor inválido")
    
    definir sacar(self, valor):
        se valor > self.saldo:
            imprimir("✗ Saldo insuficiente")
        senaose valor > 0:
            self.saldo -= valor
            imprimir(f"✓ Saque de R$ {valor:.2f}")
        senao:
            imprimir("✗ Valor inválido")
    
    definir extrato(self):
        imprimir(f"Titular: {self.titular}")
        imprimir(f"Saldo: R$ {self.saldo:.2f}")

conta = ContaBancaria("João", 1000)
conta.extrato()
conta.depositar(500)
conta.sacar(200)
conta.extrato()

O que você aprende:

Desafio extra:


18. Classe Retângulo 📐

Conceitos: Propriedades calculadas, geometria
Dificuldade: ⭐⭐⭐⭐☆
Tempo: 35 minutos

Calcule área e perímetro geometricamente.

classe Retangulo:
    definir __init__(self, largura, altura):
        self.largura = largura
        self.altura = altura
    
    definir calcular_area(self):
        retornar self.largura * self.altura
    
    definir calcular_perimetro(self):
        retornar 2 * (self.largura + self.altura)
    
    definir eh_quadrado(self):
        retornar self.largura == self.altura
    
    definir exibir_info(self):
        imprimir(f"Largura: {self.largura}")
        imprimir(f"Altura: {self.altura}")
        imprimir(f"Área: {self.calcular_area()}")
        imprimir(f"Perímetro: {self.calcular_perimetro()}")
        
        se self.eh_quadrado():
            imprimir("É um quadrado!")

ret = Retangulo(10, 5)
ret.exibir_info()

O que você aprende:

Desafio extra:


19. Classe Aluno com Notas 🎓

Conceitos: Listas em classes, cálculos
Dificuldade: ⭐⭐⭐⭐☆
Tempo: 40 minutos

Gerencie notas e aprovação de alunos.

classe Aluno:
    definir __init__(self, nome, matricula):
        self.nome = nome
        self.matricula = matricula
        self.notas = []
    
    definir adicionar_nota(self, nota):
        se 0 <= nota <= 10:
            self.notas.append(nota)
            imprimir(f"✓ Nota {nota} adicionada")
        senao:
            imprimir("✗ Nota inválida (0-10)")
    
    definir calcular_media(self):
        se tamanho(self.notas) == 0:
            retornar 0
        retornar sum(self.notas) / tamanho(self.notas)
    
    definir situacao(self):
        media = self.calcular_media()
        
        se media >= 7:
            retornar "Aprovado"
        senaose media >= 5:
            retornar "Recuperação"
        senao:
            retornar "Reprovado"
    
    definir boletim(self):
        imprimir(f"\n=== BOLETIM ===")
        imprimir(f"Aluno: {self.nome}")
        imprimir(f"Matrícula: {self.matricula}")
        imprimir(f"Notas: {self.notas}")
        imprimir(f"Média: {self.calcular_media():.2f}")
        imprimir(f"Situação: {self.situacao()}")

aluno = Aluno("Maria Silva", "2024001")
aluno.adicionar_nota(8.5)
aluno.adicionar_nota(9.0)
aluno.adicionar_nota(7.5)
aluno.boletim()

O que você aprende:

Desafio extra:


20. Projeto: Lista de Tarefas ✅

Conceitos: Projeto completo, CRUD
Dificuldade: ⭐⭐⭐⭐⭐
Tempo: 60 minutos

Sistema completo de gerenciamento de tarefas!

Funcionalidades:

O que você aprende:

Desafio extra:


21. Projeto: Quiz Interativo 🎯

Conceitos: Dicionários, lógica de jogo
Dificuldade: ⭐⭐⭐⭐⭐
Tempo: 60 minutos

Crie um jogo de perguntas e respostas!

Funcionalidades:

O que você aprende:

Desafio extra:


22. Projeto: Conversor de Temperatura 🌡️

Conceitos: Menu completo, funções, validação
Dificuldade: ⭐⭐⭐⭐⭐
Tempo: 50 minutos

Conversor completo de temperaturas!

Conversões:

Funcionalidades:

O que você aprende:

Desafio extra:

23. Funções Avançadas: Lambda, Filtrar e Mapear 🚀

Conceitos: Lambda, filtrar, mapear, qualquer, todos
Dificuldade: ⭐⭐⭐⭐⭐
Tempo: 40 minutos

Domine ferramentas poderosas de processamento de dados!

Você vai aprender:

Exemplos práticos:

# Lambda
dobro = lambda x: x * 2

# Mapear - dobrar todos os números
numeros = [1, 2, 3, 4, 5]
dobrados = lista(mapear(lambda x: x * 2, numeros))

# Filtrar - apenas números pares
pares = lista(filtrar(lambda x: x % 2 == 0, numeros))

# Combinar
resultado = lista(mapear(
    lambda x: x * 2,
    filtrar(lambda x: x % 2 == 0, numeros)
))

Casos de uso real:

Funções utilizadas:

O que você aprende:

Desafio extra:


🚀 Como Fazer os Exercícios

Passo a Passo

  1. Clone o repositório
    git clone https://github.com/maxwellamaral/pybr.git
    cd pybr
    
  2. Execute um exercício
    python pybr.py exercicios/01-ola-mundo.pybr
    
  3. Estude o código
    • Leia os comentários
    • Entenda cada linha
    • Teste modificações
  4. Faça os desafios
    • Tente resolver sozinho primeiro
    • Pesquise quando travar
    • Compare com a solução

Dicas de Estudo

Recursos de Apoio


📊 Acompanhe seu Progresso

Checklist de Exercícios

🟢 Básico

🟡 Intermediário

🔴 Avançado

Conquistas 🏆


❓ Dúvidas Frequentes

P: Preciso fazer na ordem?
R: Sim! Os exercícios são progressivos e cada um usa conceitos dos anteriores.

P: Quanto tempo leva para completar todos?
R: Aproximadamente 13-16 horas, fazendo com calma e entendendo.

P: E se eu travar em um exercício?
R: Revise o tutorial, consulte a referência, ou abra uma issue.

P: Posso pular exercícios?
R: Não é recomendado, mas você pode fazer exercícios intermediários se já souber o básico.

P: Os desafios extras são obrigatórios?
R: Não, mas são ótimos para praticar e fixar o conteúdo!


Bons estudos e divirta-se programando! 🚀

← Voltar ao Tutorial Ver Referência → Início