15 Exercícios Python para Iniciantes com Soluções Completas

Aprender a programar é como aprender um novo idioma. Você precisa praticar todos os dias para melhorar. Python é uma das linguagens mais amigáveis para quem está começando. Sua sintaxe limpa e simples permite que você se concentre na lógica do problema, não na complexidade da linguagem.

Este artigo apresenta 15 exercícios práticos de Python organizados do mais fácil ao mais desafiador. Cada exercício vem com uma solução detalhada e explicações passo a passo. Você vai aprender conceitos fundamentais enquanto resolve problemas reais.

Antes de começar, certifique-se de ter o Python instalado em seu computador. Você pode baixá-lo gratuitamente no site oficial python.org. Use a versão mais recente para garantir compatibilidade com todos os exemplos.

Exercício 1: Olá, Mundo Personalizado

Problema: Crie um programa que pergunta o nome do usuário e exibe uma mensagem de boas-vindas personalizada.

Este é o primeiro programa de todo iniciante, mas com um toque especial. Vamos torná-lo interativo desde o início.

Solução:

Python

# Solicita o nome do usuário
nome = input("Qual é o seu nome? ")

# Exibe a mensagem personalizada
print(f"Olá, {nome}! Bem-vindo ao mundo da programação Python!")
Pronto para executar

A função input() permite que o programa receba dados do usuário. O texto entre aspas aparece na tela como uma pergunta. A resposta fica armazenada na variável 'nome'. A letra 'f' antes das aspas permite inserir variáveis dentro do texto usando chaves {}.

Exercício 2: Calculadora de Idade

Problema: Escreva um programa que calcula a idade de uma pessoa baseado no ano de nascimento.

Este exercício introduz operações matemáticas básicas e conversão de tipos de dados.

Solução:

Python

# Importa o módulo para obter o ano atual
from datetime import datetime

# Obtém o ano atual
ano_atual = datetime.now().year

# Solicita o ano de nascimento
ano_nascimento = int(input("Em que ano você nasceu? "))

# Calcula a idade
idade = ano_atual-ano_nascimento

# Exibe o resultado
print(f"Você tem {idade} anos ou fará {idade} anos este ano!")
Pronto para executar

A função int() converte o texto digitado pelo usuário em número inteiro. Isso é necessário porque o input() sempre retorna texto, mesmo quando digitamos números. O módulo datetime nos fornece o ano atual automaticamente.

Exercício 3: Par ou Ímpar

Problema: Crie um programa que verifica se um número é par ou ímpar.

Aqui você aprende sobre estruturas condicionais e o operador módulo (%).

Solução:

Python

# Solicita um número ao usuário
numero = int(input("Digite um número inteiro: "))

# Verifica se é par ou ímpar
if numero % 2 == 0:
    print(f"O número {numero} é PAR")
else:
    print(f"O número {numero} é ÍMPAR")
Pronto para executar

O operador % (módulo) retorna o resto da divisão. Quando dividimos um número par por 2, o resto é sempre 0. A estrutura if-else permite que o programa tome decisões baseadas em condições.

Exercício 4: Média de Três Notas

Problema: Calcule a média de três notas e determine se o aluno foi aprovado (média >= 7).

Este exercício combina entrada de dados, cálculos e tomada de decisão.

Solução:

Python

# Solicita as três notas
nota1 = float(input("Digite a primeira nota: "))
nota2 = float(input("Digite a segunda nota: "))
nota3 = float(input("Digite a terceira nota: "))

# Calcula a média
media = (nota1 + nota2 + nota3) / 3

# Exibe a média com duas casas decimais
print(f"Sua média é: {media:.2f}")

# Verifica aprovação
if media >= 7:
    print("Parabéns! Você foi APROVADO!")
elif media >= 5:
    print("Você está em RECUPERAÇÃO")
else:
    print("Infelizmente você foi REPROVADO")
Pronto para executar

A função float() converte texto em número decimal. O formato .2f limita a exibição a duas casas decimais. A estrutura elif (else if) permite verificar múltiplas condições em sequência.

Exercício 5: Tabuada

Problema: Gere a tabuada de um número escolhido pelo usuário.

