4  Estruturas de Seleção em Python

4.1 O que você saberá se você ler todo este capítulo?

  1. Estruturas de Seleção: Como usar if, elif e else para tomar decisões no seu código
  2. Lógica Condicional: Como combinar condições com operadores and, or e not
  3. Estruturas Aninhadas: Como colocar if dentro de if (e quando evitar isso!)
  4. Match/Case: Uma alternativa moderna ao if/elif/else (Python 3.10+)
  5. Debugging: Como usar o debugger do PyCharm para encontrar e corrigir erros
  6. Teste de Mesa: Como simular a execução do código no papel
  7. Boas Práticas: Quando usar cada tipo de estrutura e como manter o código legível

🎓 Vindo do Capítulo 3? Perfeito! Você já domina variáveis e entrada/saída. Agora é hora de dar vida ao seu código! Este capítulo ensina como fazer o programa tomar decisões baseadas em condições.

🎯 Objetivo deste capítulo: Ao final, você será capaz de criar programas que tomam decisões inteligentes, como um sistema de aprovação, calculadora de descontos ou validador de dados.

⚠️ Importante: Este capítulo é fundamental! Sem estruturas de seleção, seus programas seriam apenas calculadoras simples. Aqui você aprende a dar “inteligência” ao código!

Primeiro bug identificado na história. A imagem mostra um inseto grudado com uma fita adesiva em uma folha de caderno de 1947.

4.2 Parabéns!

Oi de novo! Parabéns por ter aprendido o básico do Python! É incrível como você já conseguiu dominar variáveis, operadores e entrada/saída em tão pouco tempo. Saber programar (isso é diferente de seguir tutoriais, tá?) é uma habilidade super valiosa e pode ser útil em várias áreas da vida.

💡 Dica importante: Não desanime se encontrar desafios. Programação é como aprender a andar de bicicleta - no início parece difícil, mas com prática fica natural!

4.3 Do Lego ao Código Inteligente

Veja só: até agora você aprendeu a usar “blocos básicos” do Python (variáveis, operadores, input(), print()). Imagine como construir com Lego:

Capítulos 1-3: Você aprendeu sobre os blocos básicos (peças retangulares, quadradas, etc.) Capítulo 4 (agora): Você vai aprender sobre as engrenagens e motores que dão vida ao seu Lego!

🎯 Analogia perfeita: Assim como um robô de Lego precisa de engrenagens para tomar decisões (virar à esquerda, parar, acelerar), seus programas Python precisam de estruturas de seleção para tomar decisões inteligentes.

4.4 O que você vai aprender agora

Com as estruturas de seleção (if, elif, else), você poderá criar programas que:

  • Tomam decisões: “Se o usuário tem 18 anos, pode votar”
  • Aplicam regras: “Se o preço for acima de R$ 100, dar 10% de desconto”
  • Validam dados: “Se a senha estiver correta, liberar acesso”
  • Respondem inteligentemente: “Se a nota for 7+, aprovado; senão, reprovado”

4.5 Analogia da Receita de Bolo

Lembra das analogias de receita? Agora imagine uma receita inteligente:

  • Se você tem açúcar e cenoura → faça bolo de cenoura
  • Senão, se você tem cacau e açúcar → faça bolo de chocolate
  • Senão → faça um bolo simples de fubá

🚀 Pronto para começar? Vamos transformar seus programas de “calculadoras simples” em “assistentes inteligentes”!

Imagem de um homem olhando para geladeiras cheias de bebidas em um supermercado.

4.6 Algoritmos Sequenciais vs. Algoritmos de Seleção

4.6.1 O que você já sabe: Algoritmos Sequenciais

Até agora, todos os seus programas seguiam uma sequência linear de instruções:

# Exemplo de algoritmo sequencial (Capítulos 1-3)
nome = input("Digite seu nome: ")
idade = int(input("Digite sua idade: "))
print(f"Olá {nome}, você tem {idade} anos!")

🎯 Característica: Sempre executa todas as linhas, na ordem exata, sem pular nada.

Analogia: É como uma receita de bolo simples:

  1. Misture farinha
  2. Adicione açúcar
  3. Adicione ovos
  4. Leve ao forno

Resultado: Sempre o mesmo bolo, sempre da mesma forma!

4.6.2 O que você vai aprender: Algoritmos de Seleção

Agora seus programas podem tomar decisões e escolher caminhos diferentes:

# Exemplo de algoritmo de seleção (Capítulo 4)
idade = int(input("Digite sua idade: "))
if idade >= 18:
    print("Você pode votar!")
else:
    print("Você ainda não pode votar.")

🎯 Característica: Executa diferentes linhas dependendo de condições.

Analogia: É como um GPS inteligente:

  • Se há trânsito → pegue rota alternativa
  • Senão → pegue rota normal

Resultado: Caminhos diferentes para situações diferentes!

4.6.3 Diferença Fundamental

Algoritmo Sequencial Algoritmo de Seleção
Sempre executa tudo Executa conforme condição
Caminho único Múltiplos caminhos
“Calculadora” “Assistente inteligente”

💡 Resumo: Você saiu de criar “calculadoras” para criar “assistentes que pensam”!

4.6.4 Exemplos da Vida Real

Semáforo Inteligente:

  • Se há muito trânsito → fica verde mais tempo
  • Senão → tempo normal

Loja Online:

  • Se cliente é VIP → frete grátis
  • Senão → frete normal

Sistema de Login:

  • Se senha correta → libera acesso
  • Senão → nega acesso

🚀 Pronto para ver como funciona na prática? Vamos aos exemplos!

4.6.5 Exemplo 1: Sistema de Login

Imagine que você está criando um sistema de login para um app. O usuário digita nome e senha, e o sistema decide se libera ou não o acesso.

🎯 Lógica: Se a senha estiver correta → libera acesso. Senão → nada acontece.


Início
  Texto: nome_usuario, senha_usuario
  
  Escreva("Digite o nome do usuário:")
  Leia(nome_usuario)
  Escreva("Digite a senha:")
  Leia(senha_usuario)
  
  Se a senha_usuario é válida para o nome_usuario, então
    Liberar acesso ao sistema
  Fim Se
Fim

4.6.5.1 Anatomia da Estrutura de Seleção

A estrutura de seleção (linhas 9-11) tem 3 partes essenciais:

  1. 🎯 A condição: Se a senha_usuario é válida para o nome_usuario, então
  2. ⚡ A ação: Liberar acesso ao sistema (linha 10)
  3. 🏁 O fim: Fim Se (linha 11)

💡 Dica: A indentação (espaçamento) na linha 10 mostra que essa ação está “dentro” da condição!

4.6.5.2 Como funciona na prática

Cenário 1: Senha correta ✅

  • Linha 9: Condição é verdadeira
  • Linha 10: Executa “Liberar acesso ao sistema”
  • Resultado: Usuário entra no sistema

Cenário 2: Senha incorreta ❌

  • Linha 9: Condição é falsa
  • Linha 10: Pula “Liberar acesso ao sistema”
  • Resultado: Usuário fica na tela de login

🎯 Resumo: O programa “decide” se executa ou pula a linha 10 baseado na condição!

4.6.6 Exemplo 2: Viagem Inteligente para a Universidade

Agora vamos para um exemplo mais complexo: você quer ir para a universidade, mas precisa ser inteligente sobre o combustível!

🎯 Problema: Não dá para dirigir com tanque vazio, né? Mas também não dá para ir ao posto sem dinheiro!

4.6.6.1 Pseudocódigo da Viagem Inteligente

Início
  Pegue as chaves do carro.
  Ande até o carro.
  Desbloqueie o carro.
  Entre no carro, se sentando no banco do motorista.
  Verifique o trânsito antes de sair de casa.
  Escolha o melhor caminho.
  Verifique se há combustível suficiente no tanque do carro para ir até a Universidade.
  Ligue o carro.
  Respeite as leis de trânsito e limite de velocidade durante todo o trajeto.
  Se o tanque estiver abaixo de 1/4 E se tiver dinheiro o suficiente para pagar pelo combustível então
    Dirija até o posto de combustível.
    Pare em um posto de combustível no meio do caminho e abasteça.
    Pague pelo combustível.
    Saia do posto.
  Fim Se
  Dirija até a Universidade.
  Estacione o carro em um local apropriado e seguro.
  Desligue o motor e retire a chave.
  Saia do carro.
Fim

4.6.6.2 Estrutura de Seleção com Múltiplas Condições

A linha 11 tem uma condição composta:

  • tanque estiver abaixo de 1/4 E tiver dinheiro suficiente
  • Ambas as condições precisam ser verdadeiras para executar as linhas 12-15

4.6.6.3 Cenários Possíveis

Cenário 1: Tanque cheio (acima de 1/4) ✅

  • Condição: Falsa (tanque não está abaixo de 1/4)
  • Ação: Pula linhas 12-15
  • Resultado: Vai direto para a universidade

Cenário 2: Tanque baixo, sem dinheiro ❌

  • Condição: Falsa (tem tanque baixo, mas não tem dinheiro)
  • Ação: Pula linhas 12-15
  • Resultado: Vai direto para a universidade (e reza para chegar!)

Cenário 3: Tanque baixo, com dinheiro ✅

  • Condição: Verdadeira (tanque baixo E tem dinheiro)
  • Ação: Executa linhas 12-15
  • Resultado: Para no posto, abastece, depois vai para a universidade

4.6.6.4 Operadores Lógicos em Ação

Operador Significado Exemplo
E (and) Ambas condições devem ser verdadeiras Tanque baixo E tem dinheiro
OU (or) Pelo menos uma condição deve ser verdadeira Tanque baixo OU tem dinheiro
NÃO (not) Inverte o resultado da condição NÃO tem dinheiro

💡 Dica: O operador E é mais restritivo (mais difícil de satisfazer), o OU é mais permissivo (mais fácil de satisfazer).

4.6.7 Exemplo 3: Sistema de Aprovação de Crédito

Agora vamos para um exemplo mais realista: um banco que precisa decidir se aprova ou nega um empréstimo!

🎯 Lógica: Se o cliente pode pagar → aprova. Senão → nega.

4.6.7.1 Versão Simples: Apenas if e else

Início
  Real: credito_desejado, renda_mensal
  
  Escreva("Digite o valor do crédito desejado: ")
  Leia(credito_desejado)
  
  Escreva("Digite a renda mensal do cliente: ")
  Leia(renda_mensal)
  
  Se credito_desejado < renda_mensal então
      Escreva("Crédito aprovado!")
  Senão
      Escreva("Crédito negado.")    
  Fim Se
Fim

4.6.7.2 Introduzindo o else (senão)

A linha 12 apresenta algo novo: o else (senão)!

