0
respostas

[Sugestão] Aula02_Python_Trabahando com Funções - Atividade 09

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 ---')