Skip to content

Instantly share code, notes, and snippets.

@samuelgrigolato
Last active December 17, 2018 13:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save samuelgrigolato/c4ba6f11192faea9c550a77804745e27 to your computer and use it in GitHub Desktop.
Save samuelgrigolato/c4ba6f11192faea9c550a77804745e27 to your computer and use it in GitHub Desktop.
Resolução do Problema Nomes de Autores de Obras Bibliográficas (dojo Randori Opensanca/GDG-Aqa 15/12/2018)
ARTIGOS = ["da", "de", "do", "das", "dos"]
PARENTESCOS = ["FILHO", "FILHA", "NETO", "NETA", "SOBRINHO", "SOBRINHA", "JUNIOR"]
def formatar_nome(nome):
if nome is None:
raise ValueError("Nome é obrigatório!")
if type(nome) != str:
raise ValueError("Nome deve ser uma string!")
partes = nome.split()
if len(partes) == 1:
return nome.upper()
elif len(partes) == 2:
sobrenome = formatar_sobrenome(partes[1])
nome = capitalizar_nome(partes[0])
return f"{sobrenome}, {nome}"
else:
sobrenome = formatar_sobrenome(partes[-1])
nomes = partes[:-1]
if sobrenome in PARENTESCOS:
sobrenomes = [
formatar_sobrenome(sobrenome)
for sobrenome in partes[-2:]
]
sobrenome = ' '.join(sobrenomes)
nomes = partes[0:-2]
nomes_formatados = [
capitalizar_nome(nome)
for nome in nomes
]
nome_formatado = ' '.join(nomes_formatados)
return f"{sobrenome}, {nome_formatado}"
def capitalizar_nome(nome):
nome_caixa_baixa = nome.lower()
if nome_caixa_baixa in ARTIGOS:
return nome_caixa_baixa
else:
return nome_caixa_baixa.capitalize()
def formatar_sobrenome(nome):
nome_caixa_baixa = nome.lower()
if nome_caixa_baixa in ARTIGOS:
return nome_caixa_baixa
else:
return nome_caixa_baixa.upper()
from nomes import formatar_nome
def test_nome_unico():
#caso tenha só um nome
nome = "GUIMARAES"
#when
res = formatar_nome(nome)
#then
assert res == "GUIMARAES"
def test_outro_nome_unico():
#caso tenha só um nome
nome = "OLIVEIRA"
#when
res = formatar_nome(nome)
#then
assert res == "OLIVEIRA"
def test_nome_unico_minusculo():
#caso tenha só um nome
nome = "oliveira"
#when
res = formatar_nome(nome)
#then
assert res == "OLIVEIRA"
def test_nome_completo_caixa_correta():
# given
nome = "João SILVA"
# when
res = formatar_nome(nome)
#then
assert res == "SILVA, João"
def test_none():
# given
nome = None
# when
try:
res = formatar_nome(nome)
assert False
except ValueError as ex:
assert str(ex) == 'Nome é obrigatório!'
def test_nome_completo_caixa_alta():
# given
nome = "JOÃO SILVA"
# when
res = formatar_nome(nome)
#then
assert res == "SILVA, João"
def test_nome_completo_caixa_baixa():
# given
nome = "joão silva"
# when
res = formatar_nome(nome)
#then
assert res == "SILVA, João"
def test_nome_com_dois_sobrenomes():
# given
nome = "JOÃO SOUSA SILVA"
# when
res = formatar_nome(nome)
#then
assert res == "SILVA, João Sousa"
def test_nome_com_tres_sobrenomes():
# given
nome = "JOÃO SOUSA SILVA BENICIO"
# when
res = formatar_nome(nome)
#then
assert res == "BENICIO, João Sousa Silva"
def test_nome_com_artigo():
# given
nome = "JOÃO DA SOUSA SILVA BENICIO"
# when
res = formatar_nome(nome)
#then
assert res == "BENICIO, João da Sousa Silva"
def test_nome_com_artigo_de():
# given
nome = "JOÃO de SOUSA"
# when
res = formatar_nome(nome)
#then
assert res == "SOUSA, João de"
def test_nome_com_artigo_no_inicio():
# given
nome = "DA SOUSA SILVA BENICIO"
# when
res = formatar_nome(nome)
#then
assert res == "BENICIO, da Sousa Silva"
def test_nome_com_parentesco_maiusculo():
#given
nome = "FELIPE NETO"
#when
res = formatar_nome(nome)
#then
assert res == "NETO, Felipe"
def test_nome_com_tres_parentesco():
#given
nome = "FELIPE LUCAS NETO"
#when
res = formatar_nome(nome)
#then
assert res == "LUCAS NETO, Felipe"
def test_nome_com_tres_parentesco_junior():
#given
nome = "LUIZ CARLOS JUNIOR"
#when
res = formatar_nome(nome)
#then
assert res == "CARLOS JUNIOR, Luiz"
def test_nome_com_tres_parentesco_filho():
#given
nome = "marcos souza filho"
#when
res = formatar_nome(nome)
#then
assert res == "SOUZA FILHO, Marcos"
def test_nome_com_quatro_parentesco():
#given
nome = "marcos guimaraes souza filho"
#when
res = formatar_nome(nome)
#then
assert res == "SOUZA FILHO, Marcos Guimaraes"
def test_nome_com_artigo_no_sobrenome():
#given
nome = "marcos guimaraes souza de filho"
#when
res = formatar_nome(nome)
#then
assert res == "de FILHO, Marcos Guimaraes Souza"
def test_numero():
#given
nome = 123
#when
try:
res = formatar_nome(nome)
assert False
except ValueError as ex:
assert str(ex) == 'Nome deve ser uma string!'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment