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()