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!")
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!")
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")
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")
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}")
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))}")
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}")
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}")
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}")
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!")
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!")
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}")
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")
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!")
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!")
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.