Vamos aprender sobre loops (repetições) com este exercício clássico.

Solução:

Python

# Solicita o número
numero = int(input("Digite um número para ver sua tabuada: "))

print(f"\nTabuada do {numero}:")
print("-" * 20)

# Gera a tabuada usando um loop
for i in range(1, 11):
    resultado = numero * i
    print(f"{numero} x {i:2} = {resultado}")
Pronto para executar

O loop for repete um bloco de código várias vezes. A função range(1, 11) cria uma sequência de números de 1 a 10. O formato {i:2} alinha os números em duas posições, deixando a tabuada mais organizada.

Exercício 6: Contador de Vogais

Problema: Conte quantas vogais existem em uma palavra ou frase.

Este exercício introduz manipulação de strings (textos) e loops através de caracteres.

Solução:

Python

# Solicita uma palavra ou frase
texto = input("Digite uma palavra ou frase: ")

# Define as vogais
vogais = "aeiouAEIOU"

# Contador de vogais
contador = 0

# Percorre cada letra do texto
for letra in texto:
    if letra in vogais:
        contador += 1

print(f"O texto '{texto}' contém {contador} vogais")

# Mostra quais vogais aparecem
vogais_encontradas = set()
for letra in texto.lower():
    if letra in "aeiou":
        vogais_encontradas.add(letra)

if vogais_encontradas:
    print(f"Vogais encontradas: {', '.join(sorted(vogais_encontradas))}")
Pronto para executar

O operador in verifica se um item está dentro de uma sequência. O método lower() converte texto para minúsculas. O tipo set() armazena valores únicos, eliminando repetições automaticamente.

Exercício 7: Número Primo

Problema: Verifique se um número é primo (divisível apenas por 1 e por ele mesmo).

Um exercício que desenvolve o raciocínio lógico e o uso eficiente de loops.

Solução:

Python

# Solicita um número
numero = int(input("Digite um número para verificar se é primo: "))

# Números menores que 2 não são primos
if numero < 2:
    print(f"{numero} não é primo")
else:
    eh_primo = True
    
    # Verifica divisibilidade até a raiz quadrada do número
    for divisor in range(2, int(numero ** 0.5) + 1):
        if numero % divisor == 0:
            eh_primo = False
            break
    
    if eh_primo:
        print(f"{numero} É PRIMO!")
    else:
        print(f"{numero} NÃO é primo")
        
        # Mostra os divisores
        divisores = []
        for i in range(1, numero + 1):
            if numero % i == 0:
                divisores.append(i)
        print(f"Divisores: {divisores}")
Pronto para executar

O comando break interrompe um loop quando uma condição é satisfeita. Verificar apenas até a raiz quadrada do número torna o programa mais eficiente. A lista divisores armazena todos os números que dividem o número original.

Exercício 8: Fibonacci

Problema: Gere os primeiros N números da sequência de Fibonacci.

A sequência de Fibonacci aparece na natureza e é um exercício clássico de programação.

Solução:

Python

# Solicita quantos números mostrar
n = int(input("Quantos números da sequência de Fibonacci você quer ver? "))

# Casos especiais
if n <= 0:
    print("Por favor, digite um número positivo")
elif n == 1:
    print("Sequência de Fibonacci: 0")
else:
    # Inicia a sequência
    fibonacci = [0, 1]
    
    # Gera os próximos números
    for i in range(2, n):
        proximo = fibonacci[i-1] + fibonacci[i-2]
        fibonacci.append(proximo)
    
    # Exibe a sequência
    print(f"Sequência de Fibonacci com {n} números:")
    print(fibonacci)
    
    # Mostra a soma total
    soma = sum(fibonacci)
    print(f"Soma dos números: {soma}")
Pronto para executar

As listas em Python armazenam múltiplos valores. O método append() adiciona um novo item ao final da lista. A função sum() calcula a soma de todos os elementos de uma lista.

Exercício 9: Palíndromo

Problema: Verifique se uma palavra é um palíndromo (lê-se igual de trás para frente).

Vamos trabalhar com manipulação avançada de strings.

Solução:

Python