💡 Função: Define um caminho alternativo quando a condição do if é falsa.

4.6.7.3 Como funciona na prática

Cenário 1: Crédito menor que renda ✅

  • Linha 10: Condição verdadeira (pode pagar)
  • Linha 11: Executa “Crédito aprovado!”
  • Linhas 12-13: Pula (não precisa do else)

Cenário 2: Crédito maior que renda ❌

  • Linha 10: Condição falsa (não pode pagar)
  • Linha 11: Pula “Crédito aprovado!”
  • Linhas 12-13: Executa “Crédito negado.”

4.6.7.4 Versão Avançada: if, elif e else

Agora vamos adicionar uma situação intermediária:

Início
  Real: credito_desejado, renda_mensal
  
  Escreva("Digite o valor do crédito desejado: ")
  Leia(credito_desejado)
  
  Escreva("Digite a renda mensal do cliente: ")
  Leia(renda_mensal)
  
  Se credito_desejado < renda_mensal então
      Escreva("Crédito aprovado!")
  Senão-se credito_desejado == renda_mensal então
      Escreva("Crédito aprovado, mas com ressalvas.") 
  Senão
      Escreva("Crédito negado.")    
  Fim Se
Fim

4.6.7.5 Introduzindo o elif (senão-se)

A linha 12 apresenta o elif (senão-se):

💡 Função: Testa uma condição alternativa apenas se a condição anterior foi falsa.

4.6.7.6 Cenários com elif

Cenário 1: Crédito menor que renda ✅

  • Linha 10: Verdadeira → Executa linha 11
  • Linhas 12-15: Pula todas (não precisa testar mais)

Cenário 2: Crédito igual à renda ⚠️

  • Linha 10: Falsa → Testa linha 12
  • Linha 12: Verdadeira → Executa linha 13
  • Linhas 14-15: Pula (não precisa do else)

Cenário 3: Crédito maior que renda ❌

  • Linha 10: Falsa → Testa linha 12
  • Linha 12: Falsa → Executa linha 15 (else)

🎯 Resumo: O programa testa as condições na ordem e executa apenas a primeira que for verdadeira!

4.6.8 Resumo: Estruturas de Seleção em Pseudocódigo

🎯 Calma! Sei que pode parecer confuso no início, mas você já entendeu o conceito! Vamos organizar o que aprendemos:

4.7 As 3 Estruturas Básicas

Estrutura Função Exemplo
se Testa uma condição Se tem dinheiro → compra
senão-se Testa condição alternativa Senão-se tem cartão → compra no crédito
senão Ação padrão quando tudo falha Senão → não compra nada

4.8 Analogia da Loja de Doces

Imagine que você tem R$ 100,00 e está numa loja de doces:

Se preço do chiclete <= R$ 20,00 então
    Compre o chiclete
Senão-se preço do pirulito <= R$ 20,00 então
    Compre o pirulito
Senão-se preço da paçoca <= R$ 20,00 então
    Compre a paçoca
Senão
     embora da loja ( tudo caro!)
Fim Se

4.9 Regras Importantes

  1. Ordem importa: Testa condições na sequência
  2. Primeiro vence: Executa apenas a primeira condição verdadeira
  3. Flexibilidade: Pode usar apenas if, ou if + else, ou if + elif + else
  4. Múltiplos elif: Pode ter vários elif em sequência

4.10 Próximo Passo

Agora que você entende a lógica no pseudocódigo, vamos ver como escrever isso em Python!

💡 Dica: O conceito é o mesmo, só muda a sintaxe!

4.11 Estruturas de Seleção em Python

🎉 Agora é hora da prática! Você já entendeu a lógica no pseudocódigo. Vamos ver como escrever isso em Python!

4.11.1 Tradução Pseudocódigo → Python

Pseudocódigo Python
se if
senão-se elif (else-if)
senão else
então : (dois pontos)
Fim Se (indentação automática)

💡 Dica: O conceito é idêntico! Só muda a sintaxe.

4.11.2 Exemplo 1: Apenas if

Vamos começar simples:

idade = int(input("Digite a sua idade: "))

if idade >= 16:
    print("Você pode votar nas eleições!")

4.11.2.1 Como funciona

  1. Linha 1: Pede a idade e converte para inteiro
  2. Linha 3: Testa se idade >= 16
  3. Linha 4: Se verdadeiro, executa o print (com indentação!)

4.11.2.2 Teste você mesmo

Teste 1: Digite 14 → Nada aparece (condição falsa) Teste 2: Digite 16 → Aparece “Você pode votar!” (condição verdadeira)

4.11.3 Exemplo 2: if com múltiplas ações

num1 = int(input("Digite o primeiro número: "))
num2 = int(input("Digite o segundo número: "))

if num1 > num2:
    print(f"{num1} é maior que {num2}.")
    print(f"A diferença entre {num1} e {num2} é {num1 - num2}.")
    print(f"A soma de {num1} e {num2} é {num1 + num2}.")
    
print("Obrigado!")

4.11.3.1 Como funciona

  • Linhas 4-6: Só executam se num1 > num2
  • Linha 8: Sempre executa (não tem indentação)

4.11.3.2 Teste os cenários

  1. num1=0, num2=5: Pula linhas 4-6, mostra “Obrigado!”
  2. num1=9, num2=5: Executa linhas 4-6 + “Obrigado!”
  3. num1=5, num2=5: Pula linhas 4-6, mostra “Obrigado!”

🎯 Resumo: Indentação = “dentro da condição”

4.11.4 Exemplo 3: if e else

Agora vamos adicionar o else - o caminho alternativo!

nota1 = float(input("Digite a nota da primeira prova: "))
nota2 = float(input("Digite a nota da segunda prova: "))
media = (nota1 + nota2) / 2.0

if media >= 7:
    print("Parabéns, você foi aprovado com média", media)
    print("Continue estudando e se preparando para os próximos desafios.")
else:
    print("Infelizmente, você foi reprovado com média", media)
    print("Você precisa estudar mais para a próxima oportunidade.")

4.11.4.1 Como funciona

  1. Linhas 1-3: Pede as notas e calcula a média
  2. Linha 5: Testa se média >= 7
  3. Linhas 6-7: Se verdadeiro → mensagem de aprovação
  4. Linhas 8-9: Se falso → mensagem de reprovação

💡 Dica: Com else, sempre executa uma das duas opções!

4.11.4.2 Teste os cenários

Teste 1: nota1=7.0, nota2=7.0

  • Média = 7.0
  • Condição: Verdadeira (7.0 >= 7)
  • Resultado: “Parabéns, você foi aprovado!”

Teste 2: nota1=9.0, nota2=7.0

  • Média = 8.0
  • Condição: Verdadeira (8.0 >= 7)
  • Resultado: “Parabéns, você foi aprovado!”

Teste 3: nota1=6.0, nota2=1.0

  • Média = 3.5
  • Condição: Falsa (3.5 < 7)
  • Resultado: “Infelizmente, você foi reprovado…”

🎯 Resumo: Sempre aparece uma mensagem (nunca zero, nunca duas!)

4.11.5 Exemplo 4: if, elif e else

Agora vamos adicionar o elif - condições intermediárias!

🎯 Objetivo: Criar um sistema de notas mais realista com 3 situações:

  • Média >= 7.0 → Aprovado
  • Média >= 5.0 → Recuperação
  • Média < 5.0 → Reprovado
nota1 = float(input("Digite a nota da primeira prova: "))
nota2 = float(input("Digite a nota da segunda prova: "))
media = (nota1 + nota2) / 2.0

if media >= 7:
    print("Parabéns, você foi aprovado com média", media)
    print("Continue estudando e se preparando para os próximos desafios.")
elif media >= 5:
    print("Você está em recuperação com média", media)
    print("Você precisa estudar mais para a próxima prova.")
else:
    print("Infelizmente, você foi reprovado com média", media)
    print("Você precisa estudar mais para a próxima oportunidade.")

4.11.5.1 Como funciona

  1. Linha 5: Testa se média >= 7
  2. Linha 8: Se a primeira falhou, testa se média >= 5
  3. Linha 11: Se todas falharam, executa o else

💡 Dica importante: Como o primeiro if falhou, já sabemos que media < 7. Por isso não precisamos escrever elif media >= 5 and media < 7!

4.11.5.2 Teste os cenários

Teste 1: nota1=7.0, nota2=7.0 (média=7.0)

  • Linha 5: Verdadeira → “Aprovado!”

Teste 2: nota1=10.0, nota2=2.0 (média=6.0)

  • Linha 5: Falsa → Testa linha 8
  • Linha 8: Verdadeira → “Recuperação!”

Teste 3: nota1=5.0, nota2=1.0 (média=3.0)

  • Linha 5: Falsa → Testa linha 8
  • Linha 8: Falsa → “Reprovado!”

4.11.5.3 Experimento Importante

🖐 Teste: Troque elif media >= 5: por if media >= 5:. O que acontece?

Resultado: Com if separado, pode executar duas mensagens! Com elif, executa apenas uma.

4.11.6 Exemplo 5: Múltiplos elif

nota1 = float(input("Digite a nota da primeira prova: "))
nota2 = float(input("Digite a nota da segunda prova: "))
media = (nota1 + nota2) / 2.0

if media >= 9.5:
    print("Parabéns, a sua nota foi excelente! Você foi aprovado com média", media)
elif media >= 8:
    print("Parabéns, a sua nota foi muito boa! Você foi aprovado com média", media)
elif media >= 7:
    print("Parabéns, você foi aprovado com média", media)
elif media >= 5:
    print("Você está em recuperação com média", media)
else:
    print("Infelizmente, você foi reprovado com média", media)

4.11.6.1 Sistema de Notas Detalhado

Média Situação Mensagem
>= 9.5 Excelente “Nota excelente!”
>= 8.0 Muito Boa “Nota muito boa!”
>= 7.0 Aprovado “Aprovado!”
>= 5.0 Recuperação “Recuperação!”
< 5.0 Reprovado “Reprovado!”

🎯 Resumo: Pode ter quantos elif quiser, mas executa apenas a primeira condição verdadeira!

4.11.7 Exemplo 6: Estruturas Aninhadas (if dentro de if)

Agora vamos para um conceito mais avançado: colocar if dentro de outro if!

🎯 Quando usar: Quando você tem condições que dependem umas das outras.

4.11.7.1 Exemplo Simples: Idade e Bebida

idade = int(input("Qual é a sua idade? "))

if idade >= 18:
    print("Você é maior de idade.")
    if idade >= 21:
        print("Você pode beber nos Estados Unidos.")
else:
    print("Você é menor de idade.")

4.11.7.2 Como funciona

