import re
def validar_string_de_inteiros(texto: str) -> bool:
"""
Verifica se uma string é composta exclusivamente por números INTEIROS
(com ou sem sinal) separados por um ou mais espaços.
A validação é feita token a token, garantindo que cada parte
corresponda exatamente ao padrão de um número inteiro.
Args:
texto (str): A string a ser validada, contendo tokens separados por espaço.
Returns:
bool: True se todos os tokens forem números inteiros válidos, False caso contrário.
"""
REGEX_POR_NUMERO = re.compile(r'^[-+]?\d+$')
texto_limpo: str = texto.strip()
if not texto_limpo:
return False
tokens: list[str] = re.split(r'\s+', texto_limpo)
for token in tokens:
if not REGEX_POR_NUMERO.fullmatch(token):
return False
return True
def converter_string_para_lista_de_inteiros(string_numeros: str) -> list[int]:
"""
Converte uma string de números INTEIROS (separados por espaço)
em uma lista de números inteiros (int).
Args:
string_numeros (str): A string contendo os números a serem convertidos.
Returns:
list[int]: Uma lista contendo os valores inteiros.
Raises:
ValueError: Se a string falhar na validação (contiver tokens não numéricos,
decimais ou separadores inválidos).
"""
if not validar_string_de_inteiros(string_numeros):
raise ValueError(
'A string contém formatos não correspondentes a números inteiros ou separadores múltiplos não permitidos.'
)
string_limpa: str = string_numeros.strip()
tokens: list[str] = re.split(r'\s+', string_limpa)
try:
return [int(token) for token in tokens]
except ValueError:
raise ValueError('Erro ao tentar converter o token para [int]')
def main() -> None:
entrada: str = ''
lista_de_numeros_inteiros: list[int] = []
lista_de_numeros_pares: list[int] = []
numeros_pares: list[str] = []
while True:
try:
entrada = input('\nDigite os números separados por espaço (apenas inteiros): ').strip()
lista_de_numeros_inteiros = converter_string_para_lista_de_inteiros(entrada)
break
except ValueError as e:
print(f'\n{e}')
try:
lista_de_numeros_pares = list(filter(lambda x: x % 2 == 0, lista_de_numeros_inteiros))
numeros_pares = list(map(str, lista_de_numeros_pares))
except ValueError:
print('\nErro ao filtrar números pares')
exit(1)
if numeros_pares:
print(f'\nNúmeros pares: {' '.join(numeros_pares)}')
else:
print('Não foram encontrados números pares.')
if __name__ == '__main__':
main()