Utilizei um loop while True com try/except para impedir que o sistema quebre caso o usuário digite texto em vez de números ou insira uma distância negativa.
A estrutura if/elif/else organiza de forma clara as faixas de distância. O computador avalia a condição de menor para maior, garantindo que o valor seja atribuído corretamente.
Usei uma forma simplificada (2.00 if chovendo else 0.00) para calcular o adicional, deixando o código mais limpo e legível.
Feedback ao Usuário: Em vez de apenas exibir o valor final, o algoritmo detalha o que compõe aquele preço (taxa base + possível adicional de chuva). Isso transmite transparência e confiança para o cliente, pois ele entende exatamente por que está pagando aquele valor.
def calcular_entrega():
print("--- Sistema de Cálculo de Taxa de Entrega ---")
# 1. Entrada com Validação
while True:
try:
distancia = float(input("Informe a distância da entrega em km: "))
if distancia >= 0:
break
print("Erro: A distância não pode ser negativa.")
except ValueError:
print("Erro: Digite um valor numérico válido.")
chovendo = input("Está chovendo no momento? (s/n): ").lower() == 's'
# 2. Processamento (Definição da taxa base)
if distancia <= 5:
taxa_base = 5.00
elif distancia <= 10:
taxa_base = 8.00
else:
taxa_base = 10.00
# Cálculo do adicional
adicional_chuva = 2.00 if chovendo else 0.00
valor_final = taxa_base + adicional_chuva
# 3. Saída
print("\n--- Resumo do Pedido ---")
print(f"Taxa Base: R$ {taxa_base:.2f}")
if chovendo:
print(f"Adicional de chuva: R$ {adicional_chuva:.2f}")
print(f"Valor total da entrega: R$ {valor_final:.2f}")
# Executar o sistema
calcular_entrega()