Implementación final y pruebas
Ahora completemos nuestra implementación para manejar todos los casos requeridos y verifiquemos que pase todas las pruebas.
Actualiza tu archivo snake_case.py con la implementación final:
import re
def snake(s):
## Replace hyphens with spaces
s = s.replace('-', ' ')
## Handle PascalCase pattern
s = re.sub('([A-Z][a-z]+)', r' \1', s)
## Handle sequences of uppercase letters
s = re.sub('([A-Z]+)', r' \1', s)
## Split by whitespace and join with underscores
return '_'.join(s.split()).lower()
## Test with a complex example
if __name__ == "__main__":
test_string = "some-mixed_string With spaces_underscores-and-hyphens"
result = snake(test_string)
print(f"Original: {test_string}")
print(f"Snake case: {result}")
Esta implementación final:
- Reemplaza los guiones con espacios.
- Agrega un espacio antes de patrones como "Word" con
re.sub('([A-Z][a-z]+)', r' \1', s).
- Agrega un espacio antes de secuencias de letras mayúsculas con
re.sub('([A-Z]+)', r' \1', s).
- Divide por espacios, une con guiones bajos y convierte a minúsculas.
Ahora ejecutemos nuestra función contra la suite de pruebas creada en el paso de configuración:
python3 ~/project/test_snake.py
Si tu implementación es correcta, deberías ver:
All tests passed! Your snake case function works correctly.
¡Felicidades! Has implementado con éxito una función robusta de conversión a snake case que puede manejar varios formatos de entrada.
Asegurémonos de que nuestra función siga con precisión la especificación probándola con los ejemplos del problema original:
## Add this to the end of your snake_case.py file:
if __name__ == "__main__":
examples = [
'camelCase',
'some text',
'some-mixed_string With spaces_underscores-and-hyphens',
'AllThe-small Things'
]
for ex in examples:
result = snake(ex)
print(f"Original: {ex}")
print(f"Snake case: {result}")
print("-" * 20)
Ejecuta tu script actualizado:
python3 ~/project/snake_case.py
Deberías ver que todos los ejemplos se convierten correctamente a snake case:
Original: some-mixed_string With spaces_underscores-and-hyphens
Snake case: some_mixed_string_with_spaces_underscores_and_hyphens
Original: camelCase
Snake case: camel_case
--------------------
Original: some text
Snake case: some_text
--------------------
Original: some-mixed_string With spaces_underscores-and-hyphens
Snake case: some_mixed_string_with_spaces_underscores_and_hyphens
--------------------
Original: AllThe-small Things
Snake case: all_the_small_things
--------------------