from datetime import datetime
dados_viagem = {'Origem': 'Recife', 'Destino': '', 'Data': '', 'Horário_Saida': '', 'Horário_Volta': '', 'Data_Retorno': '', 'Distancia': 0.0}
dados_carro = {'Consumo': 0.0, 'Tipo de Combustível': ''}
preco_combustivel = {'Gasolina': 0.0, 'Diesel': 0.0}
gastos_extras = {'Dias de hospedagem': 0, 'Diária de hospedagem': 150, 'Alimentação e Lazer por dia': 0.0}
def entrada(msg, tipo=str, cond=lambda x: True):
while True:
try:
val = tipo(input(msg).strip())
if cond(val): return val
except: pass
print('Entrada inválida.')
def entrada_data(msg): return entrada(msg, lambda x: datetime.strptime(x, '%d/%m/%Y'))
def entrada_hora(msg): return entrada(msg, lambda x: datetime.strptime(x, '%H:%M'))
def coletar_dados_viagem():
if input('Deseja mudar a origem? (S/N): ').strip().upper() == 'S':
dados_viagem['Origem'] = entrada('Nova origem: ', str, lambda x: x)
dados_viagem['Destino'] = entrada('Destino: ', str, lambda x: x)
dados_viagem['Data'] = entrada_data('Data da viagem (DD/MM/AAAA): ').strftime('%d/%m/%Y')
dados_viagem['Horário_Saida'] = entrada_hora('Horário de saída (HH:MM): ').strftime('%H:%M')
dados_viagem['Data_Retorno'] = entrada_data('Data de retorno (DD/MM/AAAA): ').strftime('%d/%m/%Y')
dados_viagem['Horário_Volta'] = entrada_hora('Horário da volta (HH:MM): ').strftime('%H:%M')
dados_viagem['Distancia'] = entrada('Distância (km): ', float, lambda x: x > 0)
def coletar_dados_carro():
dados_carro['Consumo'] = entrada('Consumo do carro (km/l): ', float, lambda x: x > 0)
dados_carro['Tipo de Combustível'] = entrada('Combustível (Gasolina/Diesel): ', str, lambda x: x.title() in ['Gasolina', 'Diesel']).title()
def coletar_precos():
preco_combustivel['Gasolina'] = entrada('Preço gasolina: R$ ', float, lambda x: x > 0)
preco_combustivel['Diesel'] = entrada('Preço diesel: R$ ', float, lambda x: x > 0)
def calcular_custo_viagem():
d = dados_viagem['Distancia']
c = dados_carro['Consumo']
t = dados_carro['Tipo de Combustível']
return (d / c) * preco_combustivel[t]
def calcular_duracao():
ida = datetime.strptime(dados_viagem['Data'] + ' ' + dados_viagem['Horário_Saida'], '%d/%m/%Y %H:%M')
volta = datetime.strptime(dados_viagem['Data_Retorno'] + ' ' + dados_viagem['Horário_Volta'], '%d/%m/%Y %H:%M')
dur = volta - ida
return dur.days, dur.seconds // 3600, (dur.seconds % 3600) // 60
def coletar_extras():
d, h, m = calcular_duracao()
dias = d + (1 if h or m else 0)
gastos_extras['Dias de hospedagem'] = dias
print(f'Duração: {d}d {h}h {m}min | Dias hospedagem: {dias}')
gastos_extras['Alimentação e Lazer por dia'] = entrada('Alimentação/Lazer por dia (R$): ', float, lambda x: x >= 0)
def calcular_total():
dias = gastos_extras['Dias de hospedagem']
h = gastos_extras['Diária de hospedagem'] * dias
l = gastos_extras['Alimentação e Lazer por dia'] * dias
return calcular_custo_viagem() + h + l
# Execução
coletar_dados_viagem()
coletar_dados_carro()
coletar_precos()
coletar_extras()
# Resultados
c_comb = calcular_custo_viagem()
dias = gastos_extras['Dias de hospedagem']
hosp = dias * gastos_extras['Diária de hospedagem']
lazer = gastos_extras['Alimentação e Lazer por dia'] * dias
total = calcular_total()
print('\n--- RESUMO ---')
for k, v in dados_viagem.items(): print(f'{k}: {v}')
print(f"Consumo: {dados_carro['Consumo']} km/l | Combustível: {dados_carro['Tipo de Combustível']}")
print(f"Gasolina: R$ {preco_combustivel['Gasolina']:.2f} | Diesel: R$ {preco_combustivel['Diesel']:.2f}")
print(f'Custo combustível: R$ {c_comb:.2f}')
print(f'Hospedagem: R$ {hosp:.2f} | Alimentação/Lazer: R$ {lazer:.2f}')
print(f'Custo total: R$ {total:.2f}\n--- FIM ---')