Python na Prática: Fundamentos, Jogos, Dados e Web
Domine a base do Python moderno passo a passo: configure o interpretador e o VS Code, entenda variáveis como etiquetas de memória, manipule strings e números com precisão e domine listas, laços for, list comprehensions, fatiamento, tuplas e PEP 8.
Ouça o episódio complementar diretamente por aqui para fixar o modelo mental mais importante do Capítulo 2: por que variáveis em Python não são caixas rígidas, e sim etiquetas apontando para objetos na memória — conceito que também explica cópias e aliases em listas.
Oficinas Práticas — Capítulos 1 a 4
Python 3.9–3.11+
Modelo mental da Etapa 1: variáveis etiquetam valores na memória; listas organizam sequências mutáveis por índice e laços for percorrem cada item com indentação rigorosa.
OFICINA 01 · CAPÍTULO 1
Ambiente Python, VS Code e Leitura de Tracebacks
Antes de escrever algoritmos complexos, precisamos garantir que o interpretador correto esteja acessível no terminal e que o editor ajude a enxergar erros rapidamente. No livro Python Crash Course, Eric Matthes recomenda instalar o pacote oficial de python.org e usar o Visual Studio Code com a extensão oficial da Microsoft para Python.
Atenção no Windows: durante o instalador oficial, marque sempre a opção Add Python to PATH. Evite instalar o Python pela Microsoft Store, pois ela aplica restrições de permissão que costumam atrapalhar pacotes e scripts no terminal. No Windows o comando costuma ser python; no macOS e Linux, python3.
Organização e Primeiros Passos
Pasta de trabalho: crie um diretório chamado python_work (tudo em minúsculas e com underscores no lugar de espaços — convenção padrão de nomes em Python).
Modo interativo (REPL): digite python (ou python3) no terminal para abrir o prompt >>> e testar expressões instantaneamente. Para sair, execute exit() (ou Ctrl+Z + Enter no Windows / Ctrl+D no macOS e Linux).
Lendo tracebacks: quando um script falha, o Python imprime um traceback. Leia de baixo para cima: a última linha mostra o tipo do erro (ex.: NameError), e a linha logo acima indica o arquivo, o número da linha e o trecho exato onde o interpretador travou.
hello_world.py — Primeiro script e teste de traceback
message = "Olá, mundo do Python!"
print(message)
message = "Etapa 1 configurada com sucesso no VS Code."
print(message)
Prática rápida
Crie a pasta python_work, salve hello_world.py e execute no terminal. Em seguida, provoque um erro proposital trocando print(message) por print(mesage) para observar como o Python 3.10+ sugere a correção no traceback.
OFICINA 02 · CAPÍTULO 2
Variáveis como Etiquetas e Manipulação de Strings
Em muitas linguagens introdutórias, ensina-se que variáveis são "caixas" onde guardamos valores. Em Python, o modelo mais fiel é pensar em variáveis como etiquetas (labels) coladas a valores na memória. Você pode mover a etiqueta para outro valor a qualquer momento.
Regras de Nomenclatura
Nomes podem conter apenas letras, números e underscores (_), mas nunca podem começar com um número (1_message gera erro; message_1 é válido).
Não use espaços (use greeting_message) e evite palavras reservadas ou funções embutidas como print.
Prefira nomes descritivos e curtos: student_name comunica muito melhor do que s_n.
Strings, f-strings e Limpeza Moderna (Python 3.9+)
Strings aceitam aspas simples ('...') ou duplas ("..."), o que facilita incluir apóstrofos dentro do texto sem causar SyntaxError. Além dos clássicos .title(), .upper(), .lower() e dos limpadores de espaços em branco (.rstrip(), .lstrip(), .strip()), o Python 3.9 introduziu métodos diretos para remover prefixos e sufixos exatos.
strings_demo.py — f-strings, tabulação e removeprefix/removesuffix
Diferença prática entre .strip() e .removeprefix()
.strip() remove caracteres das extremidades (por padrão espaços, \t e \n). Já .removeprefix("https://") remove exatamente a sequência informada apenas se ela estiver no início da string, evitando apagar letras isoladas por acidente.
OFICINA 03 · CAPÍTULO 2 (CONT.)
Números, Constantes e o Zen do Python
Python separa inteiros (int) de números com ponto decimal (float). Mesmo quando você divide dois inteiros exatos, como 4 / 2, o resultado é sempre um float (2.0). Além disso, devido à representação binária de ponto flutuante, operações como 0.2 + 0.1 retornam 0.30000000000000004 — comportamento normal em praticamente toda linguagem de programação.
Recursos numéricos e boas práticas do Capítulo 2
Recurso
Exemplo
Comportamento
Exponenciação
3 ** 2
Retorna 9 (dois asteriscos representam potência).
Underscores visuais
universe_age = 14_000_000_000
Melhora a leitura de números grandes; o Python ignora os _.
Atribuição múltipla
x, y, z = 0, 0, 0
Inicializa várias variáveis na mesma linha.
Constantes
MAX_CONNECTIONS = 5000
Escrita em MAIÚSCULAS sinaliza que o valor não deve mudar.
O Zen do Python (Tim Peters)
Ao digitar import this no terminal Python, você lê os princípios que guiam a comunidade. Três máximas resumem o espírito da Etapa 1: "Simple is better than complex" (Simples é melhor que complexo), "Readability counts" (Legibilidade conta) e "Now is better than never" (Agora é melhor que nunca). Use comentários com # para explicar o porquê de decisões importantes no código.
OFICINA 04 · CAPÍTULO 3
Listas: Indexação, Mutação e Ordenação
Uma lista é uma coleção ordenada de itens delimitada por colchetes []. Em Python, a contagem começa em 0 (não em 1). Para acessar o último elemento sem precisar saber o tamanho da lista, use o índice negativo [-1]; tentar acessar um índice inexistente dispara IndexError: list index out of range.
Métodos essenciais de listas e suas diferenças
Operação
Método / Sintaxe
Efeito na Lista
Adicionar ao fim
motorcycles.append('ducati')
Insere no final sem alterar índices anteriores.
Inserir em posição
motorcycles.insert(0, 'honda')
Abre espaço no índice 0 e desloca os demais.
Remover definitivamente
del motorcycles[0]
Apaga o item; não permite reaproveitar o valor.
Remover e reutilizar
popped = motorcycles.pop()
Remove o último (ou índice pop(0)) e devolve o valor.
Remover por valor
motorcycles.remove('ducati')
Remove apenas a primeira ocorrência do valor.
Ordenar permanente
cars.sort() / cars.sort(reverse=True)
Altera a ordem original da lista em definitivo.
Ordenar temporário
sorted(cars)
Exibe ordenada sem modificar a lista original.
Inverter ordem
cars.reverse()
Inverte a ordem atual (não ordena alfabeticamente).
listas_crud.py — Criando, modificando e organizando listas
Quando você precisa executar a mesma ação para todos os itens de uma lista, o laço for percorre cada elemento automaticamente: for magician in magicians:. Python usa a indentação (4 espaços) para definir o que pertence ao bloco do laço.
Armadilhas clássicas do for:
Esquecer os dois-pontos : gera SyntaxError: expected ':'.
Esquecer de indentar a linha seguinte dispara IndentationError.
Indentar uma linha final de resumo faz ela repetir em toda iteração (erro lógico silencioso).
Listas Numéricas e List Comprehensions
A função range(1, 5) gera os números 1, 2, 3, 4 — ela sempre para antes do valor final. Combinada com list(range(2, 11, 2)), cria sequências com passo definido. Já uma List Comprehension condensa o laço for e a criação da lista em uma única linha expressiva.
comprehensions.py — range(), estatísticas rápidas e list comprehension
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(min(digits), max(digits), sum(digits))
# Forma tradicional vs List Comprehension
squares = [value ** 2 for value in range(1, 11)]
print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
OFICINA 06 · CAPÍTULO 4 (CONT.)
Slicing, Cópia vs. Alias, Tuplas e PEP 8
Para trabalhar apenas com uma fatia (slice) da lista, informe o índice inicial e final separados por dois-pontos: players[0:3] pega os três primeiros itens. Omitir o início (players[:4]) começa do zero; omitir o fim (players[2:]) vai até o último elemento; e players[-3:] captura os três últimos.
Cópia real ([:]) vs. Alias (=): se você escrever friend_foods = my_foods, não criou uma segunda lista — apenas colou duas etiquetas na mesma lista na memória. Alterar uma altera a outra! Para criar duas listas independentes, use fatiamento completo: friend_foods = my_foods[:].
Tuplas (Listas Imutáveis) e Padrão PEP 8
Tuplas: usam parênteses dimensions = (200, 50). Tentar alterar um item (dimensions[0] = 250) gera TypeError: 'tuple' object does not support item assignment. Tecnicamente, a vírgula define a tupla — por isso uma tupla de 1 elemento exige vírgula: my_t = (3,). Embora imutáveis, você pode reatribuir a variável inteira a uma nova tupla.
PEP 8 (Guia de Estilo): use 4 espaços por nível de indentação (configure o editor para converter Tab em espaços), limite linhas de código a 79 caracteres (e comentários a 72 caracteres) e use linhas em branco com equilíbrio para separar blocos lógicos.
LABORATÓRIO INTERATIVO
Simulador de Listas, Slicing & Cópia vs. Alias
Escolha uma operação do Capítulo 3 ou 4 e observe como a lista principal my_foods e a referência secundária friend_foods se comportam na memória.