👋 Entrada de Dados & F-Strings
Em Python,
input() lê texto digitado pelo usuário. As f-strings (prefixo f"...") permitem inserir variáveis diretamente dentro de strings com {variável}.📌 Básico — Input e f-string
nome = input("Seu nome: ")
print(f"Olá, {nome}!")📌 Intermediário — Formatação numérica
preco = 19.5
quantidade = 3
total = preco * quantidade
print(f"Total: R$ {total:.2f}")🧠 Quiz rápido
Qual é a saída de:
x = 5; print(f"Valor: {x*2}")?⚙️ Funções
Funções encapsulam código reutilizável. Use
def para definir, return para retornar valor. Podem ter parâmetros opcionais com valores padrão.📌 Básico — Função com retorno
def somar(a, b):
return a + b
print(somar(10, 5))📌 Intermediário — Parâmetro padrão
def saudar(nome, saudacao="Olá"):
return f"{saudacao}, {nome}!"
print(saudar("Ana"))
print(saudar("João", "Oi"))🧠 Quiz rápido
O que imprime:
def dobro(n): return n*2; print(dobro(4))?📂 Listas
Listas são coleções ordenadas e mutáveis. Use
append() para adicionar, remove() para remover, e índices para acessar elementos.📌 Básico — Criar e adicionar
frutas = ["Maçã", "Banana"]
frutas.append("Laranja")
print(frutas)📌 Intermediário — List comprehension
numeros = [1, 2, 3, 4, 5]
pares = [n for n in numeros if n % 2 == 0]
dobros = [n * 2 for n in numeros]
print("Pares:", pares)
print("Dobros:", dobros)🧠 Quiz rápido
Qual é o resultado de
[x**2 for x in range(3)]?🔑 Dicionários
Dicionários armazenam pares chave-valor. São ideais para estruturar dados como objetos. Acesse com
dict["chave"] ou dict.get("chave").📌 Básico — Criar e acessar
carro = {"marca": "Ford", "ano": 2022}
print(carro["marca"])📌 Intermediário — Iterar e atualizar
pessoa = {"nome": "Ana", "idade": 25}
pessoa["cidade"] = "SP"
for chave, valor in pessoa.items():
print(f"{chave}: {valor}")🧠 Quiz rápido
Como acessar com segurança uma chave que pode não existir?
🔄 Loops
Use
for para iterar sobre sequências e while para repetir enquanto uma condição for verdadeira. range(n) gera sequências numéricas.📌 Básico — For com range
for i in range(3):
print(f"Número: {i}")📌 Intermediário — While + break
contador = 0
while contador < 5:
print(f"Contando: {contador}")
contador += 1
if contador == 3:
print("Parei no 3!")
break🧠 Quiz rápido
Quantas vezes o
print executa: for i in range(1, 5): print(i)?⚠️ Tratamento de Erros
Use
try/except para capturar erros sem travar o programa. O bloco finally sempre executa, independente de erro.📌 Básico — Try/Except
try:
x = 1 / 0
except ZeroDivisionError:
print("Não divida por zero!")📌 Intermediário — Múltiplos erros + finally
def dividir(a, b):
try:
resultado = a / b
return resultado
except ZeroDivisionError:
print("Erro: divisão por zero")
except TypeError:
print("Erro: tipo inválido")
finally:
print("Operação finalizada")
dividir(10, 2)
dividir(5, 0)🧠 Quiz rápido
O bloco
finally executa:🏗️ POO — Classes e Objetos
Classes são moldes para criar objetos.
__init__ é o construtor. self referencia a instância atual do objeto.📌 Básico — Classe simples
class Pessoa:
def __init__(self, nome):
self.nome = nome
p = Pessoa("Maria")
print(p.nome)📌 Intermediário — Método e herança
class Animal:
def __init__(self, nome):
self.nome = nome
def falar(self):
return "..."
class Cachorro(Animal):
def falar(self):
return f"{self.nome} diz: Au au!"
dog = Cachorro("Rex")
print(dog.falar())🧠 Quiz rápido
O que é
self em uma classe Python?📊 Pandas
Pandas é a biblioteca principal para análise de dados em Python. Um
DataFrame é como uma tabela com linhas e colunas nomeadas.📌 Básico — Criar DataFrame
import pandas as pd
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
print(df)📌 Intermediário — Filtro e estatísticas
import pandas as pd
dados = {"nome": ["Ana", "João", "Pedro"],
"nota": [8.5, 6.0, 9.2]}
df = pd.DataFrame(dados)
aprovados = df[df["nota"] >= 7]
print("Aprovados:")
print(aprovados)
print(f"\nMédia: {df['nota'].mean():.1f}")🧠 Quiz rápido
Como filtrar um DataFrame
df onde a coluna "idade" é maior que 18?📄 Arquivos
Python usa
open() para ler e escrever arquivos. O modo "r" lê, "w" escreve (sobrescreve), "a" adiciona ao final. Use with para fechar automaticamente.📌 Básico — Ler e escrever
# Escrever em arquivo
with open("notas.txt", "w") as f:
f.write("Linha 1\n")
f.write("Linha 2\n")
# Ler arquivo
with open("notas.txt", "r") as f:
conteudo = f.read()
print(conteudo)📌 Intermediário — Ler linha por linha
linhas = ["Ana - 8.5\n", "João - 6.0\n", "Pedro - 9.2\n"]
with open("alunos.txt", "w") as f:
f.writelines(linhas)
with open("alunos.txt", "r") as f:
for i, linha in enumerate(f, 1):
print(f"Linha {i}: {linha.strip()}")🧠 Quiz rápido
Qual modo do
open() adiciona conteúdo ao final sem apagar o existente?🔍 Expressões Regulares
O módulo
re permite buscar padrões em textos. re.search() encontra a primeira ocorrência, re.findall() retorna todas, re.sub() substitui.📌 Básico — Buscar padrão
import re
texto = "Meu email é [email protected]"
padrao = r"\w+@\w+\.\w+"
resultado = re.search(padrao, texto)
if resultado:
print("Email encontrado:", resultado.group())📌 Intermediário — findall e sub
import re
texto = "Os preços são R$10, R$25 e R$100"
# Encontrar todos os valores
valores = re.findall(r"R\$\d+", texto)
print("Valores:", valores)
# Substituir números por ***
censurado = re.sub(r"\d+", "***", texto)
print("Censurado:", censurado)🧠 Quiz rápido
Qual função do
re retorna uma lista com todas as ocorrências do padrão?🌐 Requests & APIs
A biblioteca
requests facilita chamadas HTTP. Use requests.get(url) para buscar dados de APIs. A resposta pode ser convertida para JSON com .json().📌 Básico — GET em uma API pública
import requests
url = "https://api.github.com/users/github"
resposta = requests.get(url)
if resposta.status_code == 200:
dados = resposta.json()
print("Nome:", dados["name"])
print("Seguidores:", dados["followers"])
else:
print("Erro:", resposta.status_code)📌 Intermediário — POST com dados
import requests
url = "https://httpbin.org/post"
payload = {"nome": "Ana", "idade": 25}
headers = {"Content-Type": "application/json"}
resposta = requests.post(url, json=payload, headers=headers)
dados = resposta.json()
print("Enviado:", dados["json"])🧠 Quiz rápido
Qual código HTTP indica que uma requisição foi bem-sucedida?
✨ Decorators
Decorators são funções que envolvem outras funções para adicionar comportamento sem modificar o código original. Usados com a sintaxe
@nome_decorator.📌 Básico — Criar um decorator
def meu_decorator(func):
def wrapper():
print("--- Antes da função ---")
func()
print("--- Depois da função ---")
return wrapper
@meu_decorator
def saudar():
print("Olá, mundo!")
saudar()📌 Intermediário — Decorator com timer
import time
def cronometrar(func):
def wrapper(*args, **kwargs):
inicio = time.time()
resultado = func(*args, **kwargs)
fim = time.time()
print(f"{func.__name__} levou {fim - inicio:.4f}s")
return resultado
return wrapper
@cronometrar
def calcular():
total = sum(range(1_000_000))
return total
print("Total:", calcular())🧠 Quiz rápido
O que a sintaxe
@meu_decorator acima de uma função faz?🔢 NumPy
NumPy é a biblioteca fundamental para computação numérica em Python. Oferece arrays multidimensionais eficientes e funções matemáticas de alto desempenho.
📌 Básico — Arrays e operações elementares
import numpy as np
# Criar arrays
a = np.array([1, 2, 3, 4, 5])
b = np.array([10, 20, 30, 40, 50])
# Operações vetorizadas (sem loop!)
print("Soma:", a + b)
print("Dobro de a:", a * 2)
print("Média:", np.mean(a))
print("Desvio padrão:", np.std(a))
# Array 2D (matriz)
matriz = np.array([[1, 2, 3], [4, 5, 6]])
print("Shape:", matriz.shape)
print("Soma de todas as colunas:", np.sum(matriz, axis=0))📌 Intermediário — Indexação, slicing e funções úteis
import numpy as np
# arange e linspace
numeros = np.arange(0, 10, 2) # [0, 2, 4, 6, 8]
espacados = np.linspace(0, 1, 5) # 5 valores entre 0 e 1
print("arange:", numeros)
print("linspace:", espacados)
# Indexação booleana
dados = np.array([15, 3, 42, 8, 27, 6])
maiores = dados[dados > 10]
print("Maiores que 10:", maiores)
# Reshape
v = np.arange(12)
m = v.reshape(3, 4)
print("Matriz 3x4:\n", m)
# Operações matriciais
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
print("Produto matricial:\n", A @ B)🧠 Quiz rápido
O que
np.array([1,2,3]) * 3 retorna?📈 Matplotlib
Matplotlib é a principal biblioteca de visualização de dados em Python. Com ela você cria gráficos de linha, barras, pizza, dispersão e muito mais.
📌 Básico — Gráfico de linha e barras
import matplotlib
matplotlib.use('Agg') # necessário no Pyodide
import matplotlib.pyplot as plt
import numpy as np
# Gráfico de linha
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.figure(figsize=(8, 4))
plt.plot(x, y, color='royalblue', linewidth=2, label='sen(x)')
plt.title('Onda Senoidal')
plt.xlabel('x')
plt.ylabel('sen(x)')
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('grafico.png', dpi=100)
plt.show()
print("Gráfico gerado!")📌 Intermediário — Múltiplos subplots
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
# Gráfico de barras
categorias = ['Jan', 'Fev', 'Mar', 'Abr']
valores = [23, 45, 31, 60]
axes[0].bar(categorias, valores, color='steelblue')
axes[0].set_title('Vendas Mensais')
# Gráfico de dispersão
x = np.random.randn(50)
y = x * 2 + np.random.randn(50)
axes[1].scatter(x, y, alpha=0.6, color='tomato')
axes[1].set_title('Dispersão')
# Histograma
dados = np.random.normal(0, 1, 500)
axes[2].hist(dados, bins=25, color='mediumseagreen', edgecolor='white')
axes[2].set_title('Histograma Normal')
plt.tight_layout()
plt.savefig('subplots.png')
plt.show()
print("Subplots gerados!")🧠 Quiz rápido
Qual função do Matplotlib cria múltiplos gráficos lado a lado?
🗄️ SQLite
SQLite é um banco de dados relacional embutido no Python — sem necessidade de instalar nada. Ideal para apps locais, protótipos e aprender SQL.
📌 Básico — Criar banco, inserir e consultar
import sqlite3
# Conectar (cria o arquivo se não existir)
conn = sqlite3.connect(':memory:') # banco em memória
cursor = conn.cursor()
# Criar tabela
cursor.execute('''
CREATE TABLE usuarios (
id INTEGER PRIMARY KEY AUTOINCREMENT,
nome TEXT NOT NULL,
idade INTEGER
)
''')
# Inserir dados
cursor.executemany('INSERT INTO usuarios (nome, idade) VALUES (?, ?)', [
('Ana', 28),
('Bruno', 35),
('Carla', 22),
])
conn.commit()
# Consultar
cursor.execute('SELECT * FROM usuarios WHERE idade > 25')
for row in cursor.fetchall():
print(row)
conn.close()📌 Intermediário — UPDATE, DELETE e usar com Pandas
import sqlite3
import pandas as pd
conn = sqlite3.connect(':memory:')
cursor = conn.cursor()
cursor.execute('CREATE TABLE produtos (id INTEGER PRIMARY KEY, nome TEXT, preco REAL, estoque INTEGER)')
cursor.executemany('INSERT INTO produtos VALUES (?,?,?,?)', [
(1, 'Caneta', 1.50, 100),
(2, 'Caderno', 12.90, 50),
(3, 'Mochila', 89.90, 10),
])
conn.commit()
# UPDATE
cursor.execute('UPDATE produtos SET preco = preco * 1.1 WHERE estoque < 20')
conn.commit()
print("Reajuste de 10% em produtos com pouco estoque")
# DELETE
cursor.execute('DELETE FROM produtos WHERE preco < 5')
conn.commit()
# Ler com Pandas
df = pd.read_sql_query('SELECT * FROM produtos ORDER BY preco', conn)
print(df)
conn.close()🧠 Quiz rápido
Por que usar
? em vez de concatenar strings em queries SQLite?⚡ FastAPI
FastAPI é um framework moderno e rápido para criar APIs REST com Python. Usa type hints para validação automática e gera documentação interativa automaticamente.
📌 Básico — Criar uma API simples
# Para rodar: pip install fastapi uvicorn
# Salve como main.py e execute: uvicorn main:app --reload
from fastapi import FastAPI
app = FastAPI()
# Rota GET simples
@app.get("/")
def raiz():
return {"mensagem": "Bem-vindo à minha API!"}
# Rota com parâmetro de path
@app.get("/usuarios/{user_id}")
def buscar_usuario(user_id: int):
return {"id": user_id, "nome": f"Usuário {user_id}"}
# Rota com query params
@app.get("/produtos")
def listar_produtos(categoria: str = "todos", limite: int = 10):
return {"categoria": categoria, "limite": limite}
# Documentação automática em: http://localhost:8000/docs📌 Intermediário — POST com Pydantic e validação
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
from typing import Optional
app = FastAPI()
# Modelo de dados com validação automática
class Produto(BaseModel):
nome: str = Field(..., min_length=2, max_length=100)
preco: float = Field(..., gt=0)
estoque: int = Field(default=0, ge=0)
descricao: Optional[str] = None
# Banco fake em memória
db: dict[int, Produto] = {}
contador = 0
@app.post("/produtos", status_code=201)
def criar_produto(produto: Produto):
global contador
contador += 1
db[contador] = produto
return {"id": contador, **produto.model_dump()}
@app.get("/produtos/{produto_id}")
def buscar_produto(produto_id: int):
if produto_id not in db:
raise HTTPException(status_code=404, detail="Produto não encontrado")
return db[produto_id]
@app.delete("/produtos/{produto_id}")
def deletar_produto(produto_id: int):
if produto_id not in db:
raise HTTPException(status_code=404, detail="Produto não encontrado")
del db[produto_id]
return {"mensagem": "Produto removido"}
# Testar em: http://localhost:8000/docs🧠 Quiz rápido
Qual é a principal vantagem de usar modelos Pydantic no FastAPI?
🚀 Playground Python
Execute código Python diretamente no navegador! Usa Pyodide (Python em WebAssembly). Pandas e NumPy são suportados. Use Ctrl+Enter para executar.
💡 Ctrl+Enter executar · ↑↓ histórico · Pandas e NumPy disponíveis
▸ Aguardando execução...