Lógica: Só testa se pode beber se já for maior de idade!

  1. Teste idade >= 18:
    • Se falso → “Menor de idade”
    • Se verdadeiro → “Maior de idade” + testa se >= 21
  2. Teste idade >= 21: (só se passou no primeiro teste)
    • Se verdadeiro → “Pode beber nos EUA”

4.11.7.3 Teste os cenários

Idade = 15:

  • Primeiro if: Falso → “Menor de idade”

Idade = 19:

  • Primeiro if: Verdadeiro → “Maior de idade”
  • Segundo if: Falso → (não mostra nada sobre bebida)

Idade = 23:

  • Primeiro if: Verdadeiro → “Maior de idade”
  • Segundo if: Verdadeiro → “Pode beber nos EUA”

⚠️ Aviso: Estruturas aninhadas podem ficar confusas! Use com moderação.

4.11.8 Exemplo 7: Estruturas Muito Aninhadas (⚠️ Cuidado!)

nota1 = float(input("Digite a primeira nota: "))
nota2 = float(input("Digite a segunda nota: "))
nota3 = float(input("Digite a terceira nota: "))

if nota1 >= 7:
    if nota2 >= 7:
        if nota3 >= 7:
            print("Parabéns, você foi aprovado(a)!")
        else:
            print("Sua nota na terceira avaliação foi abaixo da média.")
    else:
        print("Sua nota na segunda avaliação foi abaixo da média.")
else:
    print("Sua nota na primeira avaliação foi abaixo da média.")

4.11.8.1 Como funciona

Lógica: Só testa a próxima nota se a anterior foi >= 7!

  1. Teste nota1 >= 7:
    • Se falso → “Primeira nota abaixo”
    • Se verdadeiro → testa nota2
  2. Teste nota2 >= 7: (só se nota1 >= 7)
    • Se falso → “Segunda nota abaixo”
    • Se verdadeiro → testa nota3
  3. Teste nota3 >= 7: (só se nota1 e nota2 >= 7)
    • Se falso → “Terceira nota abaixo”
    • Se verdadeiro → “Aprovado!”

4.11.8.2 Teste os cenários

nota1 nota2 nota3 Resultado
5 8 10 “Primeira nota abaixo”
10 5 10 “Segunda nota abaixo”
10 10 5 “Terceira nota abaixo”
10 10 10 “Aprovado!”

🚨 Problema: Código difícil de ler! Há alternativas melhores.

4.11.9 Exemplo 8: Blocos Independentes

idade = int(input("Qual é a sua idade? "))

# Primeiro bloco: Verifica maioridade
if idade < 18:
    print("Você é menor de idade!")
else:
    print("Você é maior de idade!")

# Segundo bloco: Verifica média (independente do primeiro!)
media = float(input("Qual é a sua média na disciplina? "))

if media >= 7:
    print("Parabéns, você foi aprovado!")
elif media >= 5:
    print("Você está em recuperação!")
else:
    print("Você foi reprovado!")

# Terceiro bloco: Verifica saldo (independente dos anteriores!)
saldo = float(input("Qual é o seu saldo? "))

if saldo < 0:
    print("Saldo negativo!")
elif saldo == 0:
    print("Saldo zerado!")
else:
    print("Saldo positivo!")

4.11.9.1 Vantagens dos Blocos Independentes

  1. Mais legível: Cada bloco tem uma responsabilidade
  2. Mais fácil de debugar: Problemas isolados
  3. Mais flexível: Pode modificar um sem afetar outros

🎯 Resumo: Prefira blocos independentes a estruturas muito aninhadas!

4.12 Uma Alternativa Moderna: match/case

⚠️ Importante: O match só existe a partir do Python 3.10 (2021). Se você usa uma versão anterior, pule esta seção!

4.12.1 O que é o match?

O match é uma alternativa moderna ao if/elif/else para casos específicos. Pense nele como um “super-if” mais limpo e organizado.

💡 Analogia: É como escolher uma plataforma na estação de trem:

  • Cada trem para em uma plataforma específica
  • Você vai para a plataforma do seu destino
  • Não há confusão ou múltiplas opções

4.12.2 Quando usar match?

  • Comparações simples: Quando você compara uma variável com valores específicos
  • Múltiplas opções: Quando você tem muitas condições elif
  • Condições complexas: Para comparações com and, or, etc., use if

🚀 Vamos ver na prática!

Code
### 🎯 Exemplo 1: Estação de Trem

```python
destino = "Plataforma 3"

match destino:
    case "Plataforma 1":
        print("Expresso para Hogwarts")
    case "Plataforma 2":
        print("Trem diário para Nárnia")
    case "Plataforma 3":
        print("Trem regional para a Terra Média")
    case _:
        print("Nenhum trem disponível.")
```

#### 🧩 Como funciona

1. **match destino:** - Define qual variável vamos comparar
2. **case "Plataforma 1":** - Se destino for "Plataforma 1"
3. **case _:** - Caso padrão (como else)

#### 🔄 Teste os cenários

- destino = "Plataforma 1""Expresso para Hogwarts"
- destino = "Plataforma 2""Trem diário para Nárnia"  
- destino = "Plataforma 3""Trem regional para a Terra Média"
- destino = "Plataforma 5""Nenhum trem disponível."

4.12.3 Comparação: match vs if/elif/else

O mesmo código com if/elif/else seria:

destino = "Plataforma 3"

if destino == "Plataforma 1":
    print("Expresso para Hogwarts")
elif destino == "Plataforma 2":
    print("Trem diário para Nárnia")
elif destino == "Plataforma 3":
    print("Trem regional para a Terra Média")
else:
    print("Nenhum trem disponível.")

4.12.3.1 Vantagens do match

  1. Mais limpo: Menos repetição da variável
  2. Mais legível: Estrutura mais clara
  3. Mais moderno: Sintaxe mais elegante

4.12.3.2 ️ Limitações do match

  1. Python 3.10+: Só funciona em versões recentes
  2. Comparações simples: Não funciona com condições complexas
  3. Menos flexível: Para lógica complexa, use if

💡 Dica: Use match para escolhas simples, if para lógica complexa!

Code
### 🎯 Exemplo 2: Sistema de Notas com `match`

```python
nota = 8.5

match nota:
    case 10:
        print("Nota perfeita!")
    case 9 | 8:
        print("Nota excelente!")
    case 7:
        print("Nota boa!")
    case 6:
        print("Nota regular!")
    case 5:
        print("Nota suficiente!")
    case _:
        print("Nota insuficiente!")
```

#### 🧩 Recursos Avançados do `match`

1. **Múltiplos valores:** `case 9 | 8:` (9 OU 8)
2. **Caso padrão:** `case _:` (qualquer outro valor)
3. **Valores específicos:** `case 10:` (exatamente 10)

> 🎯 **Resumo:** `match` é uma ferramenta poderosa para escolhas simples!

4.12.4 Resumo: Quando usar cada um?

Situação Use
Comparações simples com valores específicos match
Condições complexas (and, or, comparações) if/elif/else
Uma única condição if
Duas opções (sim/não) if/else
Múltiplas opções if/elif/else

💡 Dica: Comece com if/elif/else até dominar. Depois explore match para casos específicos!

4.13 Comentários em Python

💡 Você notou? No código acima há linhas cinzas que começam com #. Essas são comentários!

4.13.1 O que são comentários?

Comentários são textos em linguagem humana (português, inglês, etc.) que explicam o código para outros programadores (ou para você mesmo no futuro).

🎯 Importante: O Python ignora os comentários! Eles são apenas para humanos.

4.13.2 Por que usar comentários?

  1. Explicar lógica complexa: “Por que fiz essa verificação?”
  2. Documentar decisões: “Escolhi este método porque…”
  3. Facilitar manutenção: “Aqui atualizo a versão do sistema”
  4. Ajudar outros programadores: “Este código faz X, Y e Z”

4.13.3 Tipos de comentários

4.13.3.1 1. Comentário de uma linha

# Este é um comentário de uma linha
idade = 18  # Comentário no final da linha

4.13.3.2 2. Comentário de múltiplas linhas

"""
Este é um comentário de múltiplas linhas.
Use quando o comentário for muito longo
ou quando quiser explicar algo complexo.
"""

4.13.4 Exemplos práticos

# Verifica se o usuário pode votar
idade = int(input("Digite sua idade: "))

if idade >= 16:  # Idade mínima para votar no Brasil
    print("Você pode votar!")
else:
    print("Você ainda não pode votar.")

# TODO: Adicionar verificação de CPF
# FIXME: Corrigir bug na validação de idade

4.13.5 Dicas importantes

  1. Seja claro: Escreva comentários que realmente ajudem
  2. Não óbvio: Não comente coisas óbvias como x = 5 # atribui 5 a x
  3. Atualize: Mantenha comentários atualizados com o código
  4. Use em inglês: Para código profissional, prefira inglês

🎯 Resumo: Comentários são sua ferramenta para tornar o código mais legível e profissional!

Início
  Inteiro: num1, num2, soma

  Escreva("Digite o primeiro número: ")
  Leia(num1)
  
  Escreva("Digite o segundo número: ")
  Leia(num2)
  
  soma = num1 + num2
  Escreva("O resultado da soma é: ", soma)
Fim

Ora, como transcreveríamos este exemplo? O mesmíssimo algoritmo acima, mas escrito em Python, seria assim:

print("Digite o primeiro número: ")
num1 = int(input())

print("Digite o segundo número: ")
num2 = int(input())

soma = num1 + num2
print("A soma dos números é: ", soma)

Agora, quais são as semelhanças e diferenças entre os dois algoritmos? Comecemos pelas diferenças: as palavras Início e Fim saíram de cena. Além disso, a linha 2 do pseudocódigo que declarava as três variáveis deixou de existir: em Python, isto não é mais necessário. Finalmente, a função Escreva deu lugar à print, e a Leia deu lugar à int(input()).

Quanto às semelhanças, temos várias delas. Primeiro, a ordem do algoritmo é mantida. A organização também: veja como as linhas estão organizadas. O mesmo se aplica às mensagens e à operação de soma. Por isso que começar a escrever algoritmos em Python é mais simples do que parece a princípio: se você sabe como os algoritmos funcionam de forma geral e sabe interpretar pseudocódigo, então rapidamente você também conseguirá escrever algoritmos utilizando Python.

Mas, e aí? Como testamos isso usando o PyCharm? Vamos testar aqui por partes, beleza?

4.14 Teste de mesa e debugging

Conforme os nossos códigos vão aumentando em complexidade é comum que tenhamos erros e que precisemos investigá-los. É para isso que existem duas técnicas diferentes, mas importantes: o teste de mesa e o debug (ou debugging).

4.14.1 Teste de Mesa

🎯 O que é: Simular a execução do código no papel, linha por linha!

