1
resposta

[Solução] Calculando a idade

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

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

    Returns:
        O número inteiro digitado pelo usuário.

    Raises:
        ValueError: Se a entrada não puder ser convertida para int.
        ValueError: Se o inteiro digitado não estiver na lista de opções válidas.
    """

    resposta: int = 0
    
    try:
        resposta = int(input(pergunta).strip())
    except ValueError:
        raise ValueError('Entrada inválida!')
    
    if opcoes == []:
        return resposta
    
    if resposta in opcoes:
        return resposta
    raise ValueError('Opção inválida!')

def calcula_idade(ano_nascimento: int, ano_atual: int) -> int:
    """
    Calcula a idade de uma pessoa com base no ano de nascimento e ano atual.

    Args:
        ano_nascimento: O ano em que a pessoa nasceu.
        ano_atual: O ano atual para o cálculo da idade.

    Returns:
        A idade calculada (ano_atual - ano_nascimento).

    Raises:
        ValueError: Se `ano_atual` for menor que `ano_nascimento`.
    """

    if not ano_atual >= ano_nascimento:
        raise ValueError('"ano_atual" precisa, obrigatóriamente, ser maior ou igual a "ano_atual"')
    
    return ano_atual - ano_nascimento


def main() -> None:
    """
    Função principal que solicita ao usuário o ano de nascimento e o ano atual,
    calcula a idade e exibe o resultado.

    A função trata exceções `ValueError` que podem ser levantadas pelas
    funções `pega_int` e `calcula_idade`, terminando o programa com um
    código de erro (1) em caso de falha.
    """

    ano_nascimento: int = 0
    ano_atual: int = 0
    idade_atual:int = 0
    
    try:
        ano_nascimento = pega_int('Digite o ano de nascimento: ')
        ano_atual = pega_int('Digite o ano atual: ')
    except ValueError as e:
        print(f'\n{e}')
        exit(1)
    
    try:
        idade_atual = calcula_idade(ano_nascimento, ano_atual)
    except ValueError:
        print('\nO ano atual precisa ser, obrigatóriamente, maior ou igual ao ano de nascimento')
        exit(1)
    
    print(f'\nA idade é {idade_atual} anos.')


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?

Seu código ficou muito bem estruturado e com docstrings claras. Gostei da forma como você tratou as exceções com ValueError, garantindo que o programa continue limpo e compreensível. Isso demonstra um ótimo domínio de boas práticas em Python.

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