1
resposta

[Solução] Aprovando empréstimo

def pega_float(pergunta: str, opcoes: list[float] = []) -> float:
    """
    Solicita uma entrada do usuário, garantindo que seja um número de ponto
    flutuante (float) e, opcionalmente, que esteja dentro de uma lista de opções válidas.

    A função converte automaticamente vírgulas (',') para pontos ('.') antes
    de tentar a conversão para float.

    Args:
        pergunta: A mensagem (prompt) a ser exibida ao usuário.
        opcoes: Uma lista de floats válidos. Se a lista estiver vazia
            (padrão), qualquer número de ponto flutuante é aceito.

    Returns:
        O número de ponto flutuante digitado pelo usuário.

    Raises:
        ValueError: Se a entrada não puder ser convertida para `float`
            ou se o float digitado não estiver na lista de opções válidas.
    """
    
    resposta: float = 0.0
    
    try:
        resposta = float(input(pergunta).replace(',', '.'))
    except ValueError:
        raise ValueError('Entrada inválida!')
    
    if opcoes == []:
        return resposta
    
    if resposta in opcoes:
        return resposta
    raise ValueError('Opção inválida!')

def valida_renda_mensal_minima(renda_mensal: float, renda_mensal_minima: float) -> bool:
    """
    Verifica se a renda mensal informada é maior do que a renda mínima exigida.

    Args:
        renda_mensal: O valor da renda mensal do solicitante.
        renda_mensal_minima: O valor mínimo de renda exigido para aprovação.

    Returns:
        True: Se a `renda_mensal` for maior que a `renda_mensal_minima`.
        False: Caso contrário.

    Raises:
        ValueError: Se `renda_mensal` ou `renda_mensal_minima` for menor ou igual a zero.
    """

    if not renda_mensal > 0:
        raise ValueError('"renda_mensal" deve ser, obrigatóriamente, maior que zero.')
    if not renda_mensal_minima > 0:
        raise ValueError('"renda_mensal_minima" deve ser, obrigatóriamente, maior que zero.')
    
    if renda_mensal > renda_mensal_minima:
        return True
    
    return False

def valida_parcela_mensal(parcela: float, renda_mensal: float, aliquota_maxima: float) -> bool:
    """
    Verifica se o valor da parcela mensal desejada está dentro do limite máximo
    permitido, baseado na renda mensal e em uma alíquota máxima.

    O limite é calculado como: (renda_mensal * (aliquota_maxima / 100)).

    Args:
        parcela: O valor da parcela mensal desejada.
        renda_mensal: O valor da renda mensal do solicitante.
        aliquota_maxima: O percentual máximo da renda que pode ser comprometido com a parcela.

    Returns:
        True: Se a `parcela` for menor ou igual ao limite de comprometimento da renda.
        False: Caso contrário.

    Raises:
        ValueError: Se `parcela`, `renda_mensal` ou `aliquota_maxima` for menor ou igual a zero.
    """
    
    if not parcela > 0:
        raise ValueError('"parcela" deve ser, obrigatóriamente, maior que zero.')
    if not renda_mensal > 0:
        raise ValueError('"renda_mensal" deve ser, obrigatóriamente, maior que zero.')
    if not aliquota_maxima > 0:
        raise ValueError('"aliquota_maxima" deve ser, obrigatóriamente, maior que zero.')

    if parcela <= (renda_mensal * (aliquota_maxima / 100)):
        return True
    
    return False

def main() -> None:
    """
    Função principal que simula a validação de um pedido de empréstimo.

    O processo envolve:
    1. Coletar a renda mensal e o valor da parcela desejada.
    2. Validar se a renda é maior que o mínimo exigido (RENDA_MENSAL_MINIMA).
    3. Validar se a parcela não excede o percentual máximo da renda (ALIQUOTA_MAXIMA).
    4. Exibir o resultado da aprovação ou negação.
    """

    RENDA_MENSAL_MINIMA: float = 2000.0
    ALIQUOTA_MAXIMA: float = 30.0

    renda_mensal: float = 0
    parcela_mensal: float = 0
    
    while True:
        try:
            renda_mensal = pega_float('\nDigite o valor da sua renda mensal: ')
            if not renda_mensal > 0:
                print('A renda mensal precisa ser maior que zero.')
                continue
            break
        except ValueError as e:
            print(e)
    
    while True:
        try:
            parcela_mensal = pega_float('\nDigite o valor da parcela desejada: ')
            if not parcela_mensal > 0:
                print('A parcela mensal precisa ser maior que zero.')
                continue
            break
        except ValueError as e:
            print(e)
    
    if not valida_renda_mensal_minima(renda_mensal, RENDA_MENSAL_MINIMA):
        print('Empréstimo negado: renda mensal insuficiente.')
    elif not valida_parcela_mensal(parcela_mensal, renda_mensal, ALIQUOTA_MAXIMA):
        print(f'Empréstimo negado: parcela acima de {ALIQUOTA_MAXIMA}% da renda')
    else:
        print('Empréstimo aprovado!')


if __name__ == '__main__':
    main()

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Oi, Mozert! Como vai?

Agradeço por compartilhar suas reflexões e aprendizados com a comunidade Alura.

Seu código está muito bem estruturado e com uma lógica clara. Gostei de como você usou as funções para validar cada etapa do processo, isso deixa o código organizado e fácil de manter. A divisão entre as funções de validação e a função principal mostra uma boa prática de modularização.

Continue praticando esse estilo de programação.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!