Teste de mesa é uma técnica para verificar se seu algoritmo está correto antes de executá-lo no computador. É como “fingir ser o Python” e seguir cada instrução manualmente.

4.14.2 Como fazer teste de mesa?

  1. Pegue papel e caneta (ou use uma tabela no computador)
  2. Siga linha por linha o seu código
  3. Anote os valores das variáveis a cada passo
  4. Verifique se a lógica está correta

4.14.3 Exemplo prático

idade = int(input("Digite sua idade: "))
if idade >= 18:
    print("Maior de idade")
else:
    print("Menor de idade")

4.14.3.1 Tabela de Teste de Mesa

Linha Código idade Condição Resultado
1 idade = int(input(...)) 20 - -
2 if idade >= 18: 20 Verdadeira -
3 print("Maior de idade") 20 - “Maior de idade”

4.14.4 Analogia: Construção de Casa

Antes de construir uma casa, você faz um planta para ver se tudo faz sentido:

  • Quantos cômodos?
  • Onde ficam as portas?
  • Há problemas de acesso?

Teste de mesa é a “planta” do seu código! Você verifica se a lógica está correta antes de “construir” (executar).

4.14.5 Dicas importantes

  1. Faça sempre: Especialmente com código complexo
  2. Anote tudo: Valores das variáveis, condições, resultados
  3. Teste casos diferentes: Valores normais, extremos, inválidos
  4. Use uma tabela: Organize melhor as informações

🎯 Resumo: Teste de mesa é sua ferramenta para encontrar erros antes de executar o código!

Imagem de um homem olhando para geladeiras cheias de bebidas em um supermercado.
Créditos: Using Trace Tables @ 101computing.net.

4.14.6 Debugging

🎯 O que é: Encontrar e corrigir erros no código usando ferramentas automatizadas!

Debugging é o processo de identificar e corrigir erros em código já implementado. É como um teste de mesa automatizado - o computador faz o trabalho pesado para você!

4.14.7 Como funciona o debugging?

  1. Breakpoints: Marca onde o código deve parar
  2. Step by step: Executa linha por linha
  3. Inspeção: Vê os valores das variáveis em tempo real
  4. Análise: Identifica onde está o problema

4.14.8 Exemplo prático

Vamos debugar este código:

nota1 = float(input("Digite a primeira nota: "))
nota2 = float(input("Digite a segunda nota: "))
nota3 = float(input("Digite a terceira nota: "))

if nota1 >= 7:
    if nota2 >= 7:
        if nota3 >= 7:
            print("Parabéns, você foi aprovado(a)!")
        else:
            print("Sua nota na terceira avaliação foi abaixo da média.")
    else:
        print("Sua nota na segunda avaliação foi abaixo da média.")
else:
    print("Sua nota na primeira avaliação foi abaixo da média.")
nota1 = float(input("Digite a primeira nota: "))
nota2 = float(input("Digite a segunda nota: "))
nota3 = float(input("Digite a terceira nota: "))

if nota1 >= 7:
    if nota2 >= 7:
        if nota3 >= 7:
            print("Parabéns, você foi aprovado(a)!")
        else:
            print("Sua nota na terceira avaliação foi abaixo da média.")
    else:
        print("Sua nota na segunda avaliação foi abaixo da média.")
else:
    print("Sua nota na primeira avaliação foi abaixo da média.")

4.14.8.1 🖥️ Como usar o debugger no PyCharm

  1. Coloque o código em um arquivo .py
  2. Clique no botão de debug (inseto verde)
  3. Adicione breakpoints clicando na margem esquerda
  4. Execute passo a passo para ver o que acontece

Código de verificação de notas colado dentro de um arquivo chamado main.py dentro do PyCharm. Realçado, o botão com um desenho de um inseto na cor verde aparece realçado.

4.14.8.2 Como adicionar breakpoints

  1. Clique na margem esquerda da linha onde quer parar
  2. Aparece um círculo vermelho - esse é o breakpoint
  3. Execute o debugger - o código para no breakpoint
  4. Inspecione as variáveis e continue passo a passo

A linha 5 possui um espaço vazio à sua direita, entre o número 5 e o código. Ao clicar neste espaço vazio um círculo vermelho aparece.
TipQuer dominar estruturas de decisão?

Criei o batel.tech, um site gratuito com exercícios práticos de Python para complementar seus estudos. Lá você encontra:

  • Exercícios progressivos sobre estruturas condicionais (if/elif/else)
  • Feedback imediato para suas soluções
  • Acompanhamento por IA para te ajudar quando travar
  • 💬 Comunidade no Discord para trocar ideias

É um projeto pessoal meu (Prof. Wellington) para te dar mais insumos e ajudar na jornada Python! 🐍

4.14.8.3 Interface do Debugger

Quando o código para no breakpoint, você verá uma interface como esta:

O debugger está visível na parte inferior da tela. Aparecem os valores das variáveis digitadas e um conjunto adicional de botões na parte inferior da tela.

4.14.8.4 Funcionalidades do Debugger

  1. 🟣 Variáveis (Roxo): Mostra os valores atuais das variáveis
  2. 🟠 Controles (Laranja): Botões para avançar/voltar no código
  3. 🟡 Comandos (Amarelo): Parar, continuar, interromper o debugger

4.14.8.5 Como usar os controles

  • Step Over: Executa a linha atual e vai para a próxima
  • Step Into: Entra dentro de funções (se houver)
  • Step Out: Sai da função atual
  • Continue: Continua até o próximo breakpoint

4.14.8.6 Dica avançada

Na área de variáveis, você pode testar expressões:

  • Digite nota1 >= 7 e pressione Enter
  • Veja o resultado da comparação em tempo real!
  • Isso ajuda a entender se suas condições estão funcionando

🎯 Resumo: O debugger é sua ferramenta para entender exatamente o que está acontecendo no seu código!

4.15 Exercícios Práticos (respostas no final da página)

🚀 Hora de praticar! Aqui estão 25 exercícios organizados por dificuldade. Cada exercício tem solução completa com explicação linha por linha!

4.15.1 MUITO FÁCIL (Nível 1)

1. Par ou Ímpar Crie um programa que pede um número e diz se é par ou ímpar.

  • Exemplo: Input → 7 | Output → 7 é ímpar

2. Positivo, Negativo ou Zero Crie um programa que pede um número e diz se é positivo, negativo ou zero.

  • Exemplo: Input → -5 | Output → -5 é negativo

3. Maioridade Crie um programa que pede a idade e diz se a pessoa é maior ou menor de idade.

  • Exemplo: Input → 17 | Output → Você é menor de idade

4. Aprovação Simples Crie um programa que pede uma nota e diz se o aluno foi aprovado (nota >= 7) ou reprovado.

  • Exemplo: Input → 8.5 | Output → Parabéns! Você foi aprovado!

5. Calculadora de IMC Crie um programa que pede peso e altura, calcula o IMC e diz se está abaixo do peso (IMC < 18.5), normal (18.5 <= IMC < 25) ou acima do peso (IMC >= 25).

  • Exemplo: Input → 70, 1.75 | Output → IMC: 22.86 - Peso normal

4.15.2 FÁCIL (Nível 2)

6. Sistema de Notas Crie um programa que pede uma nota e classifica como: Excelente (9-10), Bom (7-8.9), Regular (5-6.9) ou Insuficiente (0-4.9).

  • Exemplo: Input → 8.5 | Output → Nota: 8.5 - Classificação: Bom

7. Calculadora de Desconto Crie um programa que pede o preço de um produto e aplica desconto de 10% se o preço for maior que R$ 100, senão aplica 5%.

  • Exemplo: Input → 150 | Output → Preço original: R$ 150.00, Preço com desconto: R$ 135.00

8. Verificação de Aposentadoria Crie um programa que pede idade e gênero (M/F) e diz se pode se aposentar (mulheres: 60+, homens: 65+).

  • Exemplo: Input → 65, M | Output → Você pode se aposentar!

9. Classificação de Triângulo Crie um programa que pede 3 lados de um triângulo e diz se é equilátero, isósceles ou escaleno.

  • Exemplo: Input → 3, 3, 3 | Output → Triângulo equilátero

10. Verificação de Ano Bissexto Crie um programa que pede um ano e diz se é bissexto ou não.

  • Exemplo: Input → 2024 | Output → 2024 é um ano bissexto

4.15.3 MÉDIO (Nível 3)

11. Sistema de Login Crie um programa que pede usuário e senha. Se ambos estiverem corretos (usuário: “admin”, senha: “123”), libera acesso.

  • Exemplo: Input → admin, 123 | Output → Acesso liberado!

12. Calculadora de Frete Crie um programa que pede o peso da encomenda e calcula o frete: até 1kg = R$ 10, até 5kg = R$ 20, acima = R$ 30.

  • Exemplo: Input → 3.5 | Output → Peso: 3.5kg, Frete: R$ 20.00

13. Sistema de Crédito Crie um programa que pede renda mensal e valor do empréstimo. Aprova se o empréstimo for até 30% da renda.

  • Exemplo: Input → 5000, 1200 | Output → Crédito aprovado! Limite: R$ 1500.00

14. Classificação de Idade Crie um programa que pede a idade e classifica como: criança (0-12), adolescente (13-17), adulto (18-59) ou idoso (60+).

  • Exemplo: Input → 25 | Output → 25 anos - Adulto

15. Calculadora de Salário Crie um programa que pede horas trabalhadas e valor por hora. Calcula salário com hora extra (50% a mais para horas > 40).

  • Exemplo: Input → 45, 20 | Output → Salário: R$ 950.00 (5h extras)

4.15.4 DIFÍCIL (Nível 4)

16. Sistema de Estacionamento Crie um programa que pede tipo de veículo (carro/moto) e tempo em horas. Calcula o valor: carro R$ 5/h, moto R$ 3/h, com desconto de 20% para mais de 8h.

  • Exemplo: Input → carro, 10 | Output → Valor a pagar: R$ 40.00 (com desconto)

17. Calculadora de Imposto de Renda Crie um programa que pede o salário e calcula o imposto: isento (até R$ 1903), 7.5% (até R$ 2826), 15% (até R$ 3751), 22.5% (até R$ 4664), 27.5% (acima).

  • Exemplo: Input → 3000 | Output → Salário: R$ 3000.00, Imposto: R$ 225.00

18. Sistema de Biblioteca Crie um programa que pede tipo de usuário (estudante/professor/geral) e dias de atraso. Calcula multa: estudante R$ 0.50/dia, professor R$ 0.30/dia, geral R$ 1.00/dia.

  • Exemplo: Input → estudante, 5 | Output → Multa: R$ 2.50

