La tarea es:
Su tarea es corregir los errores en el texto digitalizado. Solo tienes que manejar los siguientes errores:
Mi código:
def correct(string): for i in string: if '5' in string: string = string.replace('5','S') elif '0' in string: string = string.replace('0','O') elif '1' in string: string = string.replace('1','I') return string
Sé que esta solución no funcionará para una palabra como:
Test.assert_equals(correct("51NGAP0RE"),"SINGAPORE");
¿Alguien tiene consejos sobre cómo hacer de esta una función más general que funcione para cada palabra?
No use elif
, ya que solo hace una prueba si la anterior falló. Cámbielas todas a ordinario if
y el código funcionará correctamente.
Pero como se menciona en los comentarios, no hay necesidad de ninguna de las pruebas. Si la letra no está en la cadena, replace()
solo devolverá la cadena original, por lo que no hay daño.
string = string.replace('5', 'S').replace('0', 'O').replace('1', 'I')
Puedes usar str.replace
directamente.
def correct(string): return string.replace('5','S').replace('0','O').replace('1','I')
¿Por qué no haces uso de str.maketrans
y str.translate
?
>>> "51NGAP0RE".translate(str.maketrans('501', 'SOI')) 'SINGAPORE'
Envuelto en una función:
def correct(s): return s.translate(str.maketrans('501', 'SOI'))
Aquí hay otro método usando la comprensión de lista:
def correct(str_, replacements = {'5': 'S', '0': 'O', '1': 'I'}): return "".join(replacements.get(c, c) for c in str_) print(correct("51NGAP0RE")) #'SINGAPORE'