Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Sugestão] Desafio: Calculando valor da entrega


"""
Você está desenvolvendo um sistema para uma empresa de delivery. O valor da taxa de entrega depende da distância até o cliente e se o pedido foi feito em um dia de chuva.

As regras são:

Para entregas até 5 km, a taxa é R$ 5,00.
Entre 5 e 10 km, a taxa é R$ 8,00.
Acima de 10 km, a taxa é R$ 10,00.
Se estiver chovendo, acrescenta R$ 2,00 à taxa padrão.
O desafio desta atividade é criar um algoritmo em linguagem natural que informe o valor final da entrega.

Para entender melhor como elaborar uma solução para esse desafio, clique na Opinião da Pessoa Instrutora.

"""
def distancia():
    try:
        km = float(input('Informe a distancia da entrega em km: '))
        if km < 0:
            print('A distancia não pode ser negativa')
            return distancia()
        return km
    except ValueError:
        print('Informe uma distancia valida')
        return distancia()
km = distancia()
def chuva():
    try:
        esta_chovendo = input("Esta chovendo? (s/n): ").strip().lower()
        if esta_chovendo == 's':
            esta_chovendo = True
            return esta_chovendo
        elif esta_chovendo == 'n':
            esta_chovendo = False
            return esta_chovendo
        else:
            print('Informe "s" para "Sim" ou "n" para "Não"')    
            return chuva()
    except ValueError:
        print('Informe se esta chovendo')
        return chuva()
esta_chovendo = chuva()
if not esta_chovendo:
    taxa = 0
else:
    taxa = 2

def obter_valor():
    try:
        if km <= 5:
            valor = 5+taxa
            return valor
        elif km > 5 and km < 10:
            valor = 8+taxa
            return valor
        elif km > 10:
            valor = 10+taxa
            return valor
    except ValueError:
        erro = input('Algo deu errado, seja tentar novamente? (s/n): ')
        if erro == 's':
            return obter_valor()
        else:
            print('Encerrando o programa.')
            return
    except ValueError:
            print('Encerrando o programa.')
            return
valor_final = round(float(obter_valor()), 2)
print(f'O valor final da entrega é R${valor_final:.2f}')

2 respostas
solução!

Olá, Delean, como vai?

Seu código cumpre bem o desafio e está estruturado de forma clara. A leitura é simples, você valida corretamente as entradas e calcula o valor final de acordo com as regras definidas. É um ótimo exercício para praticar lógica condicional e funções.

Há pequenos ajustes que podem deixar o código mais limpo. No bloco que calcula o valor final, a condição elif km > 5 and km < 10 poderia ser escrita como elif km <= 10, já que o caso até 5 km foi tratado antes. Outro detalhe é que os blocos try e except na função obter_valor não são necessários, pois não há operações ali que gerem erro automaticamente, então poderiam ser removidos sem impacto.

Parabéns pelo exercício entregue e pela dedicação ao evoluir sua solução. Continue compartilhando no fórum, ele está à disposição.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!
def distancia():
    try:
        km = float(input('Informe a distância da entrega em km: '))
        if km < 0:
            print('A distância não pode ser negativa.')
            return distancia()
        return km
    except ValueError:
        print('Informe uma distância válida.')
        return distancia()

def chuva():
    esta_chovendo = input("Está chovendo? (s/n): ").strip().lower()
    if esta_chovendo == 's':
        return True
    elif esta_chovendo == 'n':
        return False
    else:
        print('Informe "s" para "Sim" ou "n" para "Não".')
        return chuva()

def calcular_taxa_entrega(km, esta_chovendo):
    if km <= 5:
        taxa_base = 5
    elif km <= 10:
        taxa_base = 8
    else:
        taxa_base = 10

    adicional_chuva = 2 if esta_chovendo else 0
    return taxa_base + adicional_chuva

# Execução
km = distancia()
esta_chovendo = chuva()
valor_final = calcular_taxa_entrega(km, esta_chovendo)

print(f'O valor final da entrega é R${valor_final:.2f}')