# Solicita uma palavra
palavra = input("Digite uma palavra: ")

# Remove espaços e converte para minúsculas
palavra_limpa = palavra.replace(" ", "").lower()

# Inverte a palavra
palavra_invertida = palavra_limpa[::-1]

# Verifica se é palíndromo
if palavra_limpa == palavra_invertida:
    print(f"'{palavra}' É um palíndromo!")
    print(f"Normal: {palavra_limpa}")
    print(f"Invertida: {palavra_invertida}")
else:
    print(f"'{palavra}' NÃO é um palíndromo")
    print(f"Normal: {palavra_limpa}")
    print(f"Invertida: {palavra_invertida}")

# Exemplos famosos de palíndromos
print("\nExemplos de palíndromos:")
exemplos = ["arara", "osso", "radar", "reviver"]
for exemplo in exemplos:
    print(f"  - {exemplo}")
Pronto para executar

A notação [::-1] é uma forma elegante de inverter uma string em Python. O método replace() substitui caracteres em uma string. Remover espaços é importante para verificar frases palíndromas.

Exercício 10: Conversão de Temperatura

Problema: Converta temperaturas entre Celsius, Fahrenheit e Kelvin.

Um exercício prático que envolve múltiplas funções e escolhas do usuário.

Solução:

Python

def celsius_para_fahrenheit(celsius):
    return (celsius * 9/5) + 32

def celsius_para_kelvin(celsius):
    return celsius + 273.15

def fahrenheit_para_celsius(fahrenheit):
    return (fahrenheit-32) * 5/9

def kelvin_para_celsius(kelvin):
    return kelvin-273.15

# Menu principal
print("CONVERSOR DE TEMPERATURA")
print("1. Celsius para Fahrenheit")
print("2. Celsius para Kelvin")
print("3. Fahrenheit para Celsius")
print("4. Kelvin para Celsius")

# Solicita uma escolha entre as opções acima
escolha = input("\nEscolha uma opção (1-4): ")
temperatura = float(input("Digite a temperatura: "))

# Compara cada número e executa a função correspondente e imprime
if escolha == "1":
    resultado = celsius_para_fahrenheit(temperatura)
    print(f"{temperatura}°C = {resultado:.2f}°F")
elif escolha == "2":
    resultado = celsius_para_kelvin(temperatura)
    print(f"{temperatura}°C = {resultado:.2f}K")
elif escolha == "3":
    resultado = fahrenheit_para_celsius(temperatura)
    print(f"{temperatura}°F = {resultado:.2f}°C")
elif escolha == "4":
    resultado = kelvin_para_celsius(temperatura)
    print(f"{temperatura}K = {resultado:.2f}°C")
else:
    print("Opção inválida!")
Pronto para executar

As funções permitem organizar código em blocos reutilizáveis. A palavra def define uma nova função. O comando return envia um valor de volta para quem chamou a função.

Exercício 11: Lista de Compras

Problema: Crie um programa que gerencia uma lista de compras com adição e remoção de itens.

Este exercício trabalha com listas dinâmicas e loops infinitos.

Solução:

Python

# Inicia a lista vazia
lista_compras = []

print("LISTA DE COMPRAS INTERATIVA")
print("Comandos: adicionar, remover, listar, sair")

# Loop principal do programa
while True:
    # Recebe o comando do usuário
    comando = input("\nO que deseja fazer? ").lower()
    
    # Faz algo dependendo do comando passado
    if comando == "adicionar":
        item = input("Digite o item para adicionar: ")
        lista_compras.append(item)
        print(f"'{item}' foi adicionado à lista")
    
    elif comando == "remover":
        if lista_compras:
            print("Itens na lista:")
            for i, item in enumerate(lista_compras, 1):
                print(f"{i}. {item}")
            
            numero = int(input("Digite o número do item para remover: "))
            if 1 <= numero <= len(lista_compras):
                removido = lista_compras.pop(numero-1)
                print(f"'{removido}' foi removido da lista")
            else:
                print("Número inválido!")
        else:
            print("A lista está vazia!")
    
    elif comando == "listar":
        if lista_compras:
            print("\nSua lista de compras:")
            for i, item in enumerate(lista_compras, 1):
                print(f"{i}. {item}")
            print(f"Total de itens: {len(lista_compras)}")
        else:
            print("A lista está vazia!")
    
    elif comando == "sair":
        print("Programa encerrado!")
        break
    
    else:
        print("Comando não reconhecido!")