19. Calculadora de Combustível Crie um programa que pede tipo de combustível (gasolina/etanol) e litros. Calcula o valor com desconto de 5% para mais de 20 litros.

  • Exemplo: Input → gasolina, 25 | Output → Valor: R$ 95.00 (com desconto)

20. Sistema de Notas Escolares Crie um programa que pede 3 notas e calcula a média. Classifica como: A (9-10), B (7-8.9), C (5-6.9), D (3-4.9), F (0-2.9).

  • Exemplo: Input → 8, 7, 9 | Output → Média: 8.0 - Conceito: B

4.15.5 MUITO DIFÍCIL (Nível 5)

21. Sistema de Banco Crie um programa que simula operações bancárias: depósito, saque, consulta saldo. Com validações de saldo insuficiente e limite de saque.

  • Exemplo: Input → depósito, 500 | Output → Depósito realizado! Saldo atual: R$ 1500.00

22. Calculadora de Juros Compostos Crie um programa que pede capital inicial, taxa de juros e tempo. Calcula o montante e classifica o investimento como conservador, moderado ou arriscado.

  • Exemplo: Input → 1000, 12, 24 | Output → Montante: R$ 1268.24 - Investimento: Moderado

23. Sistema de Reserva de Hotel Crie um programa que pede tipo de quarto (single/double/suite), número de noites e temporada (alta/baixa). Calcula o valor com descontos e taxas.

  • Exemplo: Input → suite, 3, alta | Output → Valor total: R$ 450.00 (incluindo taxas)

24. Calculadora de Financiamento Crie um programa que pede valor do imóvel, renda mensal e prazo. Calcula a prestação e aprova se for até 30% da renda.

  • Exemplo: Input → 300000, 8000, 240 | Output → Prestação: R$ 2,200.00 - Financiamento aprovado!

25. Sistema de Vendas Crie um programa que pede produto, quantidade e tipo de cliente (vip/normal). Calcula o valor com descontos progressivos e frete grátis para VIPs.

  • Exemplo: Input → notebook, 2, vip | Output → Valor: R$ 3,200.00 (com desconto VIP) - Frete grátis!

4.16 Respostas e Explicações

4.16.1 MUITO FÁCIL (Nível 1)

1. Par ou Ímpar

# Solicita que o usuário digite um número
numero = int(input("Digite um número: "))

# Verifica se o número é par ou ímpar
if numero % 2 == 0:
    print(f"{numero} é par")
else:
    print(f"{numero} é ímpar")

Explicação linha por linha:

  • Linha 2: numero = int(input("Digite um número: ")) - Solicita um número ao usuário e converte para inteiro usando int()
  • Linha 5: if numero % 2 == 0: - Verifica se o resto da divisão por 2 é zero (operador % retorna o resto da divisão)
  • Linha 6: print(f"{numero} é par") - Se a condição for verdadeira, imprime que o número é par
  • Linha 7: else: - Se a condição do if for falsa, executa o bloco else
  • Linha 8: print(f"{numero} é ímpar") - Imprime que o número é ímpar

2. Positivo, Negativo ou Zero

# Solicita que o usuário digite um número
numero = float(input("Digite um número: "))

# Verifica se o número é positivo, negativo ou zero
if numero > 0:
    print(f"{numero} é positivo")
elif numero < 0:
    print(f"{numero} é negativo")
else:
    print(f"{numero} é zero")

Explicação linha por linha:

  • Linha 2: numero = float(input("Digite um número: ")) - Solicita um número e converte para float (permite decimais)
  • Linha 5: if numero > 0: - Verifica se o número é maior que zero (positivo)
  • Linha 6: print(f"{numero} é positivo") - Se verdadeiro, imprime que é positivo
  • Linha 7: elif numero < 0: - Se o primeiro if for falso, verifica se é menor que zero (negativo)
  • Linha 8: print(f"{numero} é negativo") - Se verdadeiro, imprime que é negativo
  • Linha 9: else: - Se ambos os if anteriores forem falsos (número = 0)
  • Linha 10: print(f"{numero} é zero") - Imprime que é zero

3. Maioridade

# Solicita que o usuário digite sua idade
idade = int(input("Digite sua idade: "))

# Verifica se é maior ou menor de idade
if idade >= 18:
    print("Você é maior de idade")
else:
    print("Você é menor de idade")

Explicação linha por linha:

  • Linha 2: idade = int(input("Digite sua idade: ")) - Solicita a idade e converte para inteiro
  • Linha 5: if idade >= 18: - Verifica se a idade é maior ou igual a 18 (maioridade no Brasil)
  • Linha 6: print("Você é maior de idade") - Se verdadeiro, imprime que é maior de idade
  • Linha 7: else: - Se falso (idade < 18)
  • Linha 8: print("Você é menor de idade") - Imprime que é menor de idade

4. Aprovação Simples

# Solicita que o usuário digite a nota
nota = float(input("Digite sua nota: "))

# Verifica se foi aprovado ou reprovado
if nota >= 7:
    print("Parabéns! Você foi aprovado!")
else:
    print("Infelizmente, você foi reprovado.")

Explicação linha por linha:

  • Linha 2: nota = float(input("Digite sua nota: ")) - Solicita a nota e converte para float (permite decimais)
  • Linha 5: if nota >= 7: - Verifica se a nota é maior ou igual a 7 (critério de aprovação)
  • Linha 6: print("Parabéns! Você foi aprovado!") - Se verdadeiro, imprime mensagem de aprovação
  • Linha 7: else: - Se falso (nota < 7)
  • Linha 8: print("Infelizmente, você foi reprovado.") - Imprime mensagem de reprovação

5. Calculadora de IMC

# Solicita peso e altura do usuário
peso = float(input("Digite seu peso (kg): "))
altura = float(input("Digite sua altura (m): "))

# Calcula o IMC
imc = peso / (altura ** 2)

# Classifica o IMC
if imc < 18.5:
    print(f"IMC: {imc:.2f} - Abaixo do peso")
elif imc < 25:
    print(f"IMC: {imc:.2f} - Peso normal")
else:
    print(f"IMC: {imc:.2f} - Acima do peso")

Explicação linha por linha:

  • Linha 2: peso = float(input("Digite seu peso (kg): ")) - Solicita o peso em quilogramas
  • Linha 3: altura = float(input("Digite sua altura (m): ")) - Solicita a altura em metros
  • Linha 6: imc = peso / (altura ** 2) - Calcula o IMC (peso dividido pela altura ao quadrado)
  • Linha 9: if imc < 18.5: - Verifica se está abaixo do peso (IMC < 18.5)
  • Linha 10: print(f"IMC: {imc:.2f} - Abaixo do peso") - Se verdadeiro, imprime abaixo do peso
  • Linha 11: elif imc < 25: - Se falso, verifica se está no peso normal (18.5 ≤ IMC < 25)
  • Linha 12: print(f"IMC: {imc:.2f} - Peso normal") - Se verdadeiro, imprime peso normal
  • Linha 13: else: - Se ambos forem falsos (IMC ≥ 25)
  • Linha 14: print(f"IMC: {imc:.2f} - Acima do peso") - Imprime acima do peso

💡 Dica: O :.2f formata o número para mostrar apenas 2 casas decimais!

4.17 Soluções dos Exercícios

🎯 Aqui estão as soluções completas! Cada solução inclui código, explicação linha por linha e dicas importantes.

4.17.1 FÁCIL (Nível 2)

6. Sistema de Notas

# Solicita que o usuário digite a nota
nota = float(input("Digite sua nota: "))

# Classifica a nota
if nota >= 9:
    print(f"Nota: {nota} - Classificação: Excelente")
elif nota >= 7:
    print(f"Nota: {nota} - Classificação: Bom")
elif nota >= 5:
    print(f"Nota: {nota} - Classificação: Regular")
else:
    print(f"Nota: {nota} - Classificação: Insuficiente")

Explicação linha por linha:

  • Linha 2: nota = float(input("Digite sua nota: ")) - Solicita a nota e converte para float (permite decimais)
  • Linha 5: if nota >= 9: - Verifica se a nota é excelente (9-10)
  • Linha 6: print(f"Nota: {nota} - Classificação: Excelente") - Se verdadeiro, imprime excelente
  • Linha 7: elif nota >= 7: - Se falso, verifica se é bom (7-8.9)
  • Linha 8: print(f"Nota: {nota} - Classificação: Bom") - Se verdadeiro, imprime bom
  • Linha 9: elif nota >= 5: - Se falso, verifica se é regular (5-6.9)
  • Linha 10: print(f"Nota: {nota} - Classificação: Regular") - Se verdadeiro, imprime regular
  • Linha 11: else: - Se todos forem falsos (nota < 5)
  • Linha 12: print(f"Nota: {nota} - Classificação: Insuficiente") - Imprime insuficiente

7. Calculadora de Desconto

# Solicita o preço do produto
preco = float(input("Digite o preço do produto: R$ "))

# Aplica desconto baseado no preço
if preco > 100:
    desconto = preco * 0.10  # 10% de desconto
    preco_final = preco - desconto
    print(f"Preço original: R$ {preco:.2f}")
    print(f"Desconto: R$ {desconto:.2f}")
    print(f"Preço com desconto: R$ {preco_final:.2f}")
else:
    desconto = preco * 0.05  # 5% de desconto
    preco_final = preco - desconto
    print(f"Preço original: R$ {preco:.2f}")
    print(f"Desconto: R$ {desconto:.2f}")
    print(f"Preço com desconto: R$ {preco_final:.2f}")

Explicação linha por linha:

  • Linha 2: preco = float(input("Digite o preço do produto: R$ ")) - Solicita o preço do produto
  • Linha 5: if preco > 100: - Verifica se o preço é maior que R$ 100
  • Linha 6: desconto = preco * 0.10 - Calcula 10% de desconto (multiplica por 0.10)
  • Linha 7: preco_final = preco - desconto - Calcula o preço final subtraindo o desconto
  • Linha 8-10: Imprime o preço original, desconto e preço final com formatação de 2 casas decimais
  • Linha 11: else: - Se o preço for <= R$ 100
  • Linha 12: desconto = preco * 0.05 - Calcula 5% de desconto (multiplica por 0.05)
  • Linha 13: preco_final = preco - desconto - Calcula o preço final subtraindo o desconto
  • Linha 14-16: Imprime o preço original, desconto e preço final

8. Verificação de Aposentadoria

# Solicita idade e gênero
idade = int(input("Digite sua idade: "))
genero = input("Digite seu gênero (M/F): ").upper()

# Verifica se pode se aposentar
if genero == 'F' and idade >= 60:
    print("Você pode se aposentar!")
elif genero == 'M' and idade >= 65:
    print("Você pode se aposentar!")
else:
    print("Você ainda não pode se aposentar.")

Explicação linha por linha:

  • Linha 2: idade = int(input("Digite sua idade: ")) - Solicita a idade e converte para inteiro
  • Linha 3: genero = input("Digite seu gênero (M/F): ").upper() - Solicita o gênero e converte para maiúsculo
  • Linha 6: if genero == 'F' and idade >= 60: - Verifica se é mulher E tem 60+ anos
  • Linha 7: print("Você pode se aposentar!") - Se verdadeiro, imprime que pode se aposentar
  • Linha 8: elif genero == 'M' and idade >= 65: - Se falso, verifica se é homem E tem 65+ anos
  • Linha 9: print("Você pode se aposentar!") - Se verdadeiro, imprime que pode se aposentar
  • Linha 10: else: - Se ambos forem falsos
  • Linha 11: print("Você ainda não pode se aposentar.") - Imprime que não pode se aposentar

9. Classificação de Triângulo

# Solicita os três lados do triângulo
lado1 = float(input("Digite o primeiro lado: "))
lado2 = float(input("Digite o segundo lado: "))
lado3 = float(input("Digite o terceiro lado: "))

# Classifica o triângulo
if lado1 == lado2 == lado3:
    print("Triângulo equilátero")
elif lado1 == lado2 or lado1 == lado3 or lado2 == lado3:
    print("Triângulo isósceles")
else:
    print("Triângulo escaleno")

Explicação linha por linha:

  • Linha boa 2-4: Solicita os três lados do triângulo e converte para float
  • Linha 7: if lado1 == lado2 == lado3: - Verifica se todos os lados são iguais (equilátero)
  • Linha 8: print("Triângulo equilátero") - Se verdadeiro, imprime equilátero
  • Linha 9: elif lado1 == lado2 or lado1 == lado3 or lado2 == lado3: - Se falso, verifica se pelo menos dois lados são iguais (isósceles)
  • Linha 10: print("Triângulo isósceles") - Se verdadeiro, imprime isósceles
  • Linha 11: else: - Se todos os lados forem diferentes
  • Linha 12: print("Triângulo escaleno") - Imprime escaleno

10. Verificação de Ano Bissexto

# Solicita o ano
ano = int(input("Digite um ano: "))

# Verifica se é bissexto
if (ano % 4 == 0 and ano % 100 != 0) or (ano % 400 == 0):
    print(f"{ano} é um ano bissexto")
else:
    print(f"{ano} não é um ano bissexto")

Explicação linha por linha:

  • Linha 2: ano = int(input("Digite um ano: ")) - Solicita o ano e converte para inteiro
  • Linha 5: if (ano % 4 == 0 and ano % 100 != 0) or (ano % 400 == 0): - Verifica as regras do ano bissexto:
    • Divisível por 4 E não divisível por 100 OU
    • Divisível por 400
  • Linha 6: print(f"{ano} é um ano bissexto") - Se verdadeiro, imprime que é bissexto
  • Linha 7: else: - Se falso
  • Linha 8: print(f"{ano} não é um ano bissexto") - Imprime que não é bissexto

4.17.2 MÉDIO (Nível 3)

11. Sistema de Login

# Solicita usuário e senha
usuario = input("Digite o nome de usuário: ")
senha = input("Digite a senha: ")

# Verifica se as credenciais estão corretas
if usuario == "admin" and senha == "123":
    print("Acesso liberado!")
else:
    print("Usuário ou senha incorretos.")

Explicação linha por linha:

  • Linha 2: usuario = input("Digite o nome de usuário: ") - Solicita o nome de usuário
  • Linha 3: senha = input("Digite a senha: ") - Solicita a senha
  • Linha 6: if usuario == "admin" and senha == "123": - Verifica se usuário é “admin” E senha é “123”
  • Linha 7: print("Acesso liberado!") - Se verdadeiro, imprime que o acesso foi liberado
  • Linha 8: else: - Se falso (credenciais incorretas)
  • Linha 9: print("Usuário ou senha incorretos.") - Imprime mensagem de erro

12. Calculadora de Frete

# Solicita o peso da encomenda
peso = float(input("Digite o peso da encomenda (kg): "))

# Calcula o frete baseado no peso
if peso <= 1:
    frete = 10.0
elif peso <= 5:
    frete = 20.0
else:
    frete = 30.0

print(f"Peso: {peso}kg, Frete: R$ {frete:.2f}")

Explicação linha por linha:

  • Linha 2: peso = float(input("Digite o peso da encomenda (kg): ")) - Solicita o peso e converte para float
  • Linha 5: if peso <= 1: - Verifica se o peso é até 1kg
  • Linha 6: frete = 10.0 - Se verdadeiro, define frete como R$ 10
  • Linha 7: elif peso <= 5: - Se falso, verifica se o peso é até 5kg
  • Linha 8: frete = 20.0 - Se verdadeiro, define frete como R$ 20
  • Linha 9: else: - Se falso (peso > 5kg)
  • Linha 10: frete = 30.0 - Define frete como R$ 30
  • Linha 12: print(f"Peso: {peso}kg, Frete: R$ {frete:.2f}") - Imprime o peso e frete formatado

13. Sistema de Crédito

# Solicita renda e valor do empréstimo
renda = float(input("Digite sua renda mensal: R$ "))
emprestimo = float(input("Digite o valor do empréstimo desejado: R$ "))

# Calcula 30% da renda
limite = renda * 0.30

# Verifica se o empréstimo está dentro do limite
if emprestimo <= limite:
    print(f"Crédito aprovado! Limite: R$ {limite:.2f}")
else:
    print(f"Crédito negado. Limite disponível: R$ {limite:.2f}")

Explicação linha por linha:

  • Linha 2: renda = float(input("Digite sua renda mensal: R$ ")) - Solicita a renda mensal
  • Linha 3: emprestimo = float(input("Digite o valor do empréstimo desejado: R$ ")) - Solicita o valor do empréstimo
  • Linha 6: limite = renda * 0.30 - Calcula 30% da renda (limite máximo do empréstimo)
  • Linha 9: if emprestimo <= limite: - Verifica se o empréstimo é menor ou igual ao limite
  • Linha 10: print(f"Crédito aprovado! Limite: R$ {limite:.2f}") - Se verdadeiro, aprova o crédito
  • Linha 11: else: - Se falso (empréstimo > limite)
  • Linha 12: print(f"Crédito negado. Limite disponível: R$ {limite:.2f}") - Nega o crédito e mostra o limite

14. Classificação de Idade

# Solicita a idade
idade = int(input("Digite sua idade: "))

# Classifica a idade
if idade <= 12:
    print(f"{idade} anos - Criança")
elif idade <= 17:
    print(f"{idade} anos - Adolescente")
elif idade <= 59:
    print(f"{idade} anos - Adulto")
else:
    print(f"{idade} anos - Idoso")

Explicação linha por linha:

  • Linha 2: idade = int(input("Digite sua idade: ")) - Solicita a idade e converte para inteiro
  • Linha 5: if idade <= 12: - Verifica se é criança (0-12 anos)
  • Linha 6: print(f"{idade} anos - Criança") - Se verdadeiro, imprime criança
  • Linha 7: elif idade <= 17: - Se falso, verifica se é adolescente (13-17 anos)
  • Linha 8: print(f"{idade} anos - Adolescente") - Se verdadeiro, imprime adolescente
  • Linha 9: elif idade <= 59: - Se falso, verifica se é adulto (18-59 anos)
  • Linha 10: print(f"{idade} anos - Adulto") - Se verdadeiro, imprime adulto
  • Linha 11: else: - Se falso (idade >= 60)
  • Linha 12: print(f"{idade} anos - Idoso") - Imprime idoso

15. Calculadora de Salário

# Solicita horas trabalhadas e valor por hora
horas = float(input("Digite as horas trabalhadas: "))
valor_hora = float(input("Digite o valor por hora: R$ "))

# Calcula o salário base
if horas <= 40:
    salario = horas * valor_hora
)
else:
    # Horas normais (40h) + horas extras (50% a mais)
    salario = 40 * valor_hora + (horas - 40) * valor_hora * 1.5
    horas_extras = horas - 40

print(f"Salário: R$ {salario:.2f}")
if horas > 40:
    print(f"({horas_extras:.0f}h extras)")

Explicação linha por linha:

  • Linha 2: horas = float(input("Digite as horas trabalhadas: ")) - Solicita as horas trabalhadas
  • Linha 3: valor_hora = float(input("Digite o valor por hora: R$ ")) - Solicita o valor por hora
  • Linha 6: if horas <= 40: - Verifica se trabalhou até 40 horas (sem hora extra)
  • Linha 7: salario = horas * valor_hora - Se verdadeiro, calcula salário normal
  • Linha 9: else: - Se falso (horas > 40)
  • Linha 11: salario = 40 * valor_hora + (horas - 40) * valor_hora * 1.5 - Calcula: 40h normais + horas extras com 50% a mais
  • Linha 12: horas_extras = horas - 40 - Calcula quantas horas extras foram trabalhadas
  • Linha 14: print(f"Salário: R$ {salario:.2f}") - Imprime o salário total
  • Linha 15-16: Se houve horas extras, imprime quantas horas extras foram trabalhadas

4.17.3 DIFÍCIL (Nível 4)

16. Sistema de Estacionamento

# Solicita tipo de veículo e tempo
tipo = input("Digite o tipo de veículo (carro/moto): ").lower()
tempo = float(input("Digite o tempo em horas: "))

# Calcula o valor base
if tipo == "carro":
    valor_base = tempo * 5.0
else:
    valor_base = tempo * 3.0

# Aplica desconto se for mais de 8 horas
if tempo > 8:
    desconto = valor_base * 0.20
    valor_final = valor_base - desconto
    print(f"Valor a pagar: R$ {valor_final:.2f} (com desconto)")
else:
    print(f"Valor a pagar: R$ {valor_base:.2f}")

Explicação linha por linha:

  • Linha 2: tipo = input("Digite o tipo de veículo (carro/moto): ").lower() - Solicita o tipo de veículo e converte para minúsculo
  • Linha 3: tempo = float(input("Digite o tempo em horas: ")) - Solicita o tempo em horas
  • Linha 6: if tipo == "carro": - Verifica se é carro
  • Linha 7: valor_base = tempo * 5.0 - Se verdadeiro, calcula R$ 5 por hora
  • Linha 8: else: - Se falso (é moto)
  • Linha 9: valor_base = tempo * 3.0 - Calcula R$ 3 por hora
  • Linha 12: if tempo > 8: - Verifica se ficou mais de 8 horas
  • Linha 13: desconto = valor_base * 0.20 - Calcula 20% de desconto
  • Linha 14: valor_final = valor_base - desconto - Calcula o valor final com desconto
  • Linha 15: print(f"Valor a pagar: R$ {valor_final:.2f} (com desconto)") - Imprime o valor com desconto
  • Linha 16: else: - Se falso (tempo <= 8)
  • Linha 17: print(f"Valor a pagar: R$ {valor_base:.2f}") - Imprime o valor sem desconto

