Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Estruturas Condicionais: Desconto Sobre Combustível

Olá pessoal!
Código referente a questão 12 do Momento Projeto.
Optei pela criação das variáveis de modo "Global" para não ocorrer algum conflito de variáveis criadas dentro das condicionais, além do uso do ".2f" para não poluir o número :)

print("--- Desconto de Combustíveis ---\n")
p_etanol = 1.70
p_diesel = 2.00
qntd_comb = 0
desconto = 0
valor_final = 0
valor_inicial = 0

tipo_comb = input("Digite o tipo de combustível (E = Etanol | D = Diesel)")
if tipo_comb == "E" or tipo_comb == "e":
    qntd_comb = float(input("Digite a quantidade de litros de Etanol: "))
    
    if qntd_comb <= 15 and qntd_comb > 0:
        desconto = 0.02
    elif qntd_comb > 15:
        desconto = 0.04
    else:
        print("Quantidade inválida, tente novamente")
        
    valor_inicial = qntd_comb * p_etanol
    valor_final = valor_inicial * (1 - desconto)
elif tipo_comb == "D" or tipo_comb == "d":
    qntd_comb = float(input("Digite a quantidade de litros de Diesel: "))
    
    if qntd_comb <= 15 and qntd_comb > 0:
        desconto = 0.03
    elif qntd_comb > 15:
        desconto = 0.05
    else:
        print("Quantidade inválida, tente novamente")
        
    valor_inicial = qntd_comb * p_diesel
    valor_final = valor_inicial * (1 - desconto)
else:
    print("Tipo de combustível não identificado, tente novamente")
    
print(f"Valor inicial do combustível: {valor_inicial:.2f}R$ ")
print(f"Valor final do combustível: {valor_final:.2f}R$")
1 resposta
solução!

Olá, Gustavo! Tudo bem?

Excelente resolução para o desafio de estruturas condicionais! Seu código está muito bem organizado e demonstra uma preocupação real com a manutenibilidade e a experiência do usuário.

Aqui estão os pontos de destaque da sua implementação:

1. Inicialização de Variáveis

A sua escolha de declarar as variáveis no início do código (o que você chamou de modo "Global") é uma ótima prática de organização. Isso evita o erro comum de tentar acessar uma variável que só existe dentro de um bloco if que não foi executado, garantindo que o print final sempre tenha um valor para exibir.

2. Uso do .2f e Formatação

O uso de formatadores de string como o :.2f é essencial em sistemas financeiros ou de vendas. Além de não "poluir" o número, ele garante que o usuário veja valores monetários de forma padronizada (ex: R$ 10.50 em vez de 10.5).

3. Lógica de Negócio e Validação

Você implementou corretamente as faixas de desconto e, o mais importante, adicionou uma validação para quantidades negativas ou zero dentro do else. Isso torna o programa muito mais robusto contra erros de digitação.


Dica de Evolução: DRY (Don't Repeat Yourself)

Como você está avançando em Python, uma técnica legal para aplicar aqui é o princípio DRY. Repare que o cálculo valor_final = valor_inicial * (1 - desconto) aparece duas vezes no código.

Você poderia mover esse cálculo para o final do programa, logo antes do print. Assim, se você precisar mudar a regra de cálculo um dia, mudará em apenas um lugar!

Exemplo de como simplificar as condições:

# Em vez de repetir o cálculo dentro de cada IF:
if tipo_comb.upper() == "E":
    preco_unitario = p_etanol
    desconto = 0.02 if qntd_comb <= 15 else 0.04
elif tipo_comb.upper() == "D":
    preco_unitario = p_diesel
    desconto = 0.03 if qntd_comb <= 15 else 0.05

# O cálculo acontece uma única vez aqui embaixo
valor_final = (qntd_comb * preco_unitario) * (1 - desconto)

Além disso, notei que você usou tipo_comb == "E" or tipo_comb == "e". Uma forma bem "Pythônica" de resolver isso é usar o método .upper() ou .lower(), como mostrei acima, para diminuir a quantidade de comparações.

Parabéns pelo projeto e pela clareza no código! Já pensou em como incluir um laço while para que o programa continue rodando até o usuário decidir sair?