1
resposta

[Projeto] Execício 9 gasto deviagem

identifiquei no código da resolução que haviam algumas indiferenças em relação ao usuário, como o mesmo digitando: 0 dias, números não reais como 5.5 dias e na parte da digitação do nome da cidade a digitação como "salvador", "SALVADOR", SalvadoR e etc... dando erro. Por isso junto ao auxílio do chat GPT proponho o código a seguir no qual evita esses contratempos por parte do usuáio.

OBS: "NÃO SEI SE ESCOLHI O TÓTICO CERTO".

Dados das cidades

distancias = {
"Salvador": 850,
"Fortaleza": 800,
"Natal": 300,
"Aracaju": 550
}

passeios = {
"Salvador": 200,
"Fortaleza": 400,
"Natal": 250,
"Aracaju": 300
}

km_l = 14
gasolina = 5

Validação do número de diárias

while True:
try:
dias = int(input("Quantas diárias? "))

    if dias <= 0:
        print("Digite um número inteiro maior que zero.")
    else:
        break

except ValueError:
    print("Erro! Digite apenas números inteiros.")

Validação da cidade

cidades_disponiveis = list(distancias.keys())

while True:
cidade = input(
"Qual a cidade? [Salvador, Fortaleza, Natal ou Aracaju]: "
).strip().title()

if cidade in cidades_disponiveis:
    break
else:
    print("Cidade inválida!")
    print(f"Escolha uma destas opções: {', '.join(cidades_disponiveis)}")

Funções

def gasto_hotel(dias):
return 150 * dias

def gasto_gasolina(cidade):
return (2 * distancias[cidade] * gasolina) / km_l

def gasto_passeio(cidade, dias):
return passeios[cidade] * dias

Cálculo total

gastos = (
gasto_hotel(dias)
+ gasto_gasolina(cidade)
+ gasto_passeio(cidade, dias)
)

print(
f"\nCom base nos gastos definidos, "
f"uma viagem de {dias} dias para {cidade} "
f"saindo de Recife custaria R$ {round(gastos, 2)}"
)

1 resposta

Olá, Wemerson. Como vai?

Parabéns pela iniciativa de ir além do exercício proposto! Você tocou em um ponto fundamental no desenvolvimento de software: a experiência do usuário (UX) e a prevenção de erros. Na programação, não podemos assumir que o usuário sempre digitará os dados exatamente como esperamos, e seu código resolveu isso muito bem.

O tópico está certíssimo, pois compartilhar melhorias em projetos é uma das melhores formas de agregar valor à comunidade!

Gostaria de destacar os pontos excelentes da sua solução:

  1. O uso do .title() e .strip(): Isso resolveu o problema da "sensibilidade a maiúsculas" de forma muito elegante. O .strip() remove espaços acidentais e o .title() padroniza a primeira letra como maiúscula, batendo exatamente com as chaves do seu dicionário.
  2. Tratamento de Exceções (try...except): Você evitou que o programa "quebre" caso o usuário digite uma letra onde deveria ser um número. Isso é essencial em aplicações reais.
  3. Validação com while True: Essa estrutura de repetição garante que o programa só prossiga quando o dado estiver correto, o que limpa o fluxo do processamento principal.

Apenas como uma pequena sugestão para seus próximos estudos, você poderia encapsular essas validações dentro de funções também, deixando seu código principal ainda mais limpo:

def obter_diarias():
while True:
try:
dias = int(input("Quantas diárias? "))
if dias > 0:
return dias
print("Digite um valor maior que zero.")
except ValueError:
print("Erro! Digite apenas números inteiros.")

Excelente trabalho em identificar essas "indiferenças" do código original e propor uma solução robusta.

Espero que possa ter lhe ajudado!