17. Calculadora de Imposto de Renda

# Solicita o salário
salario = float(input("Digite seu salário: R$ "))

# Calcula o imposto baseado na faixa
if salario <= 1903.98:
    imposto = 0
elif salario <= 2826.65:
    imposto = salario * 0.075
elif salario <= 3751.05:
    imposto = salario * 0.15
elif salario <= 4664.68:
    imposto = salario * 0.225
else:
    imposto = salario * 0.275

print(f"Salário: R$ {salario:.2f}, Imposto: R$ {imposto:.2f}")

Explicação linha por linha:

  • Linha 2: salario = float(input("Digite seu salário: R$ ")) - Solicita o salário
  • Linha 5: if salario <= 1903.98: - Verifica se está na faixa isenta (até R$ 1903.98)
  • Linha 6: imposto = 0 - Se verdadeiro, imposto é zero
  • Linha 7: elif salario <= 2826.65: - Se falso, verifica segunda faixa (até R$ 2826.65)
  • Linha 8: imposto = salario * 0.075 - Se verdadeiro, calcula 7.5% de imposto
  • Linha 9: elif salario <= 3751.05: - Se falso, verifica terceira faixa (até R$ 3751.05)
  • Linha 10: imposto = salario * 0.15 - Se verdadeiro, calcula 15% de imposto
  • Linha 11: elif salario <= 4664.68: - Se falso, verifica quarta faixa (até R$ 4664.68)
  • Linha 12: imposto = salario * 0.225 - Se verdadeiro, calcula 22.5% de imposto
  • Linha 13: else: - Se falso (salário > R$ 4664.68)
  • Linha 14: imposto = salario * 0.275 - Calcula 27.5% de imposto
  • Linha 16: print(f"Salário: R$ {salario:.2f}, Imposto: R$ {imposto:.2f}") - Imprime salário e imposto

18. Sistema de Biblioteca

# Solicita tipo de usuário e dias de atraso
tipo_usuario = input("Digite o tipo de usuário (estudante/professor/geral): ").lower()
dias_atraso = int(input("Digite os dias de atraso: "))

# Calcula a multa baseada no tipo de usuário
if tipo_usuario == "estudante":
    multa_por_dia = 0.50
elif tipo_usuario == "professor":
    multa_por_dia = 0.30
else:
    multa_por_dia = 1.00

# Calcula o valor total da multa
multa_total = dias_atraso * multa_por_dia

print(f"Multa: R$ {multa_total:.2f}")

Explicação linha por linha:

  • Linha 2: tipo_usuario = input("Digite o tipo de usuário (estudante/professor/geral): ").lower() - Solicita o tipo de usuário
  • Linha 3: dias_atraso = int(input("Digite os dias de atraso: ")) - Solicita os dias de atraso
  • Linha 6: if tipo_usuario == "estudante": - Verifica se é estudante
  • Linha 7: multa_por_dia = 0.50 - Se verdadeiro, multa é R$ 0.50 por dia
  • Linha 8: elif tipo_usuario == "professor": - Se falso, verifica se é professor
  • Linha 9: multa_por_dia = 0.30 - Se verdadeiro, multa é R$ 0.30 por dia
  • Linha 10: else: - Se falso (é usuário geral)
  • Linha 11: multa_por_dia = 1.00 - Multa é R$ 1.00 por dia
  • Linha 14: multa_total = dias_atraso * multa_por_dia - Calcula o valor total da multa
  • Linha 16: print(f"Multa: R$ {multa_total:.2f}") - Imprime o valor da multa

19. Calculadora de Combustível

# Solicita tipo de combustível e litros
tipo = input("Digite o tipo de combustível (gasolina/etanol): ").lower()
litros = float(input("Digite a quantidade de litros: "))

# Define o preço por litro
if tipo == "gasolina":
    preco_litro = 4.50
else:
    preco_litro = 3.20

# Calcula o valor base
valor_base = litros * preco_litro

# Aplica desconto se for mais de 20 litros
if litros > 20:
    desconto = valor_base * 0.05
    valor_final = valor_base - desconto
    print(f"Valor: R$ {valor_final:.2f} (com desconto)")
else:
    print(f"Valor: R$ {valor_base:.2f}")

Explicação linha por linha:

  • Linha 2: tipo = input("Digite o tipo de combustível (gasolina/etanol): ").lower() - Solicita o tipo de combustível
  • Linha 3: litros = float(input("Digite a quantidade de litros: ")) - Solicita a quantidade de litros
  • Linha 6: if tipo == "gasolina": - Verifica se é gasolina
  • Linha 7: preco_litro = 4.50 - Se verdadeiro, preço é R$ 4.50 por litro
  • Linha 8: else: - Se falso (é etanol)
  • Linha 9: preco_litro = 3.20 - Preço é R$ 3.20 por litro
  • Linha 12: valor_base = litros * preco_litro - Calcula o valor base
  • Linha 15: if litros > 20: - Verifica se comprou mais de 20 litros
  • Linha 16: desconto = valor_base * 0.05 - Calcula 5% de desconto
  • Linha 17: valor_final = valor_base - desconto - Calcula o valor final com desconto
  • Linha 18: print(f"Valor: R$ {valor_final:.2f} (com desconto)") - Imprime o valor com desconto
  • Linha 19: else: - Se falso (litros <= 20)
  • Linha 20: print(f"Valor: R$ {valor_base:.2f}") - Imprime o valor sem desconto

20. Sistema de Notas Escolares

# Solicita as três notas
nota1 = float(input("Digite a primeira nota: "))
nota2 = float(input("Digite a segunda nota: "))
nota3 = float(input("Digite a terceira nota: "))

# Calcula a média
media = (nota1 + nota2 + nota3) / 3

# Classifica a média
if media >= 9:
    conceito = "A"
elif media >= 7:
    conceito = "B"
elif media >= 5:
    conceito = "C"
elif media >= 3:
    conceito = "D"
else:
    conceito = "F"

print(f"Média: {media:.1f} - Conceito: {conceito}")

Explicação linha por linha:

  • Linha 2-4: Solicita as três notas e converte para float
  • Linha 7: media = (nota1 + nota2 + nota3) / 3 - Calcula a média das três notas
  • Linha 10: if media >= 9: - Verifica se a média é A (9-10)
  • Linha 11: conceito = "A" - Se verdadeiro, conceito é A
  • Linha 12: elif media >= 7: - Se falso, verifica se é B (7-8.9)
  • Linha 13: conceito = "B" - Se verdadeiro, conceito é B
  • Linha 14: elif media >= 5: - Se falso, verifica se é C (5-6.9)
  • Linha 15: conceito = "C" - Se verdadeiro, conceito é C
  • Linha 16: elif media >= 3: - Se falso, verifica se é D (3-4.9)
  • Linha 17: conceito = "D" - Se verdadeiro, conceito é D
  • Linha 18: else: - Se falso (média < 3)
  • Linha 19: conceito = "F" - Conceito é F
  • Linha 21: print(f"Média: {media:.1f} - Conceito: {conceito}") - Imprime a média e conceito

4.17.4 MUITO DIFÍCIL (Nível 5)

21. Sistema de Banco

# Inicializa o saldo
saldo = 1000.0

# Solicita a operação
operacao = input("Digite a operação (depósito/saque/consulta): ").lower()

# Processa a operação
if operacao == "depósito":
    valor = float(input("Digite o valor do depósito: R$ "))
    saldo += valor
    print(f"Depósito realizado! Saldo atual: R$ {saldo:.2f}")
elif operacao == "saque":
    valor = float(input("Digite o valor do saque: R$ "))
    if valor <= saldo and valor <= 500:  # Limite de saque de R$ 500
        saldo -= valor
        print(f"Saque realizado! Saldo atual: R$ {saldo:.2f}")
    elif valor > saldo:
        print("Saldo insuficiente!")
    else:
        print("Limite de saque excedido (máximo R$ 500)")
elif operacao == "consulta":
    print(f"Saldo atual: R$ {saldo:.2f}")
else:
    print("Operação inválida!")

Explicação linha por linha:

  • Linha 2: saldo = 1000.0 - Inicializa o saldo com R$ 1000
  • Linha 5: operacao = input("Digite a operação (depósito/saque/consulta): ").lower() - Solicita a operação
  • Linha 8: if operacao == "depósito": - Verifica se é depósito
  • Linha 9: valor = float(input("Digite o valor do depósito: R$ ")) - Solicita o valor do depósito
  • Linha 10: saldo += valor - Adiciona o valor ao saldo
  • Linha 11: print(f"Depósito realizado! Saldo atual: R$ {saldo:.2f}") - Confirma o depósito
  • Linha 12: elif operacao == "saque": - Se falso, verifica se é saque
  • Linha 13: valor = float(input("Digite o valor do saque: R$ ")) - Solicita o valor do saque
  • Linha 14: if valor <= saldo and valor <= 500: - Verifica se tem saldo suficiente E se não excede o limite
  • Linha 15-16: Se verdadeiro, realiza o saque e confirma
  • Linha 17-18: Se falso, verifica se é saldo insuficiente
  • Linha 19-20: Se falso, verifica se excedeu o limite de saque
  • Linha 21: elif operacao == "consulta": - Se falso, verifica se é consulta
  • Linha 22: print(f"Saldo atual: R$ {saldo:.2f}") - Mostra o saldo atual
  • Linha 23: else: - Se falso (operação inválida)
  • Linha 24: print("Operação inválida!") - Imprime erro

22. Calculadora de Juros Compostos

# Solicita os dados do investimento
capital = float(input("Digite o capital inicial: R$ "))
taxa = float(input("Digite a taxa de juros (% ao ano): "))
tempo = int(input("Digite o tempo em meses: "))

# Converte taxa para decimal e tempo para anos
taxa_decimal = taxa / 100
tempo_anos = tempo / 12

# Calcula o montante usando juros compostos
montante = capital * (1 + taxa_decimal) ** tempo_anos

# Classifica o investimento
if taxa <= 8:
    classificacao = "Conservador"
elif taxa <= 15:
    classificacao = "Moderado"
else:
    classificacao = "Arriscado"

print(f"Montante: R$ {montante:.2f} - Investimento: {classificacao}")

Explicação linha por linha:

  • Linha 2-4: Solicita capital inicial, taxa de juros e tempo em meses
  • Linha 7: taxa_decimal = taxa / 100 - Converte a taxa de percentual para decimal
  • Linha 8: tempo_anos = tempo / 12 - Converte meses para anos
  • Linha 11: montante = capital * (1 + taxa_decimal) ** tempo_anos - Aplica a fórmula de juros compostos
  • Linha 14: if taxa <= 8: - Verifica se é investimento conservador (taxa ≤ 8%)
  • Linha 15: classificacao = "Conservador" - Se verdadeiro, classifica como conservador
  • Linha 16: elif taxa <= 15: - Se falso, verifica se é moderado (taxa ≤ 15%)
  • Linha 17: classificacao = "Moderado" - Se verdadeiro, classifica como moderado
  • Linha 18: else: - Se falso (taxa > 15%)
  • Linha 19: classificacao = "Arriscado" - Classifica como arriscado
  • Linha 21: print(f"Montante: R$ {montante:.2f} - Investimento: {classificacao}") - Imprime resultado

23. Sistema de Reserva de Hotel

# Solicita os dados da reserva
tipo_quarto = input("Digite o tipo de quarto (single/double/suite): ").lower()
noites = int(input("Digite o número de noites: "))
temporada = input("Digite a temporada (alta/baixa): ").lower()

# Define o preço base por noite
if tipo_quarto == "single":
    preco_base = 100
elif tipo_quarto == "double":
    preco_base = 150
else:  # suite
    preco_base = 250

# Aplica multiplicador da temporada
if temporada == "alta":
    multiplicador = 1.5
else:
    multiplicador = 1.0

# Calcula o valor total
valor_total = preco_base * noites * multiplicador

# Adiciona taxa de serviço (10%)
taxa_servico = valor_total * 0.10
valor_final = valor_total + taxa_servico

print(f"Valor total: R$ {valor_final:.2f} (incluindo taxas)")

Explicação linha por linha:

  • Linha 2-4: Solicita tipo de quarto, número de noites e temporada
  • Linha 7: if tipo_quarto == "single": - Verifica se é quarto single
  • Linha 8: preco_base = 100 - Se verdadeiro, preço base é R$ 100
  • Linha 9: elif tipo_quarto == "double": - Se falso, verifica se é double
  • Linha 10: preco_base = 150 - Se verdadeiro, preço base é R$ 150
  • Linha 11: else: - Se falso (é suite)
  • Linha 12: preco_base = 250 - Preço base é R$ 250
  • Linha 15: if temporada == "alta": - Verifica se é temporada alta
  • Linha 16: multiplicador = 1.5 - Se verdadeiro, multiplicador é 1.5 (50% a mais)
  • Linha 17: else: - Se falso (temporada baixa)
  • Linha 18: multiplicador = 1.0 - Multiplicador é 1.0 (preço normal)
  • Linha 21: valor_total = preco_base * noites * multiplicador - Calcula o valor total
  • Linha 24: taxa_servico = valor_total * 0.10 - Calcula 10% de taxa de serviço
  • Linha 25: valor_final = valor_total + taxa_servico - Adiciona a taxa ao valor total
  • Linha 27: print(f"Valor total: R$ {valor_final:.2f} (incluindo taxas)") - Imprime o valor final

24. Calculadora de Financiamento

# Solicita os dados do financiamento
valor_imovel = float(input("Digite o valor do imóvel: R$ "))
renda_mensal = float(input("Digite sua renda mensal: R$ "))
prazo_meses = int(input("Digite o prazo em meses: "))

# Calcula a prestação (juros simples de 1% ao mês)
taxa_mensal = 0.01
prestacao = (valor_imovel * (1 + taxa_mensal * prazo_meses)) / prazo_meses

# Verifica se a prestação é até 30% da renda
limite_prestacao = renda_mensal * 0.30

if prestacao <= limite_prestacao:
    print(f"Prestação: R$ {prestacao:.2f} - Financiamento aprovado!")
else:
    print(f"Prestação: R$ {prestacao:.2f} - Financiamento negado!")
    print(f"Limite máximo: R$ {limite_prestacao:.2f}")

Explicação linha por linha:

  • Linha 2-4: Solicita valor do imóvel, renda mensal e prazo em meses
  • Linha 7: taxa_mensal = 0.01 - Define taxa de juros de 1% ao mês
  • Linha 8: prestacao = (valor_imovel * (1 + taxa_mensal * prazo_meses)) / prazo_meses - Calcula a prestação usando juros simples
  • Linha 11: limite_prestacao = renda_mensal * 0.30 - Calcula 30% da renda (limite máximo)
  • Linha 13: if prestacao <= limite_prestacao: - Verifica se a prestação é aceitável
  • Linha 14: print(f"Prestação: R$ {prestacao:.2f} - Financiamento aprovado!") - Se verdadeiro, aprova
  • Linha 15: else: - Se falso (prestação muito alta)
  • Linha 16-17: Nega o financiamento e mostra o limite máximo

25. Sistema de Vendas

# Solicita os dados da venda
produto = input("Digite o produto: ").lower()
quantidade = int(input("Digite a quantidade: "))
tipo_cliente = input("Digite o tipo de cliente (vip/normal): ").lower()

# Define preços dos produtos
if produto == "notebook":
    preco_unitario = 2000
elif produto == "mouse":
    preco_unitario = 50
elif produto == "teclado":
    preco_unitario = 120
else:
    preco_unitario = 100  # Preço padrão

# Calcula o valor base
valor_base = quantidade * preco_unitario

# Aplica desconto progressivo
if quantidade >= 10:
    desconto = 0.15  # 15% de desconto
elif quantidade >= 5:
    desconto = 0.10  # 10% de desconto
else:
    desconto = 0.05  # 5% de desconto

# Aplica desconto VIP adicional
if tipo_cliente == "vip":
    desconto += 0.05  # 5% adicional para VIP

valor_com_desconto = valor_base * (1 - desconto)

# Calcula frete
if tipo_cliente == "vip" or valor_com_desconto >= 500:
    frete = 0
else:
    frete = 50

valor_final = valor_com_desconto + frete

print(f"Valor: R$ {valor_final:.2f}")
if tipo_cliente == "vip":
    print("(com desconto VIP)")
if frete == 0:
    print("- Frete grátis!")

Explicação linha por linha:

  • Linha 2-4: Solicita produto, quantidade e tipo de cliente
  • Linha 7-14: Define preços dos produtos baseado no tipo
  • Linha 17: valor_base = quantidade * preco_unitario - Calcula o valor base
  • Linha 20-26: Aplica desconto progressivo baseado na quantidade
  • Linha 29-30: Aplica desconto VIP adicional se for cliente VIP
  • Linha 32: valor_com_desconto = valor_base * (1 - desconto) - Calcula valor com desconto
  • Linha 35-39: Calcula frete (grátis para VIP ou compras acima de R$ 500)
  • Linha 41: valor_final = valor_com_desconto + frete - Calcula valor final
  • Linha 43-46: Imprime o resultado com informações adicionais

4.18 Resumo do Capítulo

🎯 Parabéns! Você completou o capítulo mais importante do livro! Agora seus programas podem tomar decisões inteligentes.

4.18.1 O que você aprendeu

  1. Estruturas de Seleção: if, elif, else para tomar decisões
  2. Operadores Lógicos: and, or, not para condições complexas
  3. Estruturas Aninhadas: if dentro de if (use com moderação!)
  4. Match/Case: Alternativa moderna para escolhas simples
  5. Comentários: Como documentar seu código
  6. Debugging: Como encontrar e corrigir erros
  7. Teste de Mesa: Como simular execução no papel

4.18.2 Conceitos Fundamentais

Conceito Quando usar Exemplo
if Uma condição if idade >= 18:
if/else Duas opções if nota >= 7: aprovado else: reprovado
if/elif/else Múltiplas opções if nota >= 9: excelente elif nota >= 7: bom
and Ambas verdadeiras if idade >= 18 and tem_cnh:
or Pelo menos uma if é_estudante or é_idoso:
not Inverte resultado if not é_menor:

4.18.3 Próximos Passos

Capítulo 5: Estruturas de Repetição (loops)

  • for e while
  • Como repetir código
  • Controle de fluxo em loops

4.18.4 Dicas Importantes

  1. Sempre teste: Use valores diferentes para verificar sua lógica
  2. Comente seu código: Explique decisões importantes
  3. Use indentação: É fundamental para estruturas de seleção
  4. Evite aninhamento excessivo: Prefira blocos independentes
  5. Pratique: Faça todos os exercícios para fixar o conhecimento

4.18.5 Exercícios Recomendados

  • Iniciante: Exercícios 1-10 (Níveis 1 e 2)
  • Intermediário: Exercícios 11-20 (Níveis 3 e 4)
  • Avançado: Exercícios 21-25 (Nível 5)

🎉 Você está pronto para o próximo capítulo! As estruturas de seleção são a base para criar programas inteligentes e interativos.


4.19 Referências bibliográficas

  • DOWNEY, Allen B. Think Python: How to Think Like a Computer Scientist. Green Tea Press, 2nd edition, 2012.
  • FORBELLONE, André Luiz Villar; EBERSPACHER, Henri Frederico L. Lógica de Programação: A Construção de Algoritmos e Estruturas de Dados. São Paulo: Pearson, 3ª edição, 2017.
  • MENEZES, Nilo Ney Coutinho. Introdução à Programação com Python: Algoritmos e Lógica de Programação para Iniciantes. São Paulo: Novatec, 2018.
  • PARRY, Dave. Debugging and Testing Python Code with pdb. Real Python, 2020. Disponível em: https://realpython.com/python-debugging-pdb/. Acesso em: 05 mar. 2023.
  • PYTHON. Control Flow Tools: if statements. Disponível em: https://docs.python.org/3/tutorial/controlflow.html#if-statements. Acesso em: 05 mar. 2023.
  • PYTHON. Compound Statements. Disponível em: https://docs.python.org/3/reference/compound_stmts.html. Acesso em: 14 out. 2021.
  • RAZAVI, Arash. Testing vs. Debugging: What’s the Difference? Medium, 2018. Disponível em: https://medium.com/swlh/testing-vs-debugging-whats-the-difference-114c72a9576f. Acesso em: 05 mar. 2023.
  • W3SCHOOLS. Python 3 Reference Manual. Scotts Valley, CA: CreateSpace. Disponível em: https://www.w3schools.com/python/. Acesso em: 05 mar. 2023.
  • W3SCHOOLS. Python if…elif…else. Disponível em: https://www.w3schools.com/python/python_conditions.asp. Acesso em: 05 mar. 2023.
  • ZIVIANI, Nivio. Projeto de Algoritmos com Implementações em Pascal e C. São Paulo: Cengage Learning, 2007.