#==============================================================================
name_std = r'^[A-Z][a-z]*' # Padrão para os nomes
num_std = r'\d{4}' # Padrão para os anos
''' Essa função recebe uma string com os dados de paciente e retorna uma lista
formatada desses dados validados.
Input (str) - String com os dados do paciente:
deve conter nome, sobrenome, ano de nascimento (yyyy) e as
primeiras letras devem ser maiúsculas.
Output (list) - Lista formatada ou (None) em caso de dados inválidos
'''
def monta_lista_com_validacao(raw_data):
data_list = [] # Lista final
i = 0 # Contador de iterações
# elimina o dash (-), se presente
raw_data = raw_data.replace('-', '')
# Cria uma lista temporária de palavras separadas a partir da input string
data_list_temp = raw_data.split()
# print('List: ', data_list) # Test
# Monta a lista final validando a cada etapa.
for item in data_list_temp:
i += 1
if i == 1:
# Valida o primeiro nome (a primeira letra deve ser maiúscula)
if re.findall(name_std, item):
data_list.append(f'{i}º nome: {item}')
continue
else:
return None
else:
# Verifica a presença de sobrenome
if i == 2 and not re.findall(name_std, item):
return None
if not re.findall(name_std, item) and not re.fullmatch(num_std, item):
return None
# Valida demais nomes e o sobrenome (a primeira letra deve ser maiúscula)
elif re.findall(name_std, item) and not re.fullmatch(num_std, item):
data_list.append(f'{i}º nome (ou sobrenome): {item}')
continue
# Se tudo ok até aqui, valida o ano de nascimento no formato (yyyy)
elif re.fullmatch(num_std, item):
data_list.append(f'Ano de Nascimento: {item}')
return data_list
# Coleta "crua" de dados do paciente
dados_paciente_str = input('Digite o nome completo e o ano de nascimento do paciente: ')
validated_list = monta_lista_com_validacao(dados_paciente_str)
if validated_list:
for data_item in validated_list:
print(data_item)
else:
print('Formato inválido!')