Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

[Projeto] Faça como eu fiz: iniciando em Python | Python: Inteligência Artificial Aplicada

Exerccio: Sistema de Cálculo de Bolsa Escolar

Programa ficticio em Python que calcule a elegibilidade de bolsa escolar baseado em critérios de idade, nota e renda.

# Sistema de Bolsa Escolar - Aplicando Fundamentos de Python

print("=" * 50)
print("BEM-VINDO AO SISTEMA DE CÁLCULO DE BOLSA ESCOLAR")
print("=" * 50)

# Capturando dados do usuário com input()
nome = input("\nDigite seu nome completo: ").strip()
nome = nome.title()  # DICA: Formatando nomes com title()

idade_texto = input("Digite sua idade: ")
idade = int(idade_texto)  # Convertendo string para int

nota_texto = input("Digite sua nota final (0-10): ")
nota = float(nota_texto)  # Convertendo para float

renda_texto = input("Digite a renda mensal da família (em R$): ")
renda = float(renda_texto)

# Manipulação de strings com métodos
nome_padrao = nome.lower()
cidade = input("Qual sua cidade? ").strip().upper()

print(f"\n{'='*50}")
print(f"RESUMO DOS DADOS INFORMADOS:")
print(f"{'='*50}")

# Usando f-strings para concatenar variáveis e textos
print(f"Nome: {nome}")
print(f"Idade: {idade} anos")
print(f"Nota: {nota}")
print(f"Renda familiar: R$ {renda:.2f}")
print(f"Cidade: {cidade}")

# Operações matemáticas
desconto_base = 100  # valor base em reais
desconto_nota = (10 - nota) * 50  # quanto melhor a nota, maior o desconto
desconto_renda = renda * 0.1  # desconto baseado em renda
desconto_total = desconto_base + desconto_nota + desconto_renda

print(f"\n{'='*50}")
print(f"CÁLCULO DA BOLSA:")
print(f"{'='*50}")
print(f"Desconto base: R$ {desconto_base:.2f}")
print(f"Desconto por nota: R$ {desconto_nota:.2f}")
print(f"Desconto por renda: R$ {desconto_renda:.2f}")
print(f"Desconto total calculado: R$ {desconto_total:.2f}")

# Estruturas condicionais
print(f"\n{'='*50}")
print(f"RESULTADO DA ANÁLISE:")
print(f"{'='*50}")

if idade < 16:
    status = "Não elegível (idade mínima: 16 anos)"
    percentual_bolsa = 0
elif nota < 6:
    status = "Não aprovado (nota mínima: 6.0)"
    percentual_bolsa = 0
elif renda > 5000:
    status = "Não elegível (renda acima do limite)"
    percentual_bolsa = 0
elif nota >= 9 and renda <= 2000:
    status = "Aprovado com bolsa integral"
    percentual_bolsa = 100
elif nota >= 7.5 and renda <= 3000:
    status = "Aprovado com bolsa de 75%"
    percentual_bolsa = 75
elif nota >= 7 and renda <= 4000:
    status = "Aprovado com bolsa de 50%"
    percentual_bolsa = 50
else:
    status = "Aprovado com bolsa de 25%"
    percentual_bolsa = 25

print(f"Status: {status}")
print(f"Percentual de bolsa: {percentual_bolsa}%")

# Último cálculo com variáveis
mensalidade = 1500  # valor da mensalidade
valor_bolsa = mensalidade * (percentual_bolsa / 100)
valor_pagar = mensalidade - valor_bolsa

print(f"\nMensalidade: R$ {mensalidade:.2f}")
print(f"Valor da bolsa: R$ {valor_bolsa:.2f}")
print(f"Valor a pagar: R$ {valor_pagar:.2f}")

# Mensagem final com replace
mensagem = "Obrigado por usar nosso sistema!"
mensagem_customizada = mensagem.replace("sistema", f"sistema, {nome}")

print(f"\n{mensagem_customizada}")
print("=" * 50)

O que foi praticado:

  • Variáveis: nome, idade, nota, renda, etc.
  • Input: Captura dados com input()
  • Conversão de tipos: int(), float()
  • Strings: .strip(), .title(), .lower(), .upper(), .replace()
  • Operações matemáticas: Soma, subtração, multiplicação, divisão
  • F-strings: Concatenação dinâmica de valores
  • Estruturas condicionais: if, elif, else com múltiplas condições
  • Indentação correta: Blocos bem organizados
1 resposta
solução!

Olá, Estudante. Como vai?

Parabéns pelo excelente projeto! Construir um sistema de cálculo de bolsa escolar é uma forma fantástica e muito prática de consolidar os fundamentos da linguagem Python. Você aplicou com maestria todos os conceitos essenciais do módulo: entrada e saída de dados, conversão de tipos (type casting), manipulação avançada de strings, lógica matemática e uma estrutura condicional muito bem encadeada.

Para enriquecer ainda mais o seu aprendizado e trazer boas práticas de programação para o seu código, separei alguns pontos técnicos importantes:

1. Uma Armadilha na Lógica da Nota (Operações Matemáticas)

No trecho onde você calcula o desconto por nota, você utilizou a seguinte fórmula:

desconto_nota = (10 - nota) * 50
  • Ponto de Atenção: Vamos analisar a lógica matemática aqui. Se um aluno tirar uma nota excelente, como 10, o cálculo resultará em (10 - 10) * 50, que é 0. Já se um aluno tirar uma nota baixa, como 6, o cálculo resultará em (10 - 6) * 50, que dá 200. Ou seja, a sua fórmula atual está fazendo o oposto do esperado: quanto pior a nota, maior está sendo o desconto.
  • Como Corrigir: Se a ideia é recompensar o esforço do aluno, você pode basear o cálculo diretamente na nota obtida:
desconto_nota = nota * 50  # Nota 10 ganha R$ 500; Nota 6 ganha R$ 300

2. A Importância da Ordem no if/elif/else

A sua estrutura de condições ficou excelente e demonstra um ótimo entendimento sobre como o Python avalia os blocos.

Em estruturas condicionais, o Python faz a leitura de cima para baixo e executa apenas o primeiro bloco cuja condição for verdadeira, ignorando todo o resto. Você organizou muito bem colocando as regras de exclusão no topo (idade, nota mínima e renda máxima). Isso garante que um aluno com nota vermelha seja reprovado imediatamente, sem que o sistema verifique os critérios de bolsa nas linhas de baixo.

3. Tratamento de Exceções (Try/Except)

Como o seu programa depende fortemente de entradas digitadas pelo usuário através do input(), existe um comportamento perigoso que todo desenvolvedor iniciante precisa mapear. Se o usuário digitar uma letra no campo de idade (ex: "dezesseis"), o Python não conseguirá realizar a conversão na linha int(idade_texto) e o programa irá travar, exibindo um erro de valor (ValueError).

Como próximo passo para evoluir o seu script, uma boa prática é envolver essas conversões em blocos de tratamento de erros para deixar o sistema à prova de falhas:

try:
    idade = int(input("Digite sua idade: "))
except ValueError:
    print("Por favor, digite um número inteiro válido para a idade.")

Parabéns pela organização dos blocos de texto no console utilizando o separador print("=" * 50), que deixa a experiência do usuário muito mais limpa e profissional. Continue praticando e aplicando esses fundamentos!

Espero que possa ter lhe ajudado!