Implémentation finale et tests
Maintenant, terminons notre implémentation pour gérer tous les cas requis et vérifions qu'elle passe tous les cas de test.
Mettez à jour votre fichier snake_case.py
avec l'implémentation finale :
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}")
Cette implémentation finale :
- Remplace les tirets par des espaces
- Ajoute un espace avant les motifs comme "Word" avec
re.sub('([A-Z][a-z]+)', r' \1', s)
- Ajoute un espace avant les séquences de lettres majuscules avec
re.sub('([A-Z]+)', r' \1', s)
- Divise la chaîne par les espaces, la rejoint avec des underscores et la convertit en minuscules
Maintenant, exécutons notre fonction avec la suite de tests créée à l'étape de configuration :
cd /tmp && python3 test_snake.py
Si votre implémentation est correcte, vous devriez voir :
All tests passed! Your snake case function works correctly.
Félicitations ! Vous avez réussi à implémenter une fonction de conversion en snake case robuste qui peut gérer différents formats d'entrée.
Vérifions que notre fonction suit précisément la spécification en la testant avec les exemples du problème 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)
Exécutez votre script mis à jour :
python3 ~/project/snake_case.py
Vous devriez voir que tous les exemples sont correctement convertis en 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
--------------------