Table of Contents
Bem-vindo ao Curso de Python Backend
Aprenda Python do zero ao profissional com um curso completo, prático e estruturado!
🎯 Sobre o Curso
Este curso foi desenvolvido para te levar do básico ao avançado em Python, com foco em desenvolvimento backend. Você aprenderá através de aulas práticas, exercícios, projetos e quizzes interativos.
O que você vai aprender: - Fundamentos da linguagem Python - Estruturas de dados e controle de fluxo - Programação Orientada a Objetos - Manipulação de arquivos e exceções - APIs e requisições HTTP - Testes e boas práticas
🚀 Comece Agora
-
Aulas
16 aulas completas organizadas em 6 módulos, do básico ao avançado.
-
Slides
Slides interativos com RevealJS para todas as aulas do curso.
-
Exercícios
Pratique com exercícios para cada aula e fixe o conteúdo.
-
Quizzes
Teste seus conhecimentos com quizzes interativos.
-
Projetos
Desenvolva projetos práticos para aplicar o que aprendeu.
-
Configuração
Guias de instalação e configuração do ambiente Python.
📚 Estrutura do Curso
O curso está organizado em 6 módulos progressivos:
- Módulo 1 – Fundamentos (Aulas 01-04)
- Módulo 2 – Estruturas de Controle (Aulas 05-08)
- Módulo 3 – Funções e Modularização (Aulas 09-10)
- Módulo 4 – Arquivos e Exceções (Aulas 11-12)
- Módulo 5 – Programação Orientada a Objetos (Aulas 13-14)
- Módulo 6 – Ecossistema (Aulas 15-16)
🎓 Como Usar Este Curso
- Configure seu ambiente - Siga os guias de configuração
- Comece pela Aula 01 - Vá para Aulas e comece do início
- Pratique regularmente - Faça os exercícios e projetos de cada aula
- Teste seus conhecimentos - Complete os quizzes para validar seu aprendizado
- Revise com os slides - Use os slides para revisão rápida
Pronto para começar? Ir para Aula 01
Sobre o Curso
🎓 Python Backend - Do Zero ao Profissional
Este é um curso completo e estruturado de Python com foco em desenvolvimento backend. Desenvolvido para levar você do básico ao avançado, com uma abordagem prática e hands-on.
🎯 Objetivos do Curso
-
Dominar Python
Aprender a sintaxe, estruturas de dados e conceitos fundamentais da linguagem Python.
-
Programação Orientada a Objetos
Entender e aplicar os princípios de POO: classes, objetos, herança e polimorfismo.
-
Desenvolvimento Backend
Trabalhar com APIs, requisições HTTP e integração com serviços externos.
-
Boas Práticas
Escrever código limpo, testável e seguindo as melhores práticas da indústria.
📚 O Que Você Vai Aprender
Módulo 1 – Fundamentos
- Introdução ao Python e configuração do ambiente
- Variáveis, tipos de dados e operadores
- Estruturas condicionais e controle de fluxo
Módulo 2 – Estruturas de Controle
- Laços de repetição (for, while)
- Listas, tuplas e sets
- Dicionários e manipulação de coleções
Módulo 3 – Funções e Modularização
- Criação e uso de funções
- Módulos e pacotes
- Organização de código
Módulo 4 – Arquivos e Exceções
- Leitura e escrita de arquivos
- Tratamento de exceções
- Gerenciamento de erros
Módulo 5 – Programação Orientada a Objetos
- Classes e objetos
- Herança e polimorfismo
- Encapsulamento e abstração
Módulo 6 – Ecossistema Python
- APIs e requisições HTTP
- Testes automatizados
- Boas práticas e padrões de código
🛠️ Metodologia
-
Aulas Teóricas
Conteúdo explicativo com exemplos práticos e slides interativos.
-
Exercícios Práticos
Listas de exercícios para fixar o conteúdo de cada aula.
-
Projetos Reais
Desenvolva projetos práticos aplicando os conceitos aprendidos.
-
Quizzes Interativos
Teste seus conhecimentos com quizzes ao final de cada módulo.
👨🎓 Para Quem é Este Curso
- Iniciantes que querem aprender programação do zero
- Desenvolvedores que querem migrar para Python
- Estudantes de ciência da computação e áreas relacionadas
- Profissionais que querem se especializar em backend
📋 Pré-requisitos
- Computador com Windows, Linux ou macOS
- Vontade de aprender e praticar
- Não é necessário conhecimento prévio de programação!
🎖️ O Que Você Receberá
- ✅ 16 aulas completas e estruturadas
- ✅ Slides interativos para todas as aulas
- ✅ Exercícios práticos com soluções
- ✅ Projetos reais para portfólio
- ✅ Quizzes para autoavaliação
- ✅ Guias de configuração de ambiente
🚀 Comece Agora
Pronto para começar sua jornada em Python?
Ir para Aula 01 Configurar Ambiente
Dúvidas? Entre em contato ou acesse a documentação completa.
Aulas
Aulas do Curso
Bem-vindo à seção de aulas! Aqui você encontra todo o conteúdo do curso organizado por módulos.
📚 Módulos do Curso
-
Módulo 1 – Fundamentos
-
Módulo 2 – Estruturas de Controle
-
Módulo 3 – Funções e Modularização
-
Módulo 4 – Arquivos e Exceções
-
Módulo 5 – Programação Orientada a Objetos
-
Módulo 6 – Ecossistema
Módulo 1 – Fundamentos
Aula 01 - Introdução à Computação e Python
🎯 Objetivos da Aula
- [ ] Compreender o que é lógica de programação e algoritmos
- [ ] Conhecer a linguagem Python e suas características
- [ ] Preparar o ambiente de desenvolvimento (VSCode + Python)
- [ ] Escrever e executar o primeiro código ("Olá Mundo")
- [ ] Entender o conceito de entrada e saída básica
📚 Conteúdo
1. O que é Programação?
Programação é a arte de dar instruções a um computador para que ele realize tarefas específicas. Computadores não são "inteligentes"; eles são extremamente rápidos e obedientes. Eles precisam de comandos precisos para funcionar.
Esses comandos são organizados em uma sequência lógica chamada Algoritmo.
Definição: Um Algoritmo é uma sequência finita de passos bem definidos para resolver um problema.
Exemplo do dia a dia (Receita de Bolo): 1. Pegar os ingredientes 2. Misturar a massa 3. Colocar no forno 4. Esperar assar 5. Servir
Na computação, usamos Linguagens de Programação para escrever esses algoritmos de uma forma que o computador entenda.
graph TD
A[Início] --> B{Tem Ingredientes?}
B -- Não --> C[Comprar]
C --> B
B -- Sim --> D[Misturar Massa]
D --> E[Assar]
E --> F[Servir]
F --> G[Fim]
2. Por que Python?
Python é uma das linguagens mais populares do mundo. Ela foi criada por Guido van Rossum e lançada em 1991.
Principais características: - Simplicidade: Sintaxe limpa e fácil de ler (parece inglês!). - Versatilidade: Usada em Web, Data Science, IA, Automação, Jogos, etc. - Comunidade: Milhares de bibliotecas prontas e muito suporte.
3. Ambiente de Desenvolvimento
Para programar em Python, precisamos de duas ferramentas principais:
- Interpretador Python: O programa que lê e executa seu código.
- Editor de Código (IDE): Onde escrevemos o código. Usaremos o Visual Studio Code (VSCode).
Guia de Instalação
Se você ainda não instalou o Python e o VSCode, consulte nosso Guia de Instalação.
4. Seu Primeiro Código: "Olá Mundo"
A tradição na programação diz que o primeiro código que você escreve em uma nova linguagem deve exibir a mensagem "Olá Mundo" na tela. Em Python, isso é extremamente simples.
Usamos a função print() para mostrar (imprimir) informações na tela.
Exemplo:
O que aconteceu?
- print: É o comando (função) que diz ao Python: "Mostre isso na tela".
- (...): Os parênteses indicam que estamos chamando uma função.
- "Olá, Mundo!": As aspas indicam que isso é um texto (string), e não um comando.
5. Comentários
Comentários são anotações no código que o Python ignora. Eles servem para explicar o que o código faz para você mesmo (no futuro) ou para outros programadores.
# Isto é um comentário de uma linha
print("Python é legal") # Comentário na frente do código
"""
Isto é um comentário
de múltiplas linhas (Docstring)
"""
6. Variáveis (Intro rápida)
Imagine que variáveis são caixinhas na memória do computador onde guardamos informações. Cada caixinha tem um nome (rótulo) e um valor (conteúdo).
Neste exemplo:
1. Criamos uma variável chamada mensagem.
2. Guardamos o texto "Bem-vindo ao curso!" dentro dela.
3. Pedimos para imprimir o conteúdo da variável mensagem.
💻 Em Prática
Vamos abrir o VSCode e criar um arquivo chamado aula01.py.
Desafio: Escreva um código que imprima seu nome, sua idade e sua cidade, um por linha.
Para executar:
1. Abra o terminal no VSCode (Ctrl + ')
2. Digite: python aula01.py
📝 Resumo
- Algoritmo é uma sequência de passos para resolver um problema.
- Python é uma linguagem de alto nível, fácil e poderosa.
- Usamos
print("Texto")para mostrar informações na tela. - Comentários (
#) servem para documentar o código e são ignorados pelo computador.
🎯 Próximos Passos
-
Acessar Slides
-
Quiz
-
Exercícios
-
Projeto
Aula 02 - Variáveis, Tipos de Dados e Operadores
🎯 Objetivos da Aula
- [ ] Entender profundamente o conceito de variáveis e memória
- [ ] Conhecer os tipos primitivos:
int,float,str,bool - [ ] Aprender regras de nomeação (snake_case)
- [ ] Realizar entrada de dados com
input() - [ ] Converter tipos de dados (Casting)
- [ ] Conhecer os operadores aritméticos básicos
📚 Conteúdo
1. O que são Variáveis?
Variáveis são nomes que damos a espaços na memória do computador para guardar dados. Pense nelas como etiquetas em caixas.
idade: O nome da variável (etiqueta).=: O operador de atribuição (significa "recebe").25: O valor armazenado na caixa.
Importante: Em Python, não precisamos declarar o tipo da variável antes (tipagem dinâmica). O Python descobre sozinho.
2. Tipos de Dados Primitivos
Python tem 4 tipos básicos fundamentais:
| Tipo | Nome no Python | Descrição | Exemplo |
|---|---|---|---|
| Inteiro | int |
Números sem vírgula (positivos, negativos ou zero) | 10, -5, 0 |
| Ponto Flutuante | float |
Números com vírgula (ponto decimal) | 3.14, 2.5, -0.01 |
| Texto (String) | str |
Sequência de caracteres entre aspas | "Olá", 'Python' |
| Booleano | bool |
Valores lógicos (Verdadeiro ou Falso) | True, False |
flowchart TD
A[Tipos de Dados] --> B[Texto: str]
A --> C[Numeros]
A --> D[Booleanos: bool]
C --> E[int]
C --> F[float]
3. A Função type()
print(type(10)) # <class 'int'>
print(type(3.14)) # <class 'float'>
print(type("Olá")) # <class 'str'>
print(type(True)) # <class 'bool'>
3. Regras de Nomeação (Boas Práticas)
Para escrever código profissional, seguimos o guia de estilo PEP 8.
- Use snake_case: letras minúsculas separadas por underline.
- ✅
nome_completo,idade_usuario,total_vendas - ❌
nomeCompleto,IdadeUsuario,Total-Vendas
- ✅
- Não comece com números (
1nome❌). - Não use espaços (
nome usuario❌). - Evite caracteres especiais (
coração❌).
4. Entrada de Dados (Input)
Para interagir com o usuário, usamos a função input(). Ela pausa o programa e espera o usuário digitar algo.
⚠️ Atenção: O
input()SEMPRE retorna um texto (str), mesmo que o usuário digite um número!
5. Conversão de Tipos (Casting)
Como o input() retorna texto, se quisermos fazer contas, precisamos converter (fazer o casting) para número.
int(): Converte para inteiro.float(): Converte para real.str(): Converte para texto.
# Exemplo de erro comum
numero = input("Digite um número: ") # Usuário digita 5
# print(numero + 1) # ERRO! Não pode somar texto com número "5" + 1
# Forma correta
numero = int(input("Digite um número: "))
print(numero + 1) # Funciona! 6
6. Operadores Aritméticos Básicos
| Operador | Nome | Exemplo | Resultado |
|---|---|---|---|
+ |
Adição | 5 + 2 |
7 |
- |
Subtração | 5 - 2 |
3 |
* |
Multiplicação | 5 * 2 |
10 |
/ |
Divisão | 5 / 2 |
2.5 |
// |
Divisão Inteira | 5 // 2 |
2 (parte inteira) |
% |
Resto (Módulo) | 5 % 2 |
1 (sobra da divisão) |
** |
Potência | 5 ** 2 |
25 ($5^2$) |
💻 Em Prática
Vamos criar um programa que pergunta o ano de nascimento e calcula a idade aproximada.
# calculadora_idade.py
# 1. Entrada
ano_nascimento = input("Em que ano você nasceu? ")
# 2. Processamento (Conversão + Cálculo)
ano_nascimento_int = int(ano_nascimento)
ano_atual = 2024 # Atualize para o ano atual
idade = ano_atual - ano_nascimento_int
# 3. Saída
print(f"Você tem (ou fará) {idade} anos.")
📝 Resumo
- Variáveis guardam dados (
nome = "João"). - Tipos principais:
int,float,str,bool. input()lê dados do teclado (sempre como texto!).- Casting (
int(),float()) converte tipos de dados. - Operadores matemáticos permitem cálculos (
+,-,*,/).
🎯 Próximos Passos
-
Acessar Slides
-
Quiz
-
Exercícios
-
Projeto
Aula 03 - Operadores
🎯 Objetivos da Aula
- [ ] Revisar Operadores Aritméticos
- [ ] Aprender Operadores de Comparação (Relacionais)
- [ ] Dominar Operadores Lógicos (
and,or,not) - [ ] Conhecer Operadores de Atribuição (
+=,-=, etc.) - [ ] Entender a Precedência de Operadores
📚 Conteúdo
1. Operadores Aritméticos (Revisão)
Já vimos os básicos (+, -, *, /), mas vale relembrar e aprofundar:
x = 10
y = 3
print(x + y) # Soma: 13
print(x - y) # Subtração: 7
print(x * y) # Multiplicação: 30
print(x / y) # Divisão: 3.333...
print(x // y) # Divisão Inteira: 3 (IMPORTANTE!)
print(x % y) # Módulo (Resto): 1 (IMPORTANTE!)
print(x ** y) # Potência: 1000
💡 Dica: O operador de módulo (
%) é muito usado para saber se um número é par ou ímpar.numero % 2 == 0(Par)numero % 2 == 1(Ímpar)
2. Operadores de Comparação (Relacionais)
Usados para comparar dois valores. O resultado é SEMPRE um Booleano (True ou False).
| Operador | Significado | Exemplo (x=5, y=10) |
Resultado |
|---|---|---|---|
== |
Igual a | x == y |
False |
!= |
Diferente de | x != y |
True |
> |
Maior que | x > y |
False |
< |
Menor que | x < y |
True |
>= |
Maior ou igual a | x >= 5 |
True |
<= |
Menor ou igual a | y <= 2 |
False |
⚠️ Cuidado:
==(comparação) é diferente de=(atribuição)!
3. Operadores Lógicos
Permitem combinar múltiplas condições.
| Operador | Descrição | Regra | Exemplo |
|---|---|---|---|
and |
E | Retorna True se AMBAS as condições forem verdadeiras. |
True and False -> False |
or |
OU | Retorna True se PELO MENOS UMA for verdadeira. |
True or False -> True |
not |
NÃO | Inverte o valor (De True para False e vice-versa). |
not True -> False |
Tabela Verdade:
# AND
print(True and True) # True
print(True and False) # False
# OR
print(True or False) # True
print(False or False) # False
# NOT
print(not True) # False
4. Operadores de Atribuição
Atalhos para atualizar o valor de uma variável.
saldo = 100
saldo = saldo + 50 # Atribuição normal
# Equivalente com operador de atribuição:
saldo += 50
print(saldo) # 200 (100 + 50 + 50)
# Outros exemplos
saldo -= 20 # saldo = saldo - 20
saldo *= 2 # saldo = saldo * 2
saldo /= 10 # saldo = saldo / 10
5. Precedência de Operadores
Assim como na matemática, o Python resolve as operações em uma ordem específica:
- Parênteses
() - Potência
** - Multiplicação
*, Divisão/,//,% - Soma
+, Subtração- - Relacionais
==,!=,>, etc. - Lógicos
not - Lógicos
and - Lógicos
or
graph TD
A[Expressão: 5 + 2 * 3]
B[Multiplicação Primeiro: 2 * 3 = 6]
C[Soma Depois: 5 + 6]
D[Resultado: 11]
A --> B
B --> C
C --> D
💻 Em Prática
Vamos criar um programa que verifica se uma pessoa pode votar (maior de 16 anos) E se o voto é obrigatório (entre 18 e 70 anos).
# verifica_voto.py
idade = int(input("Qual sua idade? "))
# Voto facultativo ou obrigatório?
pode_votar = idade >= 16
voto_obrigatorio = idade >= 18 and idade < 70
print(f"Pode votar? {pode_votar}")
print(f"Voto obrigatório? {voto_obrigatorio}")
📝 Resumo
- Aritméticos: Cálculos matemáticos. Destaque para
//(inteiro) e%(resto). - Relacionais: Comparam valores e retornam
True/False(==,!=,>). - Lógicos: Combinam booleanos (
and,or,not). - Atribuição: Atalhos para alterar variáveis (
+=). - Precedência: A ordem importa! Use parênteses
()para forçar a ordem desejada.
🎯 Próximos Passos
-
Acessar Slides
-
Quiz
-
Exercícios
-
Projeto
Aula 04 - Estruturas Condicionais (if/elif/else)
🎯 Objetivos da Aula
- [ ] Entender o fluxo de controle de um programa
- [ ] Aprender a sintaxe do
if(se) - [ ] Usar o
else(senão) para alternativas - [ ] Usar o
elif(senão se) para múltiplas condições - [ ] Compreender a importância da Indentação em Python
- [ ] Aninhar condições (if dentro de if)
📚 Conteúdo
1. O que são Condicionais?
Até agora, nossos programas seguiam uma linha reta: passo 1, passo 2, passo 3... Mas a vida real é cheia de decisões: "SE estiver chovendo, levo guarda-chuva. SENÃO, vou de óculos escuros."
Em Python, usamos estruturas condicionais para desviar o fluxo do programa baseando-se em testes lógicos (True ou False).
graph TD
A[Início] --> B{Chovendo?}
B -- Sim --> C[Levar Guarda-Chuva]
B -- Não --> D[Ir de Óculos Escuros]
C --> E[Sair de Casa]
D --> E
2. A Estrutura if (Se)
O bloco if só executa se a condição for verdadeira (True).
idade = 20
if idade >= 18:
print("Você é maior de idade.")
print("Pode entrar na festa.") # Este código também depende do if
print("Fim do programa.") # Executa sempre
🔑 Indentação: Note que o código dentro do
ifestá "empurrado" para a direita (geralmente 4 espaços). Isso diz ao Python que aquele bloco pertence aoif. Se tirar a indentação, dá erro ou muda a lógica!
3. A Estrutura else (Senão)
O else é o plano B. Ele executa somente se o if for falso.
O
elsenunca tem condição. Ele é "todo o resto".
4. A Estrutura elif (Senão Se)
Para testar várias condições em sequência. O primeiro que for verdadeiro ganha.
nota = 8.5
if nota >= 9.0:
print("Conceito A (Excelente!)")
elif nota >= 7.0:
print("Conceito B (Aprovado)")
elif nota >= 5.0:
print("Conceito C (Recuperação)")
else:
print("Conceito D (Reprovado)")
5. If Aninhado (If dentro de If)
Você pode colocar um if dentro de outro. Isso é útil para verificar condições dependentes.
idade = 20
cnh = False
if idade >= 18:
print("Tem idade para dirigir.")
if cnh:
print("Pode pegar o carro!")
else:
print("Mas precisa tirar a CNH primeiro.")
else:
print("Muito novo para dirigir.")
6. Combinando com Operadores Lógicos
Podemos deixar o código mais limpo usando and, or, not.
# Versão melhor do exemplo anterior
if idade >= 18 and cnh:
print("Pode dirigir!")
elif idade >= 18 and not cnh:
print("Falta a CNH.")
else:
print("Não pode dirigir.")
💻 Em Prática
Vamos criar um programa que verifica se um ano é Bissexto. Regra: 1. Divisível por 4? (Sim -> pode ser. Não -> não é) 2. Divisível por 100? (Sim -> não é, a menos que...) 3. Divisível por 400? (Sim -> é!)
Simplificando: É bissexto se for divisível por 4 E (NÃO divisível por 100 OU divisível por 400).
# ano_bissexto.py
ano = int(input("Digite um ano: "))
if (ano % 4 == 0 and ano % 100 != 0) or (ano % 400 == 0):
print(f"{ano} é Bissexto!")
else:
print(f"{ano} NÃO é Bissexto.")
📝 Resumo
if: Testa uma condição.elif: Testa outra condição se a anterior falhou.else: Executa se nada acima for verdade.- Indentação: Fundamental em Python para definir blocos de código.
🎯 Próximos Passos
-
Acessar Slides
-
Quiz
-
Exercícios
-
Projeto
Módulo 2 – Estruturas de Controle
Aula 05 - Estruturas de Repetição (for/while)
🎯 Objetivos da Aula
- [ ] Entender o conceito de Loops (Laços de Repetição)
- [ ] Dominar o loop
fore a funçãorange() - [ ] Dominar o loop
while - [ ] Saber quando usar cada um (
forvswhile) - [ ] Controlar loops com
breakecontinue
📚 Conteúdo
1. O que são Loops?
Imagine que você precisa imprimir o nome de 100 alunos. Escrever 100 print() seria cansativo e nada inteligente.
Loops permitem repetir um bloco de código várias vezes.
graph TD
A[Início] --> B{Condição Verdadeira?}
B -- Sim --> C[Executar Bloco]
C --> B
B -- Não --> D[Sair do Loop]
2. O Loop for (Para)
O for é usado quando sabemos quantas vezes queremos repetir algo, ou para percorrer itens de uma coleção (que veremos na próxima aula).
Para repetir um número exato de vezes, usamos a função auxiliar range().
range(inicio, fim, passo):
- range(5): Gera 0, 1, 2, 3, 4 (O limite final nunca entra!)
- range(1, 6): Gera 1, 2, 3, 4, 5
- range(0, 10, 2): Gera 0, 2, 4, 6, 8 (pula de 2 em 2)
A variável
i(índice) atualiza automaticamente a cada volta.
3. O Loop while (Enquanto)
O while repete o bloco enquanto uma condição for verdadeira.
É usado quando não sabemos quantas vezes vamos repetir (ex: esperar o usuário digitar a senha certa).
⚠️ Perigo: Loop Infinito! Se a condição nunca ficar falsa, o programa roda para sempre.
4. Controle de Loops (break e continue)
Às vezes precisamos interromper o fluxo natural do loop.
break: Para o loop imediatamente (sai dele).continue: Pula a volta atual e vai para a próxima (volta pro início).
# Exemplo de break
for i in range(10):
if i == 5:
print("Encontrei o 5, parando!")
break
print(i)
# Imprime 0, 1, 2, 3, 4... e para.
# Exemplo de continue
for i in range(5):
if i == 2:
continue # Pula o 2
print(i)
# Imprime 0, 1, 3, 4
5. for vs while
| Loop | Melhor uso |
|---|---|
| for | Quando você sabe o número de repetições (ex: "repetir 10 vezes", "para cada item da lista"). |
| while | Quando a repetição depende de uma condição externa (ex: "enquanto o jogo não acabar", "enquanto o usuário quiser"). |
💻 Em Prática
Vamos criar uma Tabuada personalizada.
# tabuada.py
numero = int(input("Tabuada de qual número? "))
print(f"--- Tabuada do {numero} ---")
for i in range(1, 11):
resultado = numero * i
print(f"{numero} x {i} = {resultado}")
📝 Resumo
for: Ideal para sequências definidas (range()).while: Ideal para condições lógicas (enquanto...).range(n): Gera números de 0 a n-1.break: Sai do loop.continue: Pula para a próxima iteração.- Cuidado com loops infinitos no
while!
🎯 Próximos Passos
-
Acessar Slides
-
Quiz
-
Exercícios
-
Projeto
Aula 06 - Listas
🎯 Objetivos da Aula
- [ ] Entender a estrutura de dados Listas (
list) - [ ] Acessar itens pelo índice (Indexing)
- [ ] Fatiar listas (Slicing)
- [ ] Adicionar e remover itens (
append,insert,remove,pop) - [ ] Usar funções úteis (
len,max,min,sum)
📚 Conteúdo
1. O que são Listas?
Listas são coleções ordenadas de itens. Elas são mutáveis (podemos alterar) e permitem itens duplicados.
Em Python, delimitamos listas com colchetes [].
# Lista de números
numeros = [1, 2, 3, 4, 5]
# Lista de strings
frutas = ["Maçã", "Banana", "Uva"]
# Lista mista (Python permite!)
mistura = [10, "Olá", True, 3.14]
Visualização da Lista:
2. Acessando Itens (Indexação)
Cada item tem um endereço (índice), começando do ZERO.
frutas = ["Maçã", "Banana", "Uva"]
# Índices: 0 1 2
print(frutas[0]) # Maçã
print(frutas[1]) # Banana
Índices Negativos: Começam do final.
-1é o último item.print(frutas[-1])-> Uva
3. Fatiamento (Slicing)
Podemos pegar um pedaço da lista.
Sintaxe: lista[inicio:fim:passo]
O fim não é incluído!
numeros = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(numeros[0:3]) # [0, 1, 2] (índices 0, 1, 2)
print(numeros[5:]) # [5, 6, 7, 8, 9] (do 5 até o fim)
print(numeros[:4]) # [0, 1, 2, 3] (do início até o 4 - não incluso)
print(numeros[::2]) # [0, 2, 4, 6, 8] (pula de 2 em 2)
4. Modificando Listas
Podemos alterar o valor de um item específico.
5. Adicionando e Removendo Itens
Principais métodos:
-
Adicionar:
lista.append(item): Adiciona ao final.lista.insert(posicao, item): Adiciona em uma posição específica.
-
Remover:
lista.remove(item): Remove a primeira ocorrência do valor.lista.pop(indice): Remove pelo índice e retorna o valor (se vazio, remove o último).
msg = []
msg.append("Olá")
msg.append("Python")
print(msg) # ['Olá', 'Python']
msg.pop() # Remove 'Python'
print(msg) # ['Olá']
6. Funções Úteis
len(lista): Tamanho da lista.sum(lista): Soma dos elementos (se forem números).max(lista): Maior valor.min(lista): Menor valor.item in lista: Verifica se existe (retorna True/False).
💻 Em Prática
Vamos gerenciar uma lista de compras.
# lista_compras.py
compras = []
while True:
print("\n1. Adicionar item")
print("2. Ver lista")
print("3. Sair")
opcao = input("Opção: ")
if opcao == "1":
item = input("Digite o item: ")
compras.append(item)
elif opcao == "2":
print("Sua lista:", compras)
elif opcao == "3":
break
else:
print("Opção inválida!")
📝 Resumo
- Listas são ordenadas e mutáveis.
- Use
[]para criar e[i]para acessar. - Índices começam em
0. append()adiciona,pop()remove.len()diz o tamanho.
🎯 Próximos Passos
-
Acessar Slides
-
Quiz
-
Exercícios
-
Projeto
Aula 07 - Tuplas e Sets
🎯 Objetivos da Aula
- [ ] Entender o que são Tuplas (
tuple) e sua imutabilidade - [ ] Conhecer o Desempacotamento de Tuplas
- [ ] Entender o que são Sets (
set) e sua unicidade - [ ] Realizar operações de conjuntos (União, Interseção, Diferença)
- [ ] Saber quando usar Listas, Tuplas ou Sets
📚 Conteúdo
1. Tuplas (Tuples)
Tuplas são muito parecidas com listas, mas são imutáveis. Uma vez criadas, não podemos adicionar, remover ou alterar itens.
Usamos parênteses () para criar.
# Lista (Mutável)
lista = [1, 2, 3]
lista[0] = 10 # OK
# Tupla (Imutável)
tupla = (1, 2, 3)
# tupla[0] = 10 # ERRO! TypeError
Para que servem? - Dados que não devem mudar (ex: coordenadas GPS, dias da semana). - São mais leves e rápidas na memória que listas.
2. Desempacotamento de Tuplas
Podemos atribuir os valores de uma tupla a várias variáveis de uma vez.
3. Sets (Conjuntos)
Sets são coleções não ordenadas de elementos únicos.
Usamos chaves {}.
# Criando um set
frutas = {"Maçã", "Banana", "Maçã", "Uva"}
print(frutas)
# Saída: {'Banana', 'Maçã', 'Uva'}
# Note que "Maçã" apareceu só uma vez!
Não tem índice: Como não é ordenado, não podemos fazer
frutas[0].
4. Operações com Sets
Sets brilham na matemática dos conjuntos.
- União (
|): Junta tudo (sem repetir). - Interseção (
&): Só o que tem nos dois. - Diferença (
-): O que tem em um mas não no outro.
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
print(A | B) # {1, 2, 3, 4, 5, 6} -> União
print(A & B) # {3, 4} -> Interseção
print(A - B) # {1, 2} -> Diferença (O que tem só em A)
5. Quando usar o quê?
Árvore de Decisão:
- Precisa mudar os dados?
- ✅ Sim → Continue para 2
-
❌ Não → Use Tupla
-
Precisa manter ordem?
- ✅ Sim → Use Lista
- ❌ Não → Use Set
| Estrutura | Ordenada? | Mutável? | Duplicatas? | Sintaxe | Uso Ideal |
|---|---|---|---|---|---|
| Lista | Sim | Sim | Sim | [] |
Coleções gerais, pilhas, filas. |
| Tupla | Sim | Não | Sim | () |
Dados fixos, configurações. |
| Set | Não | Sim | Não | {} |
Garantir unicidade, operações matemáticas. |
💻 Em Prática
Vamos usar um Set para remover itens duplicados de uma lista de convidados bagunçada.
# limpando_lista.py
# Lista com nomes repetidos
convidados_lista = ["Ana", "Carlos", "Ana", "Beto", "Carlos", "Dani"]
print(f"Lista original: {convidados_lista}")
# Converte para set (remove duplicatas automaticamente)
convidados_set = set(convidados_lista)
print(f"Set limpo: {convidados_set}")
# Voltando para lista (se precisar ordenar, por exemplo)
convidados_unicos = list(convidados_set)
convidados_unicos.sort()
print(f"Lista final ordenada: {convidados_unicos}")
📝 Resumo
- Tuplas
(): Imutáveis. Boas para dados constantes. - Sets
{}: Elementos únicos e não ordenados. - Desempacotamento:
a, b = (1, 2)facilita a vida. - Operações de Conjunto:
|(União),&(Interseção),-(Diferença).
🎯 Próximos Passos
-
Acessar Slides
-
Quiz
-
Exercícios
-
Projeto
Aula 08 - Dicionários
🎯 Objetivos da Aula
- [ ] Entender a estrutura de dados Dicionário (
dict) - [ ] Compreender o conceito de Chave-Valor (Key-Value)
- [ ] Acessar, Adicionar e Remover itens
- [ ] Percorrer dicionários com loops
- [ ] Usar métodos úteis (
keys,values,items,get)
📚 Conteúdo
1. O que são Dicionários?
Dicionários são coleções flexíveis onde armazenamos dados em pares Chave: Valor. Pense em um dicionário real: você procura uma palavra (chave) para encontrar seu significado (valor).
Em Python, usamos chaves {} (assim como sets), mas com a sintaxe chave: valor.
Estrutura:
- Chave → Valor
- "nome" → "Ricardo"
- "idade" → 30
# Criando um dicionário
aluno = {
"nome": "Ricardo",
"idade": 30,
"curso": "Python",
"aprovado": True
}
2. Acessando Valores
Diferente das listas (que usam índices 0, 1, 2), dicionários usam as chaves que você definiu.
Erro Comum: Tentar acessar uma chave que não existe gera um
KeyError. Para evitar isso, use o método.get():
print(aluno.get("email")) # None (não dá erro!)
print(aluno.get("email", "Não informado")) # Valor padrão
3. Adicionando e Modificando
É muito simples: basta atribuir um valor a uma chave. Se a chave já existe, atualiza. Se não, cria.
# Modificando
aluno["idade"] = 31
# Adicionando nova chave
aluno["nota"] = 9.5
print(aluno)
# {'nome': 'Ricardo', 'idade': 31, 'curso': 'Python', 'aprovado': True, 'nota': 9.5}
4. Removendo Itens
del dicionario["chave"]: Remove a chave e o valor..pop("chave"): Remove e retorna o valor.
5. Percorrendo Dicionários
Podemos usar loops para ver chaves, valores ou ambos.
pessoa = {"nome": "Ana", "cidade": "SP"}
# Loop pelas chaves (padrão)
for chave in pessoa:
print(chave) # nome, cidade
# Loop pelos valores
for valor in pessoa.values():
print(valor) # Ana, SP
# Loop por ambos (muito útil!)
for chave, valor in pessoa.items():
print(f"{chave}: {valor}")
6. Listas de Dicionários (Estrutura Comum)
É muito comum ter uma lista onde cada item é um dicionário (como um banco de dados).
turma = [
{"nome": "Ana", "nota": 8},
{"nome": "Beto", "nota": 5},
{"nome": "Carla", "nota": 10}
]
for aluno in turma:
print(f"{aluno['nome']} tirou {aluno['nota']}")
💻 Em Prática
Vamos criar um pequeno sistema de cadastro de produtos.
# cadastro_produtos.py
produto = {}
produto["nome"] = input("Nome do produto: ")
produto["preco"] = float(input("Preço: "))
produto["estoque"] = int(input("Quantidade: "))
print("\n--- Resumo ---")
for k, v in produto.items():
print(f"{k.capitalize()}: {v}")
print(f"Valor total em estoque: R$ {produto['preco'] * produto['estoque']:.2f}")
📝 Resumo
- Dicionários usam
{chave: valor}. - Chaves devem ser únicas e imutáveis (strings, números).
.get()é mais seguro que[]para acessar..keys(),.values()e.items()ajudam nos loops.- São a base para lidar com formatos como JSON e APIs.
🎯 Próximos Passos
-
Acessar Slides
-
Quiz
-
Exercícios
-
Projeto
Módulo 3 – Funções e Modularização
Aula 09 - Funções (Parte 1: Básico)
🎯 Objetivos da Aula
- [ ] Entender o conceito de Funções (reutilização de código)
- [ ] Definir funções com
def - [ ] Passar dados para funções (Parâmetros)
- [ ] Receber dados de volta (Retorno com
return) - [ ] Documentar funções com Docstrings
📚 Conteúdo
1. O que são Funções?
Funções são blocos de código que realizam uma tarefa específica e têm um nome. Imagine uma função como uma Mini-Máquina: 1. Entra matéria-prima (Parâmetros). 2. A máquina trabalha [Corpo da função]. 3. Sai um produto final [Retorno].
Fluxo: 1. Entrada: Parâmetros 2. Processamento: Corpo da função 3. Saída: Retorno
Vantagens: - Reutilização: Escreva uma vez, use mil vezes. - Organização: Quebra programas complexos em partes menores. - Manutenção: Se precisar corrigir, corrige em um lugar só.
2. Criando uma Função (def)
Usamos a palavra-chave def.
3. Parâmetros (Entrada)
Podemos passar dados para a função trabalhar.
4. Retorno (return)
Na maioria das vezes, queremos que a função calcule algo e nos devolva o resultado, em vez de apenas imprimir.
def somar(a, b):
resultado = a + b
return resultado
# O valor volta para quem chamou
total = somar(10, 5)
print(f"O total é {total}")
⚠️ Importante: Quando o Python encontra o
return, a função acaba imediatamente (sai dela).
5. Docstrings (Documentação)
Boas práticas! Sempre explique o que sua função faz logo na primeira linha.
def multiplicar(a, b):
"""
Multiplica dois números e retorna o resultado.
"""
return a * b
# No VSCode, se você passar o mouse sobre 'multiplicar', verá essa mensagem!
💻 Em Prática
Vamos refatorar o cálculo de IMC da Aula 02 usando funções.
# imc_funcoes.py
def calcular_imc(peso, altura):
"""Calcula o IMC dado peso (kg) e altura (m)."""
return peso / (altura ** 2)
def classificar_imc(imc):
"""Retorna a classificação baseada no IMC."""
if imc < 18.5:
return "Abaixo do peso"
elif imc < 25:
return "Peso normal"
elif imc < 30:
return "Sobrepeso"
else:
return "Obesidade"
# Programa Principal
p = float(input("Peso (kg): "))
a = float(input("Altura (m): "))
meu_imc = calcular_imc(p, a)
classificacao = classificar_imc(meu_imc)
print(f"Seu IMC é {meu_imc:.2f}: {classificacao}")
📝 Resumo
def nome():define a função.- Parâmetros são variáveis que a função recebe para trabalhar.
returnenvia o resultado de volta e encerra a função.- Docstrings (
"""...""") documentam o código. - Funções tornam o código mais limpo e profissional.
🎯 Próximos Passos
-
Acessar Slides
-
Quiz
-
Exercícios
-
Projeto
Aula 10 - Módulos e Pacotes
🎯 Objetivos da Aula
- [ ] Entender o que são Módulos (arquivos
.py) - [ ] Importar módulos da biblioteca padrão (
math,random,datetime) - [ ] Criar seus próprios módulos
- [ ] Entender a diferença entre
import xefrom x import y - [ ] Conhecer o conceito de Pacotes (pastas)
📚 Conteúdo
1. O que são Módulos?
Um módulo é simplesmente um arquivo com extensão .py contendo código Python (funções, variáveis, classes).
O objetivo é organizar o projeto, separando responsabilidades. Em vez de um arquivo gigante com 1000 linhas, temos 10 arquivos de 100 linhas com nomes claros.
2. Importando Módulos
Usamos a palavra-chave import para trazer funcionalidades de outros arquivos.
Exemplo: Biblioteca Padrão (Built-in) O Python já vem com "baterias inclusas", vários módulos prontos.
3. Variações de Importação
Podemos importar apenas o que precisamos, economizando memória e digitação.
# Importa APENAS a função sqrt
from math import sqrt
raiz = sqrt(81) # Não precisa usar math.sqrt()
print(raiz) # 9.0
Apelidos (Alias): Podemos dar um nome curto para o módulo.
4. Criando seu Próprio Módulo
Imagine que temos um arquivo utilidades.py:
Podemos usar esse código em outro arquivo (main.py):
# Arquivo: main.py
import utilidades
resultado = utilidades.dobro(10)
print(resultado) # 20
print(utilidades.taxa_padrao) # 0.1
5. O que são Pacotes?
Pacotes são pastas que contêm módulos.
Para o Python entender uma pasta como pacote, antigamente era obrigatório ter um arquivo __init__.py (hoje é opcional, mas boa prática).
Estrutura:
graph TD
A[Meu Projeto] --> B[main.py]
A --> C[Pacote Matemática]
C --> D[geometria.py]
C --> E[estatistica.py]
meu_projeto/
├── main.py
└── matematica/ <-- Pacote
├── __init__.py
├── geometria.py <-- Módulo
└── estatistica.py <-- Módulo
Uso:
💻 Em Prática
Vamos criar um "Gerador de Senhas" usando o módulo random e string.
# gerador_senha.py
import random
import string
def gerar_senha(tamanho=8):
# Letras + Números + Pontuação
caracteres = string.ascii_letters + string.digits + string.punctuation
senha = ""
for _ in range(tamanho):
senha += random.choice(caracteres)
return senha
# Testando
print(gerar_senha(12))
📝 Resumo
- Módulo: Arquivo
.py. - Pacote: Pasta com módulos.
import math: Importa tudo (acessa commath.func).from math import sqrt: Importa específico (acessa diretosqrt).import pandas as pd: Importa com apelido.
🎯 Próximos Passos
-
Acessar Slides
-
Quiz
-
Exercícios
-
Projeto
Módulo 4 – Arquivos e Exceções
Aula 11 - Manipulação de Arquivos
🎯 Objetivos da Aula
- [ ] Abrir, ler e fechar arquivos de texto (
open,close) - [ ] Usar o bloco
with(Gerenciador de Contexto) - [ ] Escrever em arquivos (modos
w,a) - [ ] Ler arquivos (modos
r) - [ ] Criar um log simples
📚 Conteúdo
1. Abrindo Arquivos
Para mexer com arquivos, usamos a função open(). Ela precisa de dois argumentos principais:
1. O caminho do arquivo.
2. O modo de abertura (mode).
Modos comuns:
- 'r' (Read): Leitura. (Padrão). Erro se não existir.
- 'w' (Write): Escrita. Apaga tudo se já existir. Cria se não existir.
- 'x' (Exclusive): Cria arquivo. Erro se já existir.
graph TD
A[Abrir Arquivo] --> B{Modo?}
B -- 'r' --> C[Ler]
B -- 'w' --> D[Escrever - Apaga]
B -- 'a' --> E[Anexar no Fim]
# Modo "antigo" (não recomendado)
arquivo = open("nota.txt", "w")
arquivo.write("Olá, arquivo!")
arquivo.close() # Obrigatório fechar!
2. O Bloco with (Recomendado)
Esquecer de fechar o arquivo (close) é um erro comum que causa vazamento de memória.
O with fecha o arquivo automaticamente, mesmo se der erro no meio do caminho.
with open("nota.txt", "w") as arquivo:
arquivo.write("Isso é muito mais seguro.")
# Ao sair daqui, o arquivo fecha sozinho.
3. Escrevendo em Arquivos
O método .write() escreve strings. Se quiser pular linha, use \n.
# Escrevendo (subscreve tudo)
with open("diario.txt", "w", encoding="utf-8") as f:
f.write("Querido diário,\n")
f.write("Hoje aprendi Python.\n")
# Adicionando (append)
with open("diario.txt", "a", encoding="utf-8") as f:
f.write("Foi muito legal.\n")
Dica: Sempre use
encoding="utf-8"para garantir que acentos funcionem corretamente.
4. Lendo Arquivos
Existem várias formas de ler:
.read(): Lê o arquivo inteiro como uma string única..readline(): Lê uma linha de cada vez..readlines(): Retorna uma lista onde cada linha é um item.
with open("diario.txt", "r", encoding="utf-8") as f:
conteudo = f.read()
print(conteudo)
# Lendo linha por linha (ideal para arquivos grandes)
with open("diario.txt", "r", encoding="utf-8") as f:
for linha in f:
print(linha.strip()) # strip remove o \n extra
💻 Em Prática
Vamos criar um sistema de Log que registra quando o usuário entrou no sistema.
# sistema_log.py
from datetime import datetime
def registrar_log(mensagem):
data_hora = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
log = f"[{data_hora}] {mensagem}\n"
with open("sistema.log", "a", encoding="utf-8") as arquivo:
arquivo.write(log)
registrar_log("Sistema iniciado.")
registrar_log("Usuário 'admin' fez login.")
registrar_log("Erro de conexão com banco de dados.")
print("Log registrado com sucesso!")
📝 Resumo
open(arquivo, modo): Abre o arquivo.with open(...) as f:: Garante o fechamento seguro.- Modos:
'r'(ler),'w'(escrever/apagar),'a'(adicionar). - Encoding: Use
utf-8para acentos. f.write(): Escreve string.f.read(): Lê tudo.
🎯 Próximos Passos
-
Acessar Slides
-
Quiz
-
Exercícios
-
Projeto
Aula 12 - Tratamento de Erros e Exceções
🎯 Objetivos da Aula
- [ ] Entender o que são Exceções
- [ ] Usar blocos
tryeexceptpara evitar que o programa quebre - [ ] Conhecer o
else(quando tudo dá certo) efinally(sempre executa) - [ ] Capturar erros específicos (
ValueError,ZeroDivisionError) - [ ] Lançar exceções propositalmente (
raise)
📚 Conteúdo
1. O Problema
Até agora, se o usuário digitasse texto quando pedíamos um número, o programa capotava (Crash 💥).
Erro: ValueError: invalid literal for int() with base 10: 'dez'
2. A Solução: try / except
Podemos "tentar" executar um código perigoso e, se der erro, "capturar" a exceção.
try:
idade = int(input("Idade: "))
print(f"Sua idade é {idade}")
except:
print("Por favor, digite apenas números!")
print("O programa continua...")
3. Capturando Erros Específicos
É má prática usar um except genérico (catch-all), pois pode esconder erros que você não previa. Capture apenas o que espera!
try:
a = int(input("Numerador: "))
b = int(input("Denominador: "))
resultado = a / b
print(f"Resultado: {resultado}")
except ValueError:
print("Erro: Você digitou letras em vez de números.")
except ZeroDivisionError:
print("Erro: Não é possível dividir por zero.")
except Exception as e:
print(f"Erro inesperado: {e}") # Captura qualquer outro erro
4. else e finally
O bloco completo tem 4 partes:
try: Tenta executar.except: Roda se der erro.else: Roda se NÃO der erro.finally: Roda SEMPRE (com ou sem erro).
graph TD
A[Tentar - Try] --> B{Erro?}
B -- Sim --> C[Capturar - Except]
B -- Nao --> D[Else]
C --> E[Finally]
D --> E
try:
arquivo = open("dados.txt", "r")
conteudo = arquivo.read()
except FileNotFoundError:
print("Arquivo não encontrado.")
else:
print("Leitura realizada com sucesso!")
finally:
print("Fechando conexão...")
# Útil para fechar arquivos, conexões de banco, etc.
if 'arquivo' in locals() and not arquivo.closed:
arquivo.close()
5. Lançando Erros (raise)
Você pode criar seus próprios erros quando uma regra de negócio é violada.
def cadastrar_usuario(nome, idade):
if idade < 0:
raise ValueError("A idade não pode ser negativa!")
print(f"Usuário {nome} cadastrado.")
try:
cadastrar_usuario("Ana", -5)
except ValueError as erro:
print(erro) # Imprime "A idade não pode ser negativa!"
💻 Em Prática
Vamos blindar nossa calculadora de divisão.
# divisao_segura.py
def dividir(a, b):
try:
return a / b
except ZeroDivisionError:
return None # Ou lançar um erro personalizado
while True:
try:
n1 = float(input("Digite o n1: "))
n2 = float(input("Digite o n2: "))
res = dividir(n1, n2)
if res is None:
print("Não pode dividir por zero!")
else:
print(f"Divisão: {res}")
break # Sai do loop se der certo
except ValueError:
print("Digite apenas números válidos!")
📝 Resumo
- Exceções são erros que ocorrem durante a execução.
try: Bloco de código arriscado.except: Tratamento do erro.else: Executa se o try funcionar.finally: Executa sempre (limpeza).raise: Força um erro.
🎯 Próximos Passos
-
Acessar Slides
-
Quiz
-
Exercícios
-
Projeto
Módulo 5 – Programação Orientada a Objetos
Aula 13 - Orientação a Objetos (Introdução)
🎯 Objetivos da Aula
- [ ] Entender o paradigma de Orientação a Objetos (POO)
- [ ] Diferenciar Classe de Objeto
- [ ] Criar classes com
class - [ ] Definir atributos (
__init__eself) - [ ] Criar métodos (comportamentos)
📚 Conteúdo
1. O que é POO?
Até agora, programamos de forma Procedural (uma lista de instruções passo a passo) ou Funcional (funções isoladas). A Programação Orientada a Objetos tenta modelar o mundo real. No mundo real, temos Objetos (Carro, Pessoa, Cachorro) que têm Características (Cor, Nome) e Ações (Andar, Falar).
2. Classe vs Objeto
Essa é a distinção mais importante.
- Classe: É o molde, a planta, o contrato. Ela define como o objeto deve ser. (Ex: "Planta da Casa").
- Objeto: É a instância concreta criada a partir da classe. (Ex: "A Casa construída na rua X").
Posso ter 1000 casas (objetos) feitas a partir de uma única planta (classe).
Hierarquia de Classes:
Casa (Classe Base)
├── cor
├── numero
└── abrir_porta()
│
├── Casa_Rua_X (herda de Casa)
└── Casa_Rua_Y (herda de Casa)
3. Criando uma Classe
# Convenção: Nomes de classes usam PascalCase (PrimeiraLetraMaiuscula)
class Cachorro:
pass # Classe vazia por enquanto
4. Atributos e o Método __init__
Atributos são as variáveis internas do objeto (dados).
O método especial __init__ (construtor) roda automaticamente quando criamos um novo objeto. Ele serve para inicializar os atributos.
O misterioso self:
O self representa "este objeto aqui". É como o objeto refere a si mesmo.
class Cachorro:
def __init__(self, nome, raca):
self.nome = nome # Atributo 'nome' recebe o valor do parâmetro 'nome'
self.raca = raca
# Instanciando objetos
dog1 = Cachorro("Rex", "Vira-lata")
dog2 = Cachorro("Luna", "Poodle")
print(dog1.nome) # Rex
print(dog2.nome) # Luna
5. Métodos (Comportamentos)
Métodos são funções dentro de uma classe. Eles definem o que o objeto faz.
class Cachorro:
def __init__(self, nome):
self.nome = nome
def latir(self):
print(f"{self.nome} diz: Au au!")
def comer(self, comida):
print(f"{self.nome} está comendo {comida}.")
dog1 = Cachorro("Rex")
dog1.latir() # Rex diz: Au au!
dog1.comer("Ração") # Rex está comendo Ração.
💻 Em Prática
Vamos modelar uma Conta Bancária simples.
# banco.py
class ContaBancaria:
def __init__(self, titular, saldo_inicial=0):
self.titular = titular
self.saldo = saldo_inicial
def depositar(self, valor):
self.saldo += valor
print(f"Depósito de R$ {valor}. Novo saldo: R$ {self.saldo}")
def sacar(self, valor):
if valor > self.saldo:
print("Saldo insuficiente!")
else:
self.saldo -= valor
print(f"Saque de R$ {valor}. Novo saldo: R$ {self.saldo}")
# Usando
minha_conta = ContaBancaria("Ricardo", 100)
minha_conta.depositar(50) # Saldo: 150
minha_conta.sacar(200) # Erro
minha_conta.sacar(20) # Saldo: 130
📝 Resumo
- Classe: O molde (
class Carro). - Objeto: A peça real (
meu_carro = Carro()). - Atributo: Característica (
self.cor). - Método: Ação (
def acelerar(self)). self: Referência ao próprio objeto.__init__: Método construtor (inicializa os dados).
🎯 Próximos Passos
-
Acessar Slides
-
Quiz
-
Exercícios
-
Projeto
Aula 14 - Orientação a Objetos (Avançado)
🎯 Objetivos da Aula
- [ ] Entender o conceito de Herança (Inheritance)
- [ ] Aplicar Polimorfismo (Polymorphism)
- [ ] Conhecer o Encapsulamento (variáveis "privadas")
- [ ] Sobrescrever métodos (
super())
📚 Conteúdo
1. Herança (Inheritance)
A Herança permite criar uma nova classe baseada em uma já existente. Ela "herda" todos os atributos e métodos da classe pai (Superclasse).
Exemplo:
Um Aluno é uma Pessoa.
Um Professor é uma Pessoa.
Ambos têm nome e idade, mas fazem coisas diferentes.
classDiagram
class Pessoa {
+nome
+idade
}
class Aluno {
+estudar()
}
class Professor {
+ensinar()
}
Pessoa <|-- Aluno
Pessoa <|-- Professor
class Pessoa: # Classe Pai (Superclasse)
def __init__(self, nome, idade):
self.nome = nome
self.idade = idade
def se_apresentar(self):
print(f"Olá, sou {self.nome}.")
class Aluno(Pessoa): # Classe Filha (Subclasse)
def estudar(self):
print(f"{self.nome} está estudando.")
# Testando
p1 = Pessoa("Carlos", 40)
a1 = Aluno("Ana", 20)
a1.se_apresentar() # Herdou de Pessoa!
a1.estudar() # Método exclusivo de Aluno
# p1.estudar() # ERRO! Pessoa não estuda (genericamente)
2. Polimorfismo
Polimorfismo significa "muitas formas". Classes filhos podem ter o mesmo método da classe pai, mas com comportamento diferente.
class Animal:
def fazer_som(self):
print("Som genérico")
class Cachorro(Animal):
def fazer_som(self): # Sobrescrita (Override)
print("Au au!")
class Gato(Animal):
def fazer_som(self):
print("Miau!")
# A mágica do Polimorfismo
animais = [Cachorro(), Gato(), Animal()]
for bicho in animais:
bicho.fazer_som()
# O Python sabe qual método chamar para cada tipo!
3. O Método super()
Às vezes, queremos usar a lógica da classe pai e ADICIONAR algo a mais.
class Aluno(Pessoa):
def __init__(self, nome, idade, matricula):
# Chama o construtor da Pessoa para cuidar do nome e idade
super().__init__(nome, idade)
self.matricula = matricula # Atributo exclusivo
def se_apresentar(self):
super().se_apresentar() # Chama o original
print(f"Minha matrícula é {self.matricula}")
4. Encapsulamento (Privado vs Público)
Em Python, não existem atributos verdadeiramente "privados" (como em Java), mas temos uma convenção forte:
self.nome: Público. Pode ser acessado de qualquer lugar.self._saldo: Protegido. Só deve ser acessado dentro da classe ou subclasses. (Aviso aos programadores: "Cuidado").self.__senha: Privado. O Python muda o nome internamente para dificultar o acesso direto.
class Conta:
def __init__(self, saldo):
self.__saldo = saldo # Privado
def get_saldo(self): # Getter
return self.__saldo
c = Conta(100)
# print(c.__saldo) # ERRO! Não existe (diretamente)
print(c.get_saldo()) # 100 (Acesso controlado)
💻 Em Prática
Vamos refatorar o sistema bancário com Herança.
class Conta:
def __init__(self, titular):
self.titular = titular
self.saldo = 0
def depositar(self, valor):
self.saldo += valor
class ContaCorrente(Conta):
def sacar(self, valor):
if valor <= self.saldo:
self.saldo -= valor
print("Saque realizado.")
else:
print("Saldo insuficiente.")
class ContaPoupanca(Conta):
def render_juros(self):
self.saldo *= 1.05 # Rende 5%
print("Juros aplicados.")
📝 Resumo
- Herança (
class Filho(Pai):): Reutiliza código. - Polimorfismo: Métodos com mesmo nome, comportamentos diferentes.
super(): Acessa a classe pai.- Encapsulamento: Protege dados sensíveis (
__var).
🎯 Próximos Passos
-
Acessar Slides
-
Quiz
-
Exercícios
-
Projeto
Módulo 6 – Ecossistema
Aula 15 - APIs, JSON e Requisições
🎯 Objetivos da Aula
- [ ] Entender o que é uma API (Application Programming Interface)
- [ ] Conhecer o formato JSON (JavaScript Object Notation)
- [ ] Fazer requisições HTTP (
GET) para consumir dados da internet - [ ] Usar a biblioteca
requests
📚 Conteúdo
1. O que é uma API?
API é como um garçom. - Você (Cliente): Faz o pedido ("Quero a previsão do tempo"). - API (Garçom): Leva o pedido até a cozinha (Servidor). - Servidor (Cozinha): Prepara os dados. - API: Traz a resposta para você.
sequenceDiagram
participant Cliente
participant API
participant Servidor
Cliente->>API: Pedido (Request)
API->>Servidor: Repassa Pedido
Servidor->>API: Resposta (Dados)
API->>Cliente: Entrega Resposta (JSON)
Grandes sites (Google, Facebook, Twitter, Previsão do Tempo) oferecem APIs para que nossos programas possam interagir com eles.
2. O Formato JSON
Como os sistemas conversam? Eles usam JSON, que é MUITO parecido com os Dicionários do Python.
Em Python, usamos a biblioteca json para traduzir:
- json.dumps(): Dicionário -> JSON (String).
- json.loads(): JSON (String) -> Dicionário.
3. A biblioteca requests
O Python não vem com requests instalado por padrão, mas é a biblioteca mais famosa do mundo. (Vamos assumir que está instalada ou mostrar como usar urllib nativa se preferir, mas requests é o padrão de mercado).
Nota: Se estivéssemos em um ambiente local, rodaríamos pip install requests.
import requests
# Fazendo um pedido (GET) para uma API pública
resposta = requests.get("https://viacep.com.br/ws/01001000/json/")
# Verificando se deu certo (Status 200 = OK)
if resposta.status_code == 200:
dados = resposta.json() # Converte JSON para Dicionário
print(dados['logradouro']) # Praça da Sé
else:
print("Erro na requisição")
4. Métodos HTTP
- GET: Buscar dados (Leitura).
- POST: Enviar dados (Criar).
- PUT/PATCH: Atualizar dados.
- DELETE: Apagar dados.
Hoje focaremos no GET.
💻 Em Prática
Vamos criar um Consultor de CEP usando a API gratuita ViaCEP.
# consulta_cep.py
import requests
def buscar_cep(cep):
# API do ViaCEP
url = f"https://viacep.com.br/ws/{cep}/json/"
try:
response = requests.get(url)
response.raise_for_status() # Lança erro se status != 200
dados = response.json()
if "erro" in dados:
return None
return dados
except requests.exceptions.RequestException as e:
print(f"Erro de conexão: {e}")
return None
# Programa Principal
cep_input = input("Digite o CEP (apenas números): ")
resultado = buscar_cep(cep_input)
if resultado:
print(f"Endereço: {resultado['logradouro']}")
print(f"Bairro: {resultado['bairro']}")
print(f"Cidade: {resultado['localidade']} - {resultado['uf']}")
else:
print("CEP não encontrado ou inválido.")
📝 Resumo
- API: Ponte entre sistemas.
- JSON: Formato padrão de troca de dados (parece
dict). - Requests: Biblioteca para acessar a web.
- GET: Método para "pegar" dados.
🎯 Próximos Passos
-
Acessar Slides
-
Quiz
-
Exercícios
-
Projeto
Aula 16 - Testes e TDD (Test Driven Development)
🎯 Objetivos da Aula
- [ ] Compreender a importância dos Testes Automatizados
- [ ] Conhecer a filosofia TDD (Desenvolvimento Guiado por Testes)
- [ ] Usar a biblioteca
pytest(padrão de mercado) - [ ] Estruturar um projeto Python profissional
📚 Conteúdo
1. Por que testar?
Imagine que você consertou um erro no código, mas sem querer quebrou outra parte que estava funcionando. Isso se chama Regressão. Testes automatizados garantem que seu código continua funcionando como esperado, mesmo após alterações.
"Código sem testes é código legado." - Michael Feathers
2. O que é TDD?
TDD (Test Driven Development) é uma técnica onde você escreve o teste ANTES do código. O ciclo do TDD (Red-Green-Refactor):
- 🔴 Red: Escreva um teste que falha (porque a funcionalidade ainda não existe).
- 🟢 Green: Escreva o código mínimo necessário para o teste passar.
- 🔵 Refactor: Melhore o código (limpeza), mantendo o teste passando.
graph TD
A[Red: Teste Falha] --> B[Green: Código Passa]
B --> C[Refactor: Melhorar Código]
C --> A
3. A biblioteca pytest
O Python tem o unittest nativo, mas o mundo usa pytest porque é mais simples e poderoso.
Ele procura automaticamente arquivos que começam com test_ ou terminam com _test.py.
Para rodar, basta digitar no terminal:
pytest
4. Escrevendo Tests Profissionais
Um teste geralmente segue o padrão AAA: - Arrange (Preparar): Cria os objetos e dados necessários. - Act (Agir): Chama a função que queremos testar. - Assert (Verificar): Confere se o resultado é o esperado.
def test_deve_adicionar_item_na_lista():
# Arrange
lista = []
item = "Arroz"
# Act
lista.append(item)
# Assert
assert len(lista) == 1
assert lista[0] == "Arroz"
5. Estrutura de Projeto
Organização é tudo. Um projeto Python moderno se parece com isso:
meu_projeto/
├── src/ <-- Código fonte (source)
│ ├── __init__.py
│ └── main.py
├── tests/ <-- Testes
│ ├── __init__.py
│ └── test_main.py
├── README.md <-- Documentação
└── pyproject.toml <-- Configurações e Dependências
💻 Em Prática (Mini TDD)
Vamos criar uma função que retorna o dobro, usando TDD.
Passo 1 (Red): Criar o teste test_dobro.py.
app.py nem existe.
Passo 2 (Green): Criar app.py com o mínimo para passar.
pytest e passa!
Passo 3 (Refactor): Melhorar se necessário (neste caso, já está simples).
📝 Resumo
- TDD: Teste antes do código.
- Ciclo: Vermelho -> Verde -> Refatorar.
- Pytest: Ferramenta poderosa e simples.
- Assert: O comando que valida se é Verdade ou Falso.
- Confiança: Testes dão segurança para mudar o código.
🎯 Próximos Passos
-
Acessar Slides
-
Quiz
-
Exercícios
-
Projeto Final
Materiais
Materiais
Bem-vindo à seção de materiais complementares do curso. Aqui você encontra recursos adicionais para apoiar seus estudos.
-
- Acesse os slides de todas as aulas para revisão.
-
- Pratique com listas de exercícios para cada módulo.
-
- Teste seus conhecimentos com quizzes interativos.
-
- Desenvolva projetos práticos para aplicar o que aprendeu.
-
- Guias de instalação e configuração do ambiente.
Slides
Slides das Aulas
Aqui você encontra os slides de apresentação de cada aula.
-
Módulo 1 – Fundamentos
-
Módulo 2 – Estruturas de Controle
-
Módulo 3 – Funções
-
Módulo 4 – Arquivos e Exceções
-
Módulo 5 – POO
-
Módulo 6 – Ecossistema
Como Usar
- Os slides usam RevealJS para apresentação interativa
- Clique nos links acima para visualizar em tela cheia
- Use as setas do teclado para navegar entre os slides
Exercícios
Exercícios
Bem-vindo à seção de exercícios! Aqui você encontra listas de exercícios práticos para cada aula do curso.
-
Módulo 1 – Fundamentos
-
Módulo 2 – Estruturas de Controle
-
Módulo 3 – Funções
-
Módulo 4 – Arquivos e Exceções
-
Módulo 5 – POO
-
Módulo 6 – Ecossistema
Dicas
- Tente resolver os exercícios sem consultar a solução
- Pratique regularmente para fixar o conteúdo
- Não tenha medo de errar, faz parte do aprendizado!
Exercícios - Aula 01
1. Olá, você!
Crie um programa que imprima na tela a frase: "Olá, meu nome é [Seu Nome] e eu estou aprendendo Python!".
2. Etiqueta
Escreva um programa que imprima seu endereço completo em múltiplas linhas, como se fosse uma etiqueta de correspondência: Exemplo:
Destinatário: João Silva
Rua das Flores, 123
Bairro: Jardim Python
CEP: 12345-678
Cidade: São Paulo - SP
3. Desenho ASCII
Use múltiplos comandos print() para desenhar uma forma geométrica ou um objeto simples usando caracteres.
Exemplo (Quadrado):
4. Letra de Música
Escolha o refrão de sua música favorita e escreva um programa que o imprima na tela, respeitando as quebras de linha.
5. Receita de Bolo (Algoritmo)
Escreva, usando comentários (#), os passos (algoritmo) para fazer um sanduíche.
Depois, use print() para exibir apenas a frase "Sanduíche pronto!".
Exercícios - Aula 02
1. O Reformador de Frases
Escreva um programa que peça ao usuário para digitar uma frase qualquer. O programa deve imprimir a mesma frase 3 vezes seguidas.
Exemplo:
Entrada: Olá
Saída: OláOláOlá
2. Calculadora de Idade Futura
Peça o nome e a idade atual de uma pessoa. Calcule e exiba quantos anos ela terá daqui a 10 anos. Exemplo: "Maria, daqui a 10 anos você terá 35 anos."
3. Média Simples
Peça duas notas (números decimais) ao aluno. Calcule a média simples e exiba o resultado. Lembre-se: Média = (Nota1 + Nota2) / 2
4. Conversor de Medidas
Peça ao usuário uma distância em Metros. Converta e exiba essa distância em: - Centímetros (x100) - Milímetros (x1000)
5. Salário Líquido (Simples)
Peça o valor do salário por hora e o número de horas trabalhadas no mês. Calcule o salário total.
Depois, descontar 10% de impostos e exibir o salário líquido final.
Dica: Salário Líquido = Salário Bruto * 0.90 ou Salário Bruto - (Salário Bruto * 0.10).
Exercícios - Aula 03
1. Par ou Ímpar?
Peça um número inteiro ao usuário e diga se ele é par ou ímpar.
(Dica: Use o operador módulo %)
2. Aprovação Escolar
Peça ao usuário duas notas (0 a 10) e a frequência (0 a 100%).
Para ser aprovado, o aluno precisa ter:
- Média maior ou igual a 7.0
- E frequência maior ou igual a 75%
Imprima True (Aprovado) ou False (Reprovado).
3. Login Simples
Defina uma senha padrão no código (ex: senha_secreta = "1234").
Peça ao usuário para digitar a senha.
Imprima True se a senha for igual a secreta, ou False caso contrário.
4. Calculadora de Desconto Progressiva
Peça o valor de uma compra.
- Se o valor for maior que R$ 100,00 E menor que R$ 500,00, o desconto é 10%.
- Se o valor for maior ou igual a R$ 500,00, o desconto é 20%.
Caso contrário, sem desconto.
Imprima o valor do desconto (Use apenas lógica, sem if se conseguir, ou use multiplicação por booleano. Se não, apenas calcule e mostre as condições).
Obs: Como ainda não vimos if/else formalmente, você pode tentar resolver imprimindo o resultado das comparações ou apenas calculando os valores possíveis.
Alternativa: Peça o valor e imprima "Tem desconto de 10%? [True/False]" e "Tem desconto de 20%? [True/False]".
5. Comparador de Números
Peça dois números, A e B. Imprima: - "A é maior que B?" [True/False] - "A é igual a B?" [True/False] - "A é menor que B?" [True/False]
Exercícios - Aula 04
1. Positivo, Negativo ou Zero?
Peça um número ao usuário e diga se ele é Positivo, Negativo ou Zero.
2. Par ou Ímpar (com if)
Peça um número e diga se é par ou ímpar. (Dica: Se o resto da divisão por 2 for 0, é par).
3. Maior de dois números
Peça dois números e diga qual é o maior, ou se são iguais.
4. Classificação de Idade
Peça a idade e classifique: - 0 a 12: Criança - 13 a 17: Adolescente - 18 a 59: Adulto - 60+: Idoso
5. Simulador de Empréstimo
Para aprovar um empréstimo bancário, peça: - O valor da casa - O salário do comprador - Em quantos anos vai pagar
Calcule o valor da prestação mensal (Valor Casa / Meses). Se a prestação for maior que 30% do salário, imprima "Empréstimo negado". Caso contrário, imprima "Empréstimo aprovado" e o valor da prestação.
Exercícios - Aula 05
1. Contagem Regressiva
Faça um programa que mostre uma contagem regressiva de 10 até 0 e imprima "FOGO!" no final.
2. Tabuada Completa
Peça um número e mostre a tabuada dele de 1 a 10 usando um loop for.
3. Soma de 1 a 100
Calcule e mostre a soma de todos os números de 1 a 100 (1+2+3+...+100).
4. Números Pares
Imprima todos os números pares entre 1 e 50.
Tente fazer isso de duas formas:
- Usando if dentro do loop.
- Usando o passo do range (ex: range(0, 50, 2)).
5. Validação de Dados (Loop Infinito)
Peça para o usuário digitar o sexo ('M' ou 'F'). Enquanto ele digitar algo diferente, continue pedindo: "Inválido, digite novamente:". Quando digitar certo, imprima "Obrigado!".
Exercícios - Aula 06
1. Soma da Lista
Crie uma lista com 5 números inteiros. Calcule e imprima a soma de todos eles.
(Tente usar um loop for para somar, e depois compare com a função sum())
2. Maior e Menor
Peça ao usuário para digitar 5 números e armazene-os em uma lista. No final, imprima o Maior número e o Menor número digitados.
3. Apenas Pares
Dada a lista numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10].
Crie uma nova lista chamada pares contendo apenas os números pares da lista original.
4. Inversão
Peça 5 nomes ao usuário. Armazene em uma lista. Imprima a lista na ordem inversa à digitada.
5. Média de Notas
Peça notas de alunos até que o usuário digite -1. Armazene as notas em uma lista. Calcule e mostre: - Quantas notas foram lançadas. - A média das notas. - Aprovados (notas >= 7).
Exercícios - Aula 07
1. Dias da Semana
Crie uma TUPLA com os dias da semana ("Domingo", "Segunda", ...). Peça ao usuário um número de 1 a 7 e imprima o dia correspondente. (Lembre-se que o índice começa em 0, então 1 deve ser domingo).
2. Pódio Olímpico
Crie uma tupla com os 3 primeiros colocados de uma corrida: podio = ("Ana", "Bia", "Carol").
Faça o desempacotamento dessas variáveis para primeiro, segundo e terceiro.
Imprima:
- Ouro: Ana
- Prata: Bia
- Bronze: Carol
3. Convidados Únicos
O usuário vai digitar nomes de convidados para uma festa. Armazene em um SET para evitar nomes repetidos. O programa para de pedir quando digitar "fim". No final, mostre quantos convidados únicos (tamanho do set) e a lista de nomes.
4. Compras em Comum
Temos duas listas de compras:
lista1 = {"Arroz", "Feijão", "Carne", "Macarrão"}
lista2 = {"Carne", "Cerveja", "Carvão", "Arroz"}
Use operações de conjunto para descobrir:
1. Itens que estão nas duas listas (Interseção).
2. Itens que estão apenas na lista 1 (Diferença).
3. A lista de compras completa sem repetições (União).
5. Análise de Texto
Peça uma frase ao usuário. Converta a frase em um set de caracteres para descobrir quantas letras diferentes foram usadas. Exemplo: "banana" -> {'b', 'a', 'n'} -> 3 letras únicas.
Exercícios - Aula 08
1. Dicionário Simples
Crie um dicionário representando um livro, com chaves para titulo, autor e ano.
Imprima cada informação formatada: "O livro X foi escrito por Y em Z".
2. Contagem de Caracteres
Peça uma frase ao usuário.
Crie um programa que conte quantas vezes cada caractere aparece na frase e guarde em um dicionário.
Exemplo: "banana" -> {'b': 1, 'a': 3, 'n': 2}.
3. Boletim Escolar
Crie um dicionário vazio aluno.
Peça ao usuário nome e media. Adicione ao dicionário.
Se a média for >= 7, adicione a chave situacao com valor "Aprovado", senão "Reprovado".
Mostre o dicionário final.
4. Cadastro de Pessoas
Crie uma lista vazia pessoas.
Faça um loop que peça Nome e Idade. Armazene esses dados em um dicionário e adicione o dicionário na lista pessoas.
O loop para quando o nome for "sair".
No final, imprima a lista completa de pessoas cadastradas.
5. Tradutor Simples
Crie um dicionário com 5 palavras em inglês e suas traduções (ex: {'dog': 'cachorro', 'cat': 'gato'}).
Peça para o usuário digitar uma palavra em inglês.
Se a palavra existir no dicionário, mostre a tradução. Se não, mostre "Palavra não encontrada".
Exercícios - Aula 09
1. Saudação
Crie uma função saudar(nome, periodo) que receba um nome e um período (manhã, tarde, noite) e imprima "Bom dia/tarde/noite, [nome]!".
2. Calculadora Simples (Retorno)
Crie 4 funções: somar, subtrair, multiplicar, dividir.
Cada uma deve receber dois números e retornar o resultado.
Teste as funções imprimindo os retornos.
3. É Par?
Crie uma função eh_par(numero) que retorne True se o número for par e False se for ímpar.
(Dica: use o operador %)
4. Maior de Três
Crie uma função maior_de_tres(a, b, c) que retorne o maior dos três números passados.
(Tente não usar a função max() do Python, use if/else para treinar a lógica)
5. Contador de Vogais
Crie uma função contar_vogais(texto) que receba uma string e retorne a quantidade de vogais nela.
Exercícios - Aula 10
1. Módulo Math
Importe o módulo math.
- Calcule a raiz quadrada de 144.
- Calcule o fatorial de 5 (math.factorial).
- Imprima o valor de Pi (math.pi).
2. Dados Viciados (Random)
Importe o módulo random.
Simule o lançamento de um dado de 6 faces (1 a 6) por 10 vezes.
Armazene os resultados em uma lista.
3. Data e Hora
Importe o módulo datetime.
Imprima a data e hora atuais.
Tente formatar a data para "DD/MM/AAAA" (Pesquise sobre .strftime).
4. Seu Primeiro Módulo
- Crie um arquivo chamado
operacoes.py(simbolicamente). - Nele, imagine que define funções
soma(a,b)esubtracao(a,b). - Em outro arquivo (o principal), mostre como você importaria e usaria essas funções. (Como não estamos rodando arquivos reais, escreva o código como resposta).
5. Sorteio de Alunos
Crie uma lista com 5 nomes de alunos.
Use random.choice para escolher um aluno para apagar o quadro.
Use random.shuffle para misturar a ordem de apresentação dos trabalhos.
Mostre o escolhido e a lista misturada.
Exercícios - Aula 11
1. Meu Primeiro Arquivo
Crie um programa que escreva seu nome e sua idade em um arquivo chamado meus_dados.txt.
2. Leitor de Texto
Crie um arquivo frase.txt manualmente (pode ser pelo bloco de notas) com uma frase qualquer.
Faça um programa Python que leia esse arquivo e imprima a frase na tela.
3. Tabuada em Arquivo
Peça um número ao usuário.
Gere a tabuada desse número e salve em um arquivo chamado tabuada.txt.
Exemplo do arquivo:
4. Contador de Linhas
Crie um programa que leia um arquivo de texto qualquer e diga quantas linhas ele possui.
5. Cópia de Arquivo
Crie um programa que leia o conteúdo de origem.txt e escreva exatamente o mesmo conteúdo em destino.txt (fazendo um backup).
Exercícios - Aula 12
1. Divisão Segura
Peça dois números ao usuário e faça a divisão.
Trate os erros:
- ValueError (se não digitar números).
- ZeroDivisionError (se dividir por zero).
Mostre o resultado ou a mensagem de erro apropriada.
2. Lista Segura
Crie uma lista com 3 nomes: lista = ["Ana", "Bia", "Carol"].
Peça ao usuário um índice (número inteiro).
Imprima o nome correspondente.
Trate os erros:
- ValueError (se não digitar inteiro).
- IndexError (se o índice não existir na lista).
3. Dicionário Seguro
Crie um dicionário com alguns produtos e preços.
Peça ao usuário o nome de um produto.
Tente imprimir o preço.
Se o produto não existir (KeyError), avise o usuário e mostre os produtos disponíveis.
4. Validador de Senha
Crie uma função verificar_senha(senha) que:
- Lance uma exceção ValueError se a senha tiver menos de 6 caracteres.
- Lance uma exceção ValueError se a senha for apenas números (.isdigit()).
Use try/except para testar sua função com senhas válidas e inválidas.
5. Arquivo Fantasma
Tente abrir um arquivo chamado nao_existe.txt para leitura.
Capture o erro FileNotFoundError e imprima "Arquivo não encontrado, criando um novo...".
No bloco except, crie o arquivo vazio.
Exercícios - Aula 13
1. Classe Pessoa
Crie uma classe Pessoa com os atributos nome e idade.
Crie um método se_apresentar() que imprime: "Olá, sou [nome] e tenho [idade] anos."
Instancie 2 pessoas e chame o método para cada uma.
2. Classe Retângulo
Crie uma classe Retangulo com atributos largura e altura.
Crie um método calcular_area() que retorna a área (largura * altura).
Use o input para pedir os valores ao usuário, crie o objeto e mostre a área.
3. Classe Aluno
Crie uma classe Aluno com nome e nota.
Crie um método foi_aprovado() que retorna True se a nota for >= 7 e False caso contrário.
4. Contador
Crie uma classe Contador com um atributo valor inicializado em 0.
Métodos:
- incrementar(): Aumenta o valor em 1.
- resetar(): Volta o valor para 0.
Teste criando um contador e chamando os métodos.
5. Carro Turbinado
Recrie a classe Carro do exemplo da aula, mas adicione um atributo velocidade que começa em 0.
- Método acelerar() aumenta velocidade em 10.
- Método frear() diminui velocidade em 10 (não pode ficar negativo).
- Método ver_painel() mostra a velocidade atual.
Exercícios - Aula 14
1. Animais
Crie uma classe Animal com método falar() que imprime "Som genérico".
Crie classes Cachorro e Gato que herdam de Animal e sobrescrevem falar() para "Au au" e "Miau".
Crie uma lista com um cachorro e um gato, percorra a lista e faça-os falar.
2. Formas Geométricas (Polimorfismo)
Crie uma classe Forma com método area() que retorna 0.
Crie Quadrado(Forma) com atributo lado e area que retorna lado * lado.
Crie Circulo(Forma) com atributo raio e area que retorna 3.14 * raio * raio.
Teste calculando a área de ambos.
3. Funcionários (Herança + Super)
Classe Funcionario tem nome e salario.
Classe Gerente herda de Funcionario e tem atributo extra senha.
Use super().__init__ para inicializar o Gerente.
Sobrescreva um método calcular_bonus():
- Funcionario ganha 10% do salário.
- Gerente ganha 20% do salário.
4. Conta Privada
Crie uma classe Cofre com atributo privado __segredo (string).
Tente acessar cofre.__segredo diretamente e veja o erro.
Crie um método público abrir_cofre(senha) que, se a senha for "1234", retorna o segredo.
5. Veículos
Classe Veiculo (marca, modelo).
Carro herda de Veiculo e tem portas.
Moto herda de Veiculo e tem cilindradas.
Crie um método detalhes() em cada uma que aproveita o detalhes() do pai (com super) e adiciona a informação extra.
Exercícios - Aula 15
1. Instalando Requests
(Exercício de configuração)
Abra seu terminal e execute: pip install requests (ou verifique se já está instalado).
Crie um arquivo .py e faça import requests para ver se não dá erro.
2. Consumindo uma API Pública
Use a URL https://jsonplaceholder.typicode.com/todos/1.
Faça um GET e imprima o título (title) da tarefa que retornou.
3. Lista de Usuários
Use a URL https://jsonplaceholder.typicode.com/users.
Isso retorna uma LISTA de dicionários.
Faça um loop e imprima o name e o email de cada usuário.
4. Cotação de Moedas
A API https://awesomeapi.com.br/last/USD-BRL retorna a cotação do Dólar.
Faça um programa que acessa essa API e diz quanto está valendo 1 Dólar em Reais (bid ou ask).
5. Tratamento de Erro
Tente acessar uma URL que não existe (ex: https://google.com/naoexiste).
Use try/except para capturar o erro e imprimir "Página não encontrada" em vez de deixar o programa explodir.
Exercícios - Aula 16
1. Instalando Pytest
Instale o pytest (pip install pytest) se ainda não tiver.
Crie um arquivo test_exemplo.py com um teste simples que passa (assert 1 + 1 == 2) e outro que falha (assert 1 + 1 == 3).
Rode pytest no terminal e veja a saída colorida.
2. Testando Funções Puras
Crie um arquivo matematica.py com funções soma, subtracao, multiplicacao.
Crie um arquivo test_matematica.py e escreva pelo menos um teste para cada função.
3. Testando Exceções
Crie uma função divisao(a, b) que lança ValueError se b == 0.
No teste, use pytest.raises(ValueError) (pesquise como usar) para garantir que o erro é lançado corretamente.
4. TDD: Palíndromo
Escreva PRIMEIRO o teste para uma função eh_palindromo(texto).
- "ana" -> True
- "caio" -> False
- "Arara" -> True (deve ignorar maiúsculas)
Depois, implemente a função até os testes passarem.
5. TDD: Validador de Email Simples
Escreva testes para validar_email(email):
- Deve ter "@"
- Deve ter "." depois do "@"
- Não pode ter espaços
Implemente a função para passar nos testes.
Quizzes
Quizzes Interativos
Teste seus conhecimentos com quizzes interativos para cada aula!
-
Módulo 1 – Fundamentos
-
Módulo 2 – Estruturas de Controle
-
Módulo 3 – Funções
-
Módulo 4 – Arquivos e Exceções
-
Módulo 5 – POO
-
Módulo 6 – Ecossistema
🎯 Como Usar
- Responda todas as perguntas antes de verificar o resultado
- Use os quizzes para revisar o conteúdo das aulas
- Refaça os quizzes até acertar 100%!
Quiz 01 - Introdução
Quiz 02 - Introdução
Quiz 03 - Introdução
Quiz 04 - Introdução
Quiz 05 - Introdução
Quiz 06 - Introdução
Quiz 07 - Introdução
Quiz 08 - Introdução
Quiz 09 - Introdução
Quiz 10 - Introdução
Quiz 11 - Introdução
Quiz 12 - Introdução
Quiz 13 - Introdução
Quiz 14 - Introdução
Quiz 15 - Introdução
Quiz 16 - Introdução
Projetos
Projetos Práticos
Desenvolva projetos práticos para aplicar o que você aprendeu!
-
Módulo 1 – Fundamentos
-
Módulo 2 – Estruturas de Controle
-
Módulo 3 – Funções
-
Módulo 4 – Arquivos e Exceções
-
Módulo 5 – POO
-
Módulo 6 – Ecossistema
🚀 Dicas para os Projetos
- Leia o enunciado com atenção - Entenda o que é pedido
- Planeje antes de codificar - Pense na estrutura
- Teste incrementalmente - Não espere terminar tudo para testar
- Refatore seu código - Melhore a qualidade após funcionar
- Compartilhe seus projetos - Mostre o que você criou!
Projeto 01 - Cartão de Visitas Digital
🎯 Objetivo
Criar um script Python que exiba um "Cartão de Visitas" formatado no terminal com suas informações profissionais.
📋 Requisitos
- O cartão deve ter uma "borda" feita com caracteres (ex:
*,-,|). - Deve conter:
- Seu Nome Completo
- Seu Cargo (ex: Estudante de Python)
- Seu Email
- Um link (GitHub ou LinkedIn)
- Use apenas a função
print().
💡 Exemplo de Saída
****************************************
* *
* RICARDO SILVA *
* Estudante de Python *
* *
* 📧 email: ricardo@example.com *
* 🐱 github: github.com/ricardo *
* *
****************************************
👣 Passo a Passo
- Crie um arquivo chamado
projeto01.py. - Planeje o desenho no papel ou bloco de notas.
- Escreva os
print()linha por linha. - Teste e ajuste o alinhamento (espaços) até ficar bonito.
- Execute no terminal para ver o resultado final.
🚀 Desafio Extra
Tente usar caracteres diferentes para a borda ou mudar o formato do cartão!
Projeto 02 - Calculadora de IMC
🎯 Objetivo
Criar um programa que peça as informações físicas do usuário e calcule seu Índice de Massa Corporal (IMC).
📋 Requisitos
O programa deve solicitar: 1. O nome do usuário. 2. O peso (em kg). Permita números quebrados (ex: 70.5). 3. A altura (em metros). Permita números quebrados (ex: 1.75).
O cálculo do IMC é: $$ IMC = \frac{Peso}{Altura^2} $$
💡 Saída Esperada
O programa deve exibir uma mensagem amigável com o resultado arredondado (opcional: pesquise sobre round()).
Exemplo:
Calculadora de IMC
------------------
Qual seu nome? Carlos
Qual seu peso (kg)? 80
Qual sua altura (m)? 1.80
Olá, Carlos!
Seu IMC é: 24.69
👣 Passo a Passo
- Use
input()para ler os dados. - Converta (
float()) os dados de peso e altura imediatamente. - Aplique a fórmula matemática. Lembre-se que "ao quadrado" é
** 2. - Use
print()com f-strings para mostrar o resultado formatado. - (Extra) Tente formatar o número para mostrar apenas 2 casas decimais:
{imc:.2f}.
🚀 Desafio Extra
Pesquise como usar a tabela de classificação do IMC e exiba (apenas visualmente no print, sem condicionais ainda) a tabela para o usuário comparar o resultado dele.
Projeto 03 - Calculadora de Gorjeta
🎯 Objetivo
Criar um programa que ajude a dividir a conta de um restaurante, calculando a gorjeta e o valor por pessoa.
📋 Requisitos
- Solicitar o valor total da conta.
- Solicitar a porcentagem da gorjeta que o usuário quer dar (ex: 10, 12, 15).
- Solicitar quantas pessoas vão dividir a conta.
- Calcular:
- Valor da gorjeta.
- Valor total (conta + gorjeta).
- Valor para cada pessoa.
- Exibir os resultados formatados (com 2 casas decimais).
💡 Saída Esperada
Bem-vindo à Calculadora de Gorjeta!
-----------------------------------
Valor total da conta: R$ 150.00
Porcentagem da gorjeta: 10
Quantas pessoas: 3
Gorjeta: R$ 15.00
Total com gorjeta: R$ 165.00
Cada um paga: R$ 55.00
👣 Passo a Passo
input()para ler valor, porcentagem e pessoas.- Converter inputs (
floatpara dinheiro,intpara pessoas). - Cálculos:
valor_gorjeta = total * (porcentagem / 100)total_final = total + valor_gorjetapor_pessoa = total_final / pessoas
print()com f-strings e formatação:.2f.
🚀 Desafio Extra
Garanta que, mesmo que a conta dê um número quebrado na divisão (ex: 33.33333), o valor exibido seja amigável (arredondado).
Projeto 04 - Pedra, Papel e Tesoura 👊✋✌️
🎯 Objetivo
Criar o clássico jogo "Jokenpô" (Pedra, Papel e Tesoura) para jogar contra o computador.
📋 Requisitos
- O usuário escolhe sua jogada (Pedra, Papel ou Tesoura).
- O computador escolhe aleatoriamente (vamos ensinar como fazer isso).
- O programa compara as escolhas e declara o vencedor.
Regras: - Pedra ganha de Tesoura - Tesoura ganha de Papel - Papel ganha de Pedra - Iguais = Empate
💡 Como o computador escolhe?
Você vai precisar importar a biblioteca random.
import random
opcoes = ["Pedra", "Papel", "Tesoura"]
computador = random.choice(opcoes) # Escolhe um aleatório da lista
👣 Passo a Passo
- Importe
random. - Peça a jogada do usuário (
input). Dica: Converta para letra minúscula ou tratada para facilitar. - Gere a jogada do computador.
- Use
if/elif/elsepara comparar:- Se forem iguais -> Empate.
- Se usuário == Pedra e computador == Tesoura -> Usuário ganha.
- (...) Liste todas as vitórias.
- Se não for empate e usuário não ganhou -> Computador ganha.
- Mostre as duas jogadas e o resultado final.
🚀 Desafio Extra
Faça o programa aceitar inputs como "p", "pedra", "PEDRA" da mesma forma (tratamento de string).
Projeto 05 - Jogo da Adivinhação
🎯 Objetivo
Um jogo clássico onde o computador "pensa" em um número e o usuário tenta adivinhar.
📋 Requisitos
- O computador sorteia um número entre 1 e 100 (use
random.randint). - O usuário chuta um número.
- O programa diz se o chute foi Maior ou Menor que o número secreto.
- O jogo continua (
while) até o usuário acertar. - No final, mostre quantas tentativas foram necessárias.
💡 Dicas
Vai precisar importar random:
👣 Passo a Passo
- Gere o número secreto.
- Crie uma variável
tentativas = 0. - Crie um loop
while True. - Dentro do loop:
- Peça o chute.
- Aumente
tentativas. - Se chute == secreto:
break. - Se chute > secreto: "Menos...".
- Se chute < secreto: "Mais...".
- Fora do loop, parabenize e mostre o total de tentativas.
🚀 Desafio Extra
Limite o número de tentativas! Se o usuário não acertar em 10 chances, ele perde (Game Over) e o loop para.
Projeto 06 - Gerenciador de Tarefas (To-Do List)
🎯 Objetivo
Criar um aplicativo de linha de comando para gerenciar uma lista de tarefas.
📋 Requisitos
O programa deve ter um menu com as opções: 1. Adicionar Tarefa: Pede o nome da tarefa e adiciona na lista. 2. Listar Tarefas: Mostra todas as tarefas numeradas (1. Estudar Python, 2. Ir na academia...). 3. Concluir Tarefa: Pede o número da tarefa e a remove da lista. 4. Sair: Encerra o programa.
💡 Dicas
- Use um loop
while Truepara o menu. - Para listar numerado, use
enumerate()nofor: - Lembre-se que o usuário vê o número 1, mas o índice interno é 0. Você precisará subtrair 1 quando ele escolher qual remover.
- Trate o erro caso o usuário tente remover uma tarefa que não existe (índice inválido).
👣 Passo a Passo
- Crie uma lista vazia
tarefas = []. - Imprima o menu.
- Leia a opção.
- Implemente cada opção (
if/elif/else). - No "Listar", verifique se a lista não está vazia.
🚀 Desafio Extra
Adicione uma funcionalidade de "Editar Tarefa", onde o usuário escolhe o número e digita o novo nome.
Projeto 07 - Sorteador de Loteria
🎯 Objetivo
Criar um gerador de palpites para a Mega Sena.
📋 Requisitos
Uma aposta da Mega Sena consiste em 6 números únicos entre 1 e 60.
1. O programa deve perguntar quantos jogos o usuário quer gerar.
2. Para cada jogo, gere 6 números aleatórios.
3. Use um set para garantir que não haja números repetidos dentro do mesmo jogo (se o random sortear repetido, o set ignora, mas você precisa garantir que o jogo tenha 6 números no final).
4. Mostre os jogos ordenados (ordem crescente).
💡 Dicas
- Use
while len(jogo) < 6:para continuar sorteando até ter 6 números únicos. random.randint(1, 60)gera os números.- Para ordenar visualmente, converta o set para lista e use
.sort().
👣 Passo a Passo
- Importe
random. - Pergunte a quantidade de jogos.
- Crie um loop
forpara a quantidade de jogos. - Dentro do loop, crie um set vazio
jogo = set(). - Crie um loop
whileque roda enquantolen(jogo) < 6. - Adicione o número aleatório.
- Converta para lista, ordene e imprima.
🚀 Desafio Extra
Não permitir jogos repetidos! (Se o gerador criar 6 números que já foram gerados em um jogo anterior, descarte e gere outro).
Projeto 08 - Agenda de Contatos
🎯 Objetivo
Criar uma agenda telefônica simples usando um dicionário para armazenar os contatos.
📋 Requisitos
- O programa deve ter um menu:
- Adicionar Contato.
- Buscar Contato.
- Remover Contato.
- Listar Todos.
- Sair.
- Os dados devem ser armazenados em um único dicionário onde:
- Chave: Nome do contato.
- Valor: Telefone do contato.
💡 Dicas
- Para adicionar/editar:
agenda[nome] = telefone. - Para buscar:
agenda.get(nome, "Não encontrado"). - Para remover:
agenda.pop(nome). - Use
.items()para listar tudo.
👣 Passo a Passo
- Crie
agenda = {}. - Implemente o loop do menu.
- Leia a opção e execute a lógica do dicionário.
- Teste adicionar um contato e depois buscá-lo.
🚀 Desafio Extra
Faça com que o valor do dicionário não seja apenas o telefone (string), mas sim outro dicionário contendo telefone e email.
Exemplo:
Projeto 09 - Conversor de Temperaturas (Com Testes)
🎯 Objetivo
Criar funções para conversão de temperaturas (Celsius, Fahrenheit, Kelvin) e introduzir o conceito de testes automatizados simples.
📋 Requisitos
Parte 1: As Funções
Crie um arquivo conversor.py com as seguintes funções. Todas devem retornar o valor (float), não imprimir.
1. celsius_para_fahrenheit(c)
- Fórmula: $(C \times 9/5) + 32$
2. fahrenheit_para_celsius(f)
- Fórmula: $(F - 32) \times 5/9$
3. celsius_para_kelvin(c)
- Fórmula: $C + 273.15$
4. kelvin_para_celsius(k)
- Fórmula: $K - 273.15$
Parte 2: O Programa Principal (Manual)
No final do arquivo, crie um menu para o usuário escolher a conversão, digitar o valor e ver o resultado.
Parte 3: Testes Automatizados (A Novidade!)
Vamos criar um pequeno script de teste para garantir que nossas funções estão corretas sem precisar rodar o menu toda hora.
Crie um arquivo test_conversor.py:
from conversor import celsius_para_fahrenheit, celsius_para_kelvin
def teste_automatico():
# Teste 1: 0°C deve ser 32°F
assert celsius_para_fahrenheit(0) == 32
print("Teste 1 (0C -> 32F): PASSOU")
# Teste 2: 100°C deve ser 212°F
assert celsius_para_fahrenheit(100) == 212
print("Teste 2 (100C -> 212F): PASSOU")
# Teste 3: 0°C deve ser 273.15K
assert celsius_para_kelvin(0) == 273.15
print("Teste 3 (0C -> 273.15K): PASSOU")
if __name__ == "__main__":
try:
teste_automatico()
print("\nTodos os testes passaram! 🚀")
except AssertionError:
print("\nALERTA: Algum teste falhou! ❌")
👣 Passo a Passo
- Defina as funções matemáticas (use Return!).
- Implemente o menu dentro de um
if __name__ == "__main__":noconversor.py(para que o menu não rode quando importarmos o arquivo no teste). - Crie o arquivo de teste e execute-o. Se nada explodir e aparecer "PASSOU", seu código está correto!
🚀 Por que isso é importante?
Imagine que você mudou a fórmula sem querer. O teste automático vai te avisar imediatamente (o assert vai falhar). Isso é Garantia de Qualidade!
Projeto 10 - Jogo da Forca Modularizado
🎯 Objetivo
Criar o clássico Jogo da Forca, separando a lógica em módulos para ficar profissional.
📋 Requisitos
Estrutura de Arquivos
Teremos 3 arquivos (módulos):
palavras.py: Contém uma lista de palavras para o jogo.forca.py: Contém a lógica do jogo (funções).main.py: Onde o jogo começa (Menu).
Detalhes de cada arquivo
1. palavras.py
- Deve ter uma lista: LISTA_PALAVRAS = ["python", "computador", "programacao", "web"].
- Uma função sortear_palavra() que retorna uma palavra aleatória dessa lista.
2. forca.py
- Função jogar(): Controla o loop do jogo.
- Função ocultar_palavra(palavra, letras_acertadas): Retorna a string com _ e letras descobertas (Ex: P _ T _ O N).
3. main.py
- Importa forca.
- Pergunta se o usuário quer jogar.
- Chama forca.jogar().
🧪 Testes Automatizados
Crie um arquivo test_forca.py.
Vamos testar a função ocultar_palavra (que é a lógica pura).
from forca import ocultar_palavra
def testar():
# Cenário 1: Nenhuma letra acertada
assert ocultar_palavra("CASA", []) == "_ _ _ _"
# Cenário 2: Algumas letras
assert ocultar_palavra("CASA", ["A"]) == "_ A _ A"
# Cenário 3: Todas as letras
assert ocultar_palavra("CASA", ["C", "A", "S"]) == "C A S A"
print("Testes do Jogo da Forca: PASSOU ✅")
if __name__ == "__main__":
testar()
👣 Passo a Passo
- Crie
palavras.pycom a lista e orandom.choice. - Crie
forca.pye implemente a lógica de substituir letras não encontradas por_. - Implemente o loop principal (chute letras, verifica se ganhou/perdeu).
- Crie
main.pypara unir tudo. - Rode os testes para garantir a lógica visual.
🚀 Desafio Extra
Adicione um desenho de bonequinho usando ASCII Art em um módulo separado desenhos.py e mostre o membro sendo enforcado a cada erro!
Projeto 11 - To-Do List Persistente
🎯 Objetivo
Melhorar nosso Gerenciador de Tarefas (da Aula 06) para que ele SALVE os dados em um arquivo. Assim, quando fecharmos e abrirmos o programa, as tarefas ainda estarão lá!
📋 Requisitos
- Ao iniciar, o programa deve carregar as tarefas do arquivo
tarefas.txt(se existir). - Ao adicionar uma tarefa, ela deve ser salva no arquivo.
- Ao remover uma tarefa, o arquivo deve ser atualizado (reescrito).
- O arquivo deve armazenar uma tarefa por linha.
💡 Lógica de Persistência
Temos duas estratégias principais:
- Estratégia A (Simples): Carrega tudo na memória (lista) ao iniciar. O usuário mexe na lista. Ao sair (ou a cada alteração), sobrescreve o arquivo inteiro com a lista atualizada.
- Estratégia B (Incremental): Adicionar usa append no arquivo. Remover exige reescrever.
Vamos usar a Estratégia A para facilitar a remoção.
👣 Passo a Passo
- Crie uma função
carregar_tarefas(): Tenta abrir o arquivo, lê as linhas, remove os\ne retorna uma lista. Se der erro (arquivo não existe), retorna lista vazia. - Crie uma função
salvar_tarefas(lista): Abre o arquivo em modo'w'e escreve cada item da lista seguido de\n. - No loop principal, use essas funções para manter a lista de memória e o arquivo sincronizados.
🧪 Testes Automatizados
Crie test_todo.py.
Vamos testar a persistência (Salvar e Carregar).
import os
from todo import salvar_tarefas, carregar_tarefas
def testar_persistencia():
arquivo_teste = "tarefas_teste.txt"
lista_original = ["Comprar pão", "Estudar Python"]
# 1. Salvar
# (Adapte suas funções para aceitar o nome do arquivo como parâmetro opcional,
# ou mude temporariamente a variável global do nome do arquivo)
salvar_tarefas(lista_original, nome_arquivo=arquivo_teste)
# 2. Verificar se arquivo existe
assert os.path.exists(arquivo_teste)
# 3. Carregar
lista_recuperada = carregar_tarefas(nome_arquivo=arquivo_teste)
# 4. Comparar
assert lista_recuperada == lista_original
# Limpeza (apagar arquivo de teste)
os.remove(arquivo_teste)
print("Teste de Persistência: PASSOU ✅")
if __name__ == "__main__":
testar_persistencia()
salvar e carregar precisam aceitar o nome do arquivo como argumento.
🚀 Desafio Extra
Adicione suporte a status da tarefa (Concluída/Pendente) usando um formato específico no arquivo, ex: [x] Estudar ou [ ] Dormir.
Projeto 12 - Calculadora Robusta com Testes
🎯 Objetivo
Criar uma calculadora que realiza as 4 operações básicas, mas que é "imune" a erros de digitação e divisão por zero.
📋 Requisitos
Crie um módulo calculadora.py:
1. Funções: somar(a, b), subtrair(a, b), multiplicar(a, b), dividir(a, b).
2. A função dividir deve lançar (raise) um ValueError se o divisor for zero (ou deixar o Python lançar ZeroDivisionError, mas vamos tratar no menu).
3. Função ler_numero(mensagem): Faz um loop infinito pedindo input até o usuário digitar um número válido (float). Trata ValueError internamente.
Crie um main.py (ou bloco main):
- Usa ler_numero para obter os valores.
- Chama as operações.
- Trata erros de divisão por zero.
🧪 Testes Automatizados
Crie test_calculadora.py.
Vamos testar o caminho feliz (sucesso) e o caminho triste (erro).
import pytest # Se tiver pytest instalado, senão use unittest ou try/except manual
from calculadora import dividir
# Vamos usar try/except manual para não depender de bibliotecas externas por enquanto
def testar_divisao():
# Teste Sucesso
assert dividir(10, 2) == 5.0
print("Divisão correta: PASSOU")
# Teste Erro (Divisão por Zero)
try:
dividir(10, 0)
print("Divisão por zero: FALHOU (Deveria ter dado erro)")
except ZeroDivisionError: # ou ValueError, dependendo da sua implementação
print("Divisão por zero: PASSOU (Erro capturado corretamente)")
if __name__ == "__main__":
testar_divisao()
👣 Passo a Passo
- Crie
calculadora.pycom as funções matemáticas. - Implemente
ler_numerousandotry/except ValueErrordentro de umwhile True. - No menu, envolva a chamada da divisão em um
try/exceptpara exibir mensagem bonita em vez de erro vermelho. - Crie o script de teste e valide se o erro é lançado quando deve.
🚀 Desafio Extra
Adicione uma função de Log que salva em arquivo erros.log toda vez que uma exceção acontecer, com data e hora.
Projeto 13 - Sistema de Biblioteca
🎯 Objetivo
Criar um sistema básico para gerenciar livros usando Classes e Objetos.
📋 Requisitos
Classe 1: Livro
- Atributos:
titulo,autor,disponivel(booleano, começa True). - Métodos:
emprestar(): Mudadisponivelpara False. Se já emprestado, avisa que não pode.devolver(): Mudadisponivelpara True.
Classe 2: Biblioteca (Opcional/Desafio)
- Atributos:
catalogo(uma lista de objetos Livro). - Métodos:
adicionar_livro(livro): Recebe um objeto Livro e põe na lista.listar_livros(): Mostra os títulos e se estão disponíveis.
💡 Dica
Você pode criar objetos dentro de objetos! A Biblioteca TEM livros.
👣 Passo a Passo
- Crie a classe
Livroe teste unitariamente (crie um livro, empreste, tente emprestar de novo, devolva). - (Se for fazer o desafio) Crie a
Biblioteca, adicione livros e liste. - Faça um menu interativo simples.
🚀 Desafio Extra
Adicione um atributo ano_publicacao no Livro e crie um método na Biblioteca para buscar_por_ano(ano).
Projeto 14 - Sistema de RPG Simples
🎯 Objetivo
Criar um sistema de batalha de RPG usando classes, herança e polimorfismo.
📋 Requisitos
-
Classe Base
Personagem:- Atributos:
nome,vida,forca. - Método
atacar(inimigo): Tira vida do inimigo baseado na força. - Método
esta_vivo(): Retorna True se vida > 0.
- Atributos:
-
Classes Filhas:
Guerreiro: Força alta, vida alta.Mago: Força média, mas tem métodolancar_magia(inimigo)(dano extra, gasta mana).Monstro: Personagem genérico para bater.
👣 Passo a Passo
- Crie a classe
Personagem. - Crie
Guerreiroherdando dePersonagem. Personalize o__init__. - Crie
Magoherdando dePersonagem. Adicione atributomana. - Simule uma batalha:
- Instancie um Guerreiro e um Monstro.
- Faça um loop onde eles se atacam até um morrer.
- Exiba o log da batalha ("Guerreiro atacou Monstro: -10 HP").
🚀 Desafio Extra
Crie uma classe Arqueiro que tem chance de "Crítico" (dano dobrado) quando ataca. Use o módulo random para calcular essa chance.
🧪 Testes
Se possível, crie um arquivo test_rpg.py para validar sua lógica:
- Teste se o Personagem morre quando vida chega a 0.
- Teste se o Guerreiro tem mais vida que o Mago.
- Teste se o ataque reduz a vida do inimigo corretamente.
Projeto 15 - Buscador de GitHub
🎯 Objetivo
Criar uma ferramenta que busca informações de um usuário do GitHub usando a API pública deles.
📋 Requisitos
- Pergunte o nome do usuário do GitHub (ex:
torvalds,microsoft). - Acesse a API:
https://api.github.com/users/{usuario}. - Se o usuário existir (200 OK):
- Mostre o Nome Completo.
- Mostre a Bio.
- Mostre o número de Seguidores.
- Mostre o número de Repositórios Públicos.
- Se não existir (404), diga "Usuário não encontrado".
💡 Dica
A API do GitHub é gratuita, mas tem limite de acessos por hora para anônimos. Se parar de funcionar, espere um pouco ou teste com outra API (como PokeAPI).
👣 Passo a Passo
- Importe
requests. - Pegue o input do usuário.
- Monte a URL (f-string).
- Faça o GET e verifique o
status_code. - Se for 200,
dados = resposta.json(). - Acesse as chaves
name,bio,followers,public_repos.
🚀 Desafio Extra
Liste também os nomes dos 5 últimos repositórios do usuário.
(Dica: Explore a chave repos_url que vem no primeiro JSON, ou acesse https://api.github.com/users/{usuario}/repos).
Projeto Final - Gerenciador de Tarefas (Task Manager) com TDD
🎯 Objetivo
Desenvolver o "núcleo" (backend) de um gerenciador de tarefas profissional usando TDD. Você não fará a interface (menu), apenas as classes e a lógica, garantidas por testes.
📋 Requisitos do Sistema
-
Classe
Tarefa:- Atributos:
titulo,descricao,concluida(bool, default False). - Método
concluir(): Marca como True. - Método
pendente(): Marca como False.
- Atributos:
-
Classe
GerenciadorTarefas:- Atributos:
tarefas(lista). - Método
adicionar(titulo, descricao): Cria e adiciona tarefa. Retorna a tarefa criada. - Método
listar(): Retorna lista de tarefas. - Método
listar_concluidas(): Retorna apenas as True. - Método
remover(indice): Remove tarefa. LançaIndexErrorse inválido.
- Atributos:
👣 Passo a Passo (Modo TDD)
Siga estritamente esta ordem. Não pule!
Ciclo 1: Criar Tarefa
- Red: Crie
test_tarefa.py. Teste se ao instanciarTarefa("Estudar", "Python"), os atributos estão certos econcluidaéFalse. - Green: Crie a classe
Tarefaemtarefas.py. - Refactor: Está limpo?
Ciclo 2: Concluir Tarefa
- Red: Adicione teste em
test_tarefa.pychamando.concluir()e verificando se virouTrue. - Green: Implemente o método
concluir.
Ciclo 3: Gerenciador (Adicionar)
- Red: Crie
test_gerenciador.py. Testeadicionar. Verifique se a listatarefasaumentou. - Green: Crie a classe
GerenciadorTarefase o método.
Ciclo 4: Remover (Com erro)
- Red: Teste
remover(0)com lista vazia. Deve lançar exceção. (Usepytest.raises). - Green: Implemente a validação no
remover.
🚀 Entrega
Seu projeto final deve ter:
- src/tarefas.py (O código)
- tests/test_tarefa.py (Testes da unidade Tarefa)
- tests/test_gerenciador.py (Testes da unidade Gerenciador)
Rode pytest e veja tudo verde. 🟢 Parabéns, você é um programador Python profissional!
Configuração
Configuração do Ambiente
Bem-vindo à seção de configuração! Aqui você encontra guias para instalar e configurar seu ambiente de desenvolvimento Python.
-
Windows
- Instalação Windows
- Guia completo para Windows 10/11
- Python via Microsoft Store
- VSCode e extensões
-
Linux (Ubuntu)
- Instalação Linux
- Guia para Ubuntu/Debian
- PyCharm Community
- Configuração do ambiente
📋 Próximos Passos
Após configurar seu ambiente:
- ✅ Teste a instalação - Execute seu primeiro programa
- 📚 Comece as aulas - Vá para Aula 01
- 💪 Pratique - Faça os exercícios propostos
- 🚀 Desenvolva - Crie seus próprios projetos
Configuração do Ambiente (Windows)
Este guia irá ajudá-lo a configurar o ambiente de desenvolvimento Python no Windows usando o Visual Studio Code (VSCode).
1. Instalando o Python
O Python é a linguagem que usaremos. O interpretador é o programa que lê seu código e diz ao computador o que fazer.
Passo 1: Baixar
- Acesse o site oficial: python.org/downloads.
- Clique no botão amarelo Download Python 3.x.x (a versão mais recente).
Passo 2: Instalar (MUITO IMPORTANTE!)
- Execute o instalador baixado (
python-3.x.x-amd64.exe). - ⚠️ ANTES DE CLICAR EM INSTALL, MARQUE A CAIXA: [x] Add Python 3.x to PATH (Se você esquecer isso, o Python não vai funcionar no terminal).
- Clique em Install Now.
- Aguarde o final e clique em Close.
Passo 3: Testar
- Abra o Menu Iniciar e digite
cmdouPowerShell. Abra-o. - Digite o comando:
- Se aparecer algo como
Python 3.12.0, parabéns! Está instalado.
2. Instalando o Visual Studio Code (VSCode)
O VSCode é o editor de texto onde escreveremos nosso código. Ele é leve, poderoso e gratuito.
- Acesse: code.visualstudio.com.
- Baixe a versão para Windows.
- Instale com as opções padrão (Next, Next, Install).
3. Configurando o VSCode para Python
Para o VSCode entender Python e ajudar com cores e autocompletar, precisamos de uma extensão.
- Abra o VSCode.
- No menu lateral esquerdo, clique no ícone de quadrados (Extensions) ou aperte
Ctrl+Shift+X. - Na barra de busca, digite
Python. - Clique na primeira opção (criada pela Microsoft) e clique em Install.
- Aguarde a instalação finalizar (pode pedir para recarregar).
4. Seu primeiro teste no VSCode
- Crie uma pasta no seu computador para o curso (ex:
MeusEstudosPython). - No VSCode, vá em File > Open Folder e abra essa pasta.
- Crie um arquivo novo chamado
teste.py. - Escreva:
- Para rodar, clique no botão de Play ▷ no canto superior direito (ou aperte
F5). - A mensagem deve aparecer no terminal na parte de baixo da tela.
🎉 Pronto! Seu ambiente está configurado.
Configuração do Ambiente (Linux Ubuntu)
Este guia mostra como instalar e configurar o Python e PyCharm no Ubuntu para desenvolvimento.
1. Instalando Python no Ubuntu
O Ubuntu já vem com Python instalado. Vamos verificar e atualizar se necessário.
Verificar Versão Instalada
Se aparecer Python 3.10 ou superior, você já tem Python! Caso contrário, instale:
Instalar Python e Ferramentas
# Atualizar repositórios
sudo apt update
# Instalar Python 3 e ferramentas essenciais
sudo apt install python3 python3-pip python3-venv -y
# Verificar instalação
python3 --version
pip3 --version
Saída esperada:
2. Instalando e Configurando PyCharm no Ubuntu
PyCharm é a melhor IDE para Python, desenvolvida pela JetBrains.
Método Recomendado: Via Snap
O Snap já vem instalado no Ubuntu. Use este método para instalação fácil:
# PyCharm Community (Gratuito e Open Source)
sudo snap install pycharm-community --classic
# OU PyCharm Professional (Pago, mas com 30 dias de trial)
sudo snap install pycharm-professional --classic
Método Alternativo: Via Ubuntu Software
- Abra Ubuntu Software (ícone de sacola de compras)
- Busque por "PyCharm"
- Clique em Install
Abrir PyCharm
# Via terminal
pycharm-community
# OU via menu de aplicativos
# Pressione Super (tecla Windows) e digite "PyCharm"
3. Configuração Inicial do PyCharm
Primeira Execução
- Aceite os Termos de Uso
- Escolha o Tema:
- Light (Claro)
-
Darcula (Escuro) - Recomendado
-
Criar Novo Projeto:
- Clique em New Project
- Escolha o local:
~/PycharmProjects/MeuPrimeiroProjeto - Interpreter: Selecione Python 3.x detectado automaticamente
- Clique em Create
Configurar Interpretador Python
Se o PyCharm não detectar automaticamente:
- File → Settings (ou
Ctrl+Alt+S) - Project → Python Interpreter
- Clique no ícone de engrenagem → Add
- Selecione System Interpreter
- Escolha
/usr/bin/python3
4. Criando Seu Primeiro Programa
- Criar arquivo: Clique com botão direito no projeto → New → Python File
- Nome:
hello.py - Digite:
- Executar: Clique com botão direito no arquivo → Run 'hello'
- Ou use o atalho:
Shift+F10
5. Instalando Bibliotecas (pip)
Via Terminal do PyCharm
- View → Tool Windows → Terminal (ou
Alt+F12) - Instalar biblioteca:
Criar Ambiente Virtual (Recomendado)
# Criar ambiente virtual
python3 -m venv venv
# Ativar
source venv/bin/activate
# Instalar bibliotecas
pip install requests flask pandas
# Desativar quando terminar
deactivate
6. Atalhos Úteis do PyCharm (Linux)
| Atalho | Ação |
|---|---|
Ctrl+Space |
Auto-completar código |
Shift+F10 |
Executar programa |
Ctrl+/ |
Comentar/descomentar linha |
Ctrl+D |
Duplicar linha |
Ctrl+Y |
Deletar linha |
Ctrl+Alt+L |
Formatar código |
Alt+F12 |
Abrir terminal |
7. Dicas Importantes
Permissões de Execução
Se encontrar erro de permissão ao executar scripts:
Atualizar pip
Verificar Pacotes Instalados
8. Solução de Problemas Comuns
Erro: "python: command not found"
Use python3 em vez de python:
PyCharm não abre
Conflito de versões Python
# Verificar todas as versões instaladas
ls /usr/bin/python*
# Usar versão específica
python3.10 --version
9. Recursos Adicionais
- Documentação Python: https://docs.python.org/pt-br/3/
- PyCharm Docs: https://www.jetbrains.com/help/pycharm/
- Python Package Index (PyPI): https://pypi.org/
✅ Pronto!
Agora você tem um ambiente Python completo no Linux! 🐧🐍
Próximos passos: - Explore os tutoriais integrados do PyCharm - Pratique com exercícios Python - Comece a desenvolver seus projetos!
Versão para Impressão
Esta página foi gerada automaticamente para impressão.