Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Calculando pedágio

print("--- SISTEMA DE PEDÁGIO ---")
entrada = input(f"Digite o km: ").replace(",", ".")
quilometros = float(entrada)
if quilometros <= 100:
    preco = 10.00
elif quilometros < 200:
    preco = 20.00
else:
    preco = 30.00
print(f"Pedágio: R${preco:.2f}")


# USANDO FUNCAO
def obter_distancia() -> float:
    while True:
        try:
            entrada = input(f"Digite o km: ").replace(",", ".")
            quilometros = float(entrada)

            if quilometros > 0:
                return quilometros
            print("Erro: O quilometro deve estar acima de 0.")
        except ValueError:
                print("Erro: Digite apenas números.")

def calcular_pedagio(distancia: float) -> float:
     if distancia <= 100:
          return 10.00
     elif distancia < 200:
          return 20.00
     return 30.00

def executar_sistema():
     print("--- SISTEMA DE PEDÁGIO ---")
     situacao = obter_distancia()
     valor_pedagio = calcular_pedagio(situacao)
     print(f"Pedágio: R${valor_pedagio:.2f}")

if __name__ == "__main__":
     executar_sistema()
1 resposta

Olá, Luísa. Como vai?

Excelente contribuição! É fantástico ver como você evoluiu a estrutura do seu código. Você começou com um script linear simples e depois o transformou em um programa totalmente estruturado em funções, utilizando boas práticas avançadas como tratamento de exceções com try/except, laço de repetição para validação e até mesmo type hinting (-> float).

A divisão que você fez separa muito bem as responsabilidades do software: uma função cuida apenas da entrada e validação dos dados (obter_distancia), outra cuida puramente da regra de negócio (calcular_pedagio) e uma terceira orquestra a execução (executar_sistema). Isso deixa o código limpo, testável e fácil de manter.

Para agregar ainda mais valor ao seu projeto, quero destacar dois pontos interessantes sobre o seu código e deixar uma sugestão de melhoria:

1. Tratamento de strings e erros

A sua estratégia de usar .replace(",", ".") é uma ótima prática de experiência do usuário (UX), pois impede que o programa quebre caso a pessoa digite o quilômetro usando a vírgula como separador decimal, que é o padrão brasileiro.

2. Ajuste na indentação do primeiro script

No primeiro trecho de código que você postou, a estrutura condicional acabou ficando na mesma linha que a conversão da variável por conta da formatação do fórum:

quilometros = float(entrada)if quilometros <= 100:

Para que ele funcione sem erros de sintaxe, lembramos que a quebra de linha e a indentação são obrigatórias em Python:

quilometros = float(entrada)
if quilometros <= 100:
    preco = 10.00

Sugestão de melhoria: Consistência nos intervalos

Na sua função calcular_pedagio, você usou operadores que criam os seguintes intervalos:

  • Menor ou igual a 100: R$ 10.00
  • Maior que 100 e menor que 200: R$ 20.00
  • Maior ou igual a 200: R$ 30.00

Caso o objetivo do exercício seja incluir o valor exato de 200 no segundo bloco (ou seja, até 200), uma boa prática seria padronizar o operador utilizando o menor ou igual (<=) também no elif, dessa forma:

def calcular_pedagio(distancia: float) -> float:
     if distancia <= 100:
          return 10.00
     elif distancia <= 200:
          return 20.00
     return 30.00

Parabéns pela organização e pela iniciativa de refatorar o código criando funções. Esse é o caminho ideal para se tornar uma desenvolvedora Python de destaque!

Espero que possa ter lhe ajudado!