Pronto para executar

O loop while True cria um loop infinito que só para com o comando break. A função enumerate() numera automaticamente os itens de uma lista. O método pop() remove e retorna um item da lista.

Exercício 12: Jogo de Adivinhação

Problema: Crie um jogo onde o computador escolhe um número e o jogador tenta adivinhar.

Um exercício divertido que usa números aleatórios e feedback ao usuário.

Solução:

Python

import random

# Computador escolhe um número
numero_secreto = random.randint(1, 100)
tentativas = 0
max_tentativas = 10

print("JOGO DE ADIVINHAÇÃO")
print(f"Tente adivinhar o número entre 1 e 100")
print(f"Você tem {max_tentativas} tentativas")

while tentativas < max_tentativas:
    tentativas += 1
    tentativas_restantes = max_tentativas-tentativas
    
    # Solicita um palpite
    try:
        palpite = int(input(f"\nTentativa {tentativas}: "))
    except ValueError:
        print("Por favor, digite apenas números!")
        continue
    
    # Verifica o palpite
    if palpite == numero_secreto:
        print(f"PARABÉNS! Você acertou em {tentativas} tentativas!")
        break
    elif palpite < numero_secreto:
        print(f"Muito baixo! Tente um número maior.")
        if tentativas_restantes > 0:
            print(f"Restam {tentativas_restantes} tentativas")
    else:
        print(f"Muito alto! Tente um número menor.")
        if tentativas_restantes > 0:
            print(f"Restam {tentativas_restantes} tentativas")
    
    # Dica especial na metade das tentativas
    if tentativas == max_tentativas // 2:
        if numero_secreto <= 50:
            print("Dica: O número está na primeira metade (1-50)")
        else:
            print("Dica: O número está na segunda metade (51-100)")

if tentativas == max_tentativas:
    print(f"\nVocê perdeu! O número era {numero_secreto}")
Pronto para executar

O módulo random gera números aleatórios. O bloco try-except captura erros e evita que o programa trave. O operador // realiza divisão inteira, descartando as casas decimais.

Exercício 13: Validador de CPF Simplificado

Problema: Crie um validador básico que verifica se um CPF tem 11 dígitos e calcula os dígitos verificadores.

Um exercício mais complexo que trabalha com algoritmos de validação.

Solução:

Python

def validar_cpf(cpf):
    # Remove caracteres não numéricos
    cpf_limpo = ''.join(filter(str.isdigit, cpf))
    
    # Verifica se tem 11 dígitos
    if len(cpf_limpo) != 11:
        return False
    
    # Verifica se todos os dígitos são iguais
    if cpf_limpo == cpf_limpo[0] * 11:
        return False
    
    # Calcula o primeiro dígito verificador
    soma = 0
    for i in range(9):
        soma += int(cpf_limpo[i]) * (10-i)
    
    resto = soma % 11
    digito1 = 0 if resto < 2 else 11-resto
    
    # Verifica o primeiro dígito
    if digito1 != int(cpf_limpo[9]):
        return False
    
    # Calcula o segundo dígito verificador
    soma = 0
    for i in range(10):
        soma += int(cpf_limpo[i]) * (11-i)
    
    resto = soma % 11
    digito2 = 0 if resto < 2 else 11-resto
    
    # Verifica o segundo dígito
    return digito2 == int(cpf_limpo[10])

# Programa principal
cpf = input("Digite o CPF (apenas números ou com pontos e traço): ")

if validar_cpf(cpf):
    print("CPF VÁLIDO!")
    # Formata o CPF
    cpf_numeros = ''.join(filter(str.isdigit, cpf))
    cpf_formatado = f"{cpf_numeros[:3]}.{cpf_numeros[3:6]}.{cpf_numeros[6:9]}-{cpf_numeros[9:]}"
    print(f"CPF formatado: {cpf_formatado}")
else:
    print("CPF INVÁLIDO!")
    print("Verifique se digitou corretamente")
Pronto para executar

A função filter() remove caracteres indesejados. O método isdigit() verifica se um caractere é um dígito. A formatação de strings com fatiamento torna a saída mais legível.

Exercício 14: Calculadora com Menu

Problema: Desenvolva uma calculadora completa com as quatro operações básicas e outras funções úteis.

Este exercício integra vários conceitos aprendidos anteriormente.

Solução:

Python

import math

def adicao(a, b):
    return a + b

def subtracao(a, b):
    return a-b

def multiplicacao(a, b):
    return a * b

def divisao(a, b):
    if b != 0:
        return a / b
    else:
        return "Erro: divisão por zero!"

def potencia(a, b):
    return a ** b

def raiz_quadrada(a):
    if a >= 0:
        return math.sqrt(a)
    else:
        return "Erro: número negativo!"

print("CALCULADORA PYTHON")
print("-" * 30)

# Loop principal do programa
while True:
    print("\nOperações disponíveis:")
    print("1. Adição (+)")
    print("2. Subtração (-)")
    print("3. Multiplicação (*)")
    print("4. Divisão (/)")
    print("5. Potência (^)")
    print("6. Raiz quadrada (√)")
    print("7. Sair")
    
    escolha = input("\nEscolha uma operação (1-7): ")
    
    # Se a escolha for 7 o programa é finalizado
    if escolha == "7":
        print("Calculadora encerrada!")
        break
    
    # Detecta se a escolha está entre 1 a 5
    if escolha in ["1", "2", "3", "4", "5"]:
        try:
            num1 = float(input("Digite o primeiro número: "))
            num2 = float(input("Digite o segundo número: "))
        except ValueError:
            print("Erro: Digite apenas números!")
            continue
       
        # Faz algo dependendo da escolha do usuário
        if escolha == "1":
            resultado = adicao(num1, num2)
            print(f"{num1} + {num2} = {resultado}")
        elif escolha == "2":
            resultado = subtracao(num1, num2)
            print(f"{num1} - {num2} = {resultado}")
        elif escolha == "3":
            resultado = multiplicacao(num1, num2)
            print(f"{num1} * {num2} = {resultado}")
        elif escolha == "4":
            resultado = divisao(num1, num2)
            print(f"{num1} / {num2} = {resultado}")
        elif escolha == "5":
            resultado = potencia(num1, num2)
            print(f"{num1} ^ {num2} = {resultado}")
    
    # Se a escolha for 6, faz a raiz quadrada 
    elif escolha == "6":
        try:
            num = float(input("Digite o número: "))
            resultado = raiz_quadrada(num)
            print(f"√{num} = {resultado}")
        except ValueError:
            print("Erro: Digite apenas números!")
    
    else:
        print("Opção inválida!")
Pronto para executar

O módulo math fornece funções matemáticas avançadas. Verificar divisão por zero evita erros no programa. O tratamento de exceções torna o programa mais robusto e profissional.

Exercício 15: Analisador de Texto

Problema: Crie um programa que analisa um texto e fornece estatísticas detalhadas sobre ele.

Nosso exercício final combina tudo que aprendemos em um programa completo e útil.

Solução:

Python

def analisar_texto(texto):
    # Estatísticas básicas
    total_caracteres = len(texto)
    total_caracteres_sem_espaco = len(texto.replace(" ", ""))
    
    # Conta palavras
    palavras = texto.split()
    total_palavras = len(palavras)
    
    # Conta frases (aproximado)
    frases = texto.count('.') + texto.count('!') + texto.count('?')
    if frases == 0:
        frases = 1
    
    # Conta linhas
    linhas = texto.count('\n') + 1
    
    # Conta vogais e consoantes
    vogais = "aeiouAEIOU"
    num_vogais = sum(1 for char in texto if char in vogais)
    num_consoantes = sum(1 for char in texto.lower() if char.isalpha() and char not in "aeiou")
    
    # Conta dígitos
    num_digitos = sum(1 for char in texto if char.isdigit())
    
    # Palavra mais longa e mais curta
    if palavras:
        palavra_mais_longa = max(palavras, key=len)
        palavra_mais_curta = min(palavras, key=len)
        tamanho_medio = sum(len(palavra) for palavra in palavras) / total_palavras
    else:
        palavra_mais_longa = ""
        palavra_mais_curta = ""
        tamanho_medio = 0
    
    # Frequência de palavras
    frequencia = {}
    for palavra in palavras:
        palavra_limpa = palavra.lower().strip(".,!?;:")
        frequencia[palavra_limpa] = frequencia.get(palavra_limpa, 0) + 1
    
    # Palavras mais comuns
    palavras_comuns = sorted(frequencia.items(), key=lambda x: x[1], reverse=True)[:5]
    
    return {
        'caracteres': total_caracteres,
        'caracteres_sem_espaco': total_caracteres_sem_espaco,
        'palavras': total_palavras,
        'frases': frases,
        'linhas': linhas,
        'vogais': num_vogais,
        'consoantes': num_consoantes,
        'digitos': num_digitos,
        'palavra_mais_longa': palavra_mais_longa,
        'palavra_mais_curta': palavra_mais_curta,
        'tamanho_medio': tamanho_medio,
        'palavras_comuns': palavras_comuns
    }

# Programa principal
print("ANALISADOR DE TEXTO")
print("-" * 40)
print("Digite ou cole seu texto abaixo.")
print("Digite 'ANALISAR' em uma nova linha para processar o texto.")

linhas_texto = []
while True:
    linha = input()
    if linha.upper() == "ANALISAR":
        break
    linhas_texto.append(linha)

texto = '\n'.join(linhas_texto)

if texto:
    resultados = analisar_texto(texto)
    
    print("\n" + "=" * 40)
    print("ESTATÍSTICAS DO TEXTO")
    print("=" * 40)
    
    print(f"\nCaracteres totais: {resultados['caracteres']}")
    print(f"Caracteres (sem espaços): {resultados['caracteres_sem_espaco']}")
    print(f"Total de palavras: {resultados['palavras']}")
    print(f"Total de frases: {resultados['frases']}")
    print(f"Total de linhas: {resultados['linhas']}")
    
    print(f"\nVogais: {resultados['vogais']}")
    print(f"Consoantes: {resultados['consoantes']}")
    print(f"Dígitos: {resultados['digitos']}")
    
    if resultados['palavras'] > 0:
        print(f"\nPalavra mais longa: '{resultados['palavra_mais_longa']}' ({len(resultados['palavra_mais_longa'])} letras)")
        print(f"Palavra mais curta: '{resultados['palavra_mais_curta']}' ({len(resultados['palavra_mais_curta'])} letras)")
        print(f"Tamanho médio das palavras: {resultados['tamanho_medio']:.1f} letras")
        
        if resultados['palavras_comuns']:
            print("\nPalavras mais frequentes:")
            for palavra, freq in resultados['palavras_comuns']:
                print(f"  '{palavra}': {freq} vezes")
else:
    print("Nenhum texto foi inserido!")
Pronto para executar

Os dicionários armazenam dados em pares chave-valor. O método get() retorna um valor padrão se a chave não existir. A função lambda cria funções anônimas simples para ordenação.

Conclusão e Próximos Passos

Parabéns por chegar até aqui! Você completou 15 exercícios fundamentais de Python que cobrem os conceitos essenciais da linguagem. Cada exercício foi projetado para ensinar algo novo e construir sua confiança como programador.

Estes exercícios são apenas o começo da sua jornada. A programação é uma habilidade que melhora com a prática constante. Tente modificar os exercícios, adicione novas funcionalidades ou combine conceitos de diferentes problemas para criar seus próprios projetos.

Compartilhe:

Artigos recentes

Conteúdo do artigo

    Comece a Aprender Python Hoje!

    © Academify 2020-2025. Todos os direitos reservados.

    Conheça o Nosso Curso

    de

    Completo!

    Aprenda Python de forma prática e comece a criar seus próprios projetos desde as primeiras aulas. Um curso completo, do básico ao avançado