Unidade 2 · a via
Mesa ou balcão
A reta vira bifurcação: if, elif, else, and/or/not, match. A ficha escolhe a via; a porta da loja escolhe o recado do clima.
and/or, e o match quando as vias são poucas e nomeadas. A lista à esquerda é o mapa dos blocos.
O interruptor
Arquivo clima.py. Temperatura do dia, aviso na porta da loja:
temp = float(input("Temperatura (°C): "))
if temp > 30:
print("Água gelada na entrada.")
Operadores de comparação: > >= < <= == !=. Um = ainda é atribuição . Dois iguais perguntam igualdade. != é “diferente de”.
Dois-pontos no fim do if. Bloco indentado. Parênteses em volta da pergunta são opcionais. Sem recuo ou sem :, não roda.
Um desenho mental (não precisa desenhar de verdade): oval de início, losango para a pergunta, retângulo para o print. Se a resposta for não, o programa simplesmente segue. Isso é um fluxograma informal — útil quando a ramificação cresce.
Num if, qual símbolo compara dois valores?
Se temp já existe, imprima um aviso só quando for maior que 30.
if temp > 30: print("Água gelada na entrada.")Triagem: uma faixa por vez
Cinema brasileiro (classificação indicativa aproximada). Um único rótulo, não quatro ao mesmo tempo:
idade = int(input("Idade: "))
if idade >= 18:
print("18")
elif idade >= 16:
print("16")
elif idade >= 12:
print("12")
else:
print("livre")
elif só é testado se o de cima falhou. else não pergunta: é o resto. A ordem das faixas importa — se você testar >= 12 primeiro, um adulto cai em “12”.
No código da classificação acima, idade 17 imprime o quê?
Três avisos no mesmo pedido
Três if soltos com limiares de desconto (>= 90, >= 70, >= 50) num pedido de 90 reais disparam todos os avisos: 90 também é ≥ 70 e ≥ 50. Cliente VIP não deve ganhar três cupons empilhados por acidente. Condição mutuamente exclusiva = elif.
Refinar um programa costuma ser: primeiro if e else; depois um elif no meio; depois juntar duas perguntas com or se os dois ramos fazem a mesma coisa. O resultado final pode parecer óbvio — o caminho até ele quase nunca é uma linha só.
Três if valor >= … (90, 70, 50), sem elif. Valor 90. O que acontece?
Juntar perguntas
and: as duas precisam ser True — loja aberta se hora ≥ 8 e hora < 18. or: uma basta — alerta se estoque < 2 ou validade vencida. not inverte. Python para na primeira decisão que já resolve (curto-circuito): y != 0 and x / y evita dividir por zero.
Faixa numa expressão só, que o Python aceita: if 18 <= idade <= 65:. in testa pertinência: if uf in ("SP", "RJ", "MG"):. texto.replace(",", "").isdigit() é um começo antes de int — ponto decimal ainda pede outro cuidado.
String vazia, 0, None e listas vazias valem False num if. A palavra "False" (texto) vale True: tem conteúdo. if resposta is None: para ausência; não use is para comparar números.
hora = 10
if hora >= 8 and hora < 18:
print("aberto")
Com hora = 10 e o if acima, o que o programa imprime?
Bloco que ainda não faz nada
Às vezes o if precisa existir (a gramática exige um corpo) e você ainda não escreveu o conteúdo. A palavra pass ocupa o lugar: “não faça nada, mas o bloco é válido”.
if estoque == 0:
pass # depois: avisar o caixa
Não confundir com continue (unidade 3): aquele pula para a próxima volta de um loop. pass é só um placeholder.
Para que serve pass num if?
Senha da fila: resto 0
Guichê esquerdo para senha par, direito para ímpar. Par = divide por 2 e não sobra nada:
senha = int(input("Senha: "))
if senha % 2 == 0:
print("esquerda")
else:
print("direita")
Dá para embrulhar numa função que devolve bool — útil no if:
def e_par(n):
return n % 2 == 0
Escreva o if (com dois-pontos) que entra quando senha é par. Use %.
if senha % 2 == 0:Várias etiquetas iguais: match
Status de um pedido na loja. Vários valores levam à mesma frase; o resto cai num coringa _ (senão o programa não imprime nada).
status = input("Status: ").strip().lower()
match status:
case "pago" | "aprovado":
print("Separe o estoque.")
case "enviado":
print("Aguarde o rastreio.")
case "entregue":
print("Pedido encerrado.")
case _:
print("Status desconhecido.")
A barra | junta casos. Não precisa de break. if/elif continua válido e, para duas ou três ramificações, muitas vezes mais simples. match brilha quando a lista de rótulos cresce. Nomes são sensíveis a maiúscula: por isso .lower() antes — "Pago" não combina com "pago".
Escreva um match status com pelo menos um case nomeado e um case _.
match status:
case "pago":
print("Separe o estoque.")
case _:
print("Status desconhecido.")Oficina · caixa da lanchonete
P pão de queijo, C café, S suco. Preços a seu gosto. Qualquer outro código: mensagem de erro. Pode ser match ou if/elif. Opcional: se a quantidade for par, um recado “leve 2, o segundo com 10%”. Arquivo: lanchonete.py.
Cole o caixa: input + decisão (if ou match) + print.
item = input("Código: ").strip().upper()
match item:
case "P":
print("Pão de queijo: 8.00")
case "C":
print("Café: 5.00")
case "S":
print("Suco: 9.00")
case _:
print("Código inválido.")