Kata 1: reescritura (fácil)¶
Problema¶
Tenemos un fichero test.py
con el siguiente contenido:
import pytest
import kata_normalizacion
testdata = [
# 1 ejemplo
('¿Dónde está el camino hacia las Puertas de Moria?',
'donde esta el camino hacia las puertas de moria')
]
@pytest.mark.parametrize('entrada, salida', testdata)
def test_funcion_normalizacion(entrada, salida):
frase_normalizada = kata_normalizacion.funcion_normalizacion(entrada)
assert frase_normalizada == salida
Lo que debemos hacer es crear un fichero kata_normalizacion.py
en el que
debe definirse una función funcion_normalizacion
que supere el test unitario
definido en test.py
.
Soluciones¶
Hay muchas posibles soluciones a la kata.
- Usando
maketrans
:
- Una manera
def funcion_normalizacion(entrada):
out_str = "aeiouAEIOU"
in_str = "áéíóúÁÉÍÓÚ"
transtab = entrada.maketrans(in_str,out_str)
return entrada.translate(transtab).lower().replace("?","").replace("¿","")
- Otra manera
signos = "¿?"
intab = "óáDPM"
outtab = "oadpm"
transform = str.maketrans(intab, outtab, signos)
def funcion_normalizacion1(entrada):
return entrada.translate(transform)
- Usando un bucle:
signos = "¿?"
def funcion_normalizacion2(entrada):
lista = []
for carácter in entrada:
if carácter == "ó":
lista.append("o")
elif carácter == "á":
lista.append("a")
elif carácter == "D":
lista.append("d")
elif carácter == "P":
lista.append("p")
elif carácter == "M":
lista.append("m")
elif carácter not in signos:
lista.append(carácter)
return "".join(lista)