Dê inteligência e memória aos seus programas: tome decisões com condicionais if-elif-else, organize dados estruturados em dicionários (com leitura segura via .get() e aninhamento) e interaja em tempo real usando input() e laços while.
Ouça o episódio de Garlucas direto por aqui antes ou depois das oficinas para conectar testes booleanos, acesso seguro em dicionários e controle de repetição com while em cenários práticos.
Fluxo da Etapa 2: expressões booleanas roteiam a execução, dicionários modelam entidades reais por chave-valor e while mantém a interação até a condição de saída.
OFICINA 01 · CAPÍTULO 5
Testes Condicionais, == vs. = e Operadores Lógicos
Toda estrutura if avalia uma expressão que resulta em True ou False. Um dos erros mais comuns de quem começa é confundir atribuição (=) com comparação de igualdade (==).
Igualdade e maiúsculas/minúsculas:'Audi' == 'audi' retorna False; normalize com carro.lower() == 'audi' quando o texto vier do usuário.
Desigualdade e comparações numéricas: use !=, <, <=, >, >=.
Múltiplas condições:and exige que todas sejam verdadeiras; or exige pelo menos uma verdadeira.
Pertencimento em listas: verifique rapidamente com 'cogumelo' in ingredientes ou usuario not in banidos.
Python · Testes booleanos com in, not in e lower()
usuarios_banidos = ['andre', 'carolina', 'davi']
usuario = 'Maria'
if usuario.lower() not in usuarios_banidos:
print(f"{usuario.title()}, você pode comentar agora.")
OFICINA 02 · CAPÍTULO 5
Cadeias if-elif-else, Múltiplos if e Listas Vazias
Escolher entre if-elif-else e vários if seguidos muda completamente o comportamento do seu código:
if-elif-else: executa apenas um bloco (o primeiro verdadeiro) e ignora os demais — ideal para faixas mutuamente exclusivas (ex.: preço do ingresso por idade). Você pode omitir o else final usando um último elif explícito para evitar entradas inesperadas.
Múltiplos if independentes: avalia todos os blocos — ideal quando mais de uma condição pode ser verdadeira ao mesmo tempo (ex.: adicionar vários extras em uma pizza).
Checando listas vazias: em Python, uma lista vazia [] avalia como False. Sempre teste if pedidos: antes de percorrer com for.
OFICINA 03 · CAPÍTULO 6
Dicionários: Pares Chave-Valor & Leitura Segura com .get()
Enquanto listas guardam itens por posição numérica, dicionários ({}) conectam uma chave única a um valor (que pode ser string, número, lista ou até outro dicionário). Desde o Python 3.7, dicionários preservam a ordem de inserção.
Evite KeyError! Acessar alien['pontos'] diretamente quebra o programa se a chave não existir. Use alien.get('pontos', 0) para retornar um valor padrão seguro (ou None se omitido).
Python · Criar, atualizar, remover (del) e ler com .get()
Para iterar sobre dicionários com clareza, escolha o método exato:
for chave, valor in linguagens.items(): percorre pares completos.
for nome in linguagens.keys(): (ou direto for nome in linguagens:) percorre apenas as chaves; combine com sorted() para ordem alfabética.
for lang in set(linguagens.values()): percorre valores eliminando duplicatas com set() (conjuntos).
Aninhamento (Nesting): você pode guardar uma lista de dicionários (ex.: frota de 30 aliens ou catálogo de usuários), uma lista dentro de um dicionário (ex.: ingredientes de um pedido) ou um dicionário dentro de outro (ex.: perfil completo por username).
OFICINA 05 · CAPÍTULO 7
Interatividade com input(), int() e Módulo %
A função input(prompt) pausa o programa, exibe uma mensagem clara ao usuário e sempre devolve uma string. Se você precisar comparar ou calcular com o número digitado, converta antes com int() (ou float()).
Já o operador módulo (%) retorna o resto da divisão inteira (ex.: 4 % 3 == 1), sendo a forma clássica de verificar se um número é par (numero % 2 == 0) ou múltiplo de 10.
Python · Entrada numérica segura e verificação de par/ímpar
numero = int(input("Digite um número inteiro: "))
if numero % 2 == 0:
print(f"{numero} é par.")
else:
print(f"{numero} é ímpar.")
OFICINA 06 · CAPÍTULO 7
Laços while, Flags, break/continue e Listas
Enquanto o laço for percorre uma coleção finita de itens, o laço while continua rodando enquanto uma condição permanecer verdadeira.
Use uma Flag (ativo = True): centraliza múltiplos eventos de parada (como vidas zeradas, tempo esgotado ou comando 'sair') em uma única variável booleana.
break vs. continue:break encerra o laço imediatamente; continue pula o restante da iteração atual e volta ao topo do laço.
Não modifique uma lista dentro de um for: o Python perde a conta dos índices. Para mover itens de nao_confirmados para confirmados ou remover todas as ocorrências de 'gato', use while (while nao_confirmados: ou while 'gato' in pets:).
Cuidado com laço infinito: garanta que ao menos uma variável da condição mude dentro do bloco (no terminal, Ctrl+C interrompe um laço preso).
LABORATÓRIO INTERATIVO · CAPÍTULOS 5, 6 E 7
Simulador de Decisão, Dicionário & Loop
Teste entradas reais para ver a avaliação do bloco if-elif-else, a busca segura com .get() e o estado da flag do laço while.
Ramo if-elif-else
elif idade < 18 → Meia
Resultado de .get()
ingressos.get('vip') → R$ 40
Estado do Laço while
ativo = True (Próx. Ciclo)
Como 15 < 18, o Python executa o ramo elif e ignora o else. A leitura com .get() encontrou a chave 'vip' sem risco de KeyError.
VERIFICAÇÃO DE DOMÍNIO · 4 QUESTÕES
Teste Rápido da Etapa 2
Valide os conceitos dos Capítulos 5, 6 e 7 antes de avançar para Funções e Classes.
1. Quando você deve preferir vários blocos if independentes em vez de uma cadeia if-elif-else?
2. Qual a vantagem de usar usuario.get('cargo', 'Visitante') em vez de usuario['cargo']?
3. Qual é o tipo de dado retornado pela função input() em Python?
4. Por que devemos usar um laço while (e não for) ao remover ou mover itens de uma lista durante a iteração?
CONCLUSÃO DA ETAPA 2
Checklist de Prontidão & Exportação
Marque cada marco concluído; seu progresso fica salvo no navegador.
PRÓXIMA PARADA · ETAPA 3 DE 5
Organização, Arquitetura e Qualidade
Avance para os Capítulos 8 a 11: funções modulares, programação orientada a objetos com classes, leitura/escrita de arquivos JSON, tratamento de exceções e testes com pytest.