Финальная реализация и тестирование
Теперь давайте завершим реализацию, чтобы обработать все необходимые случаи, и проверим, что она проходит все тестовые случаи.
Обновите файл snake_case.py
с финальной реализацией:
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}")
В этой финальной реализации:
- Дефисы заменяются на пробелы.
- Перед шаблонами типа "Word" добавляется пробел с помощью
re.sub('([A-Z][a-z]+)', r' \1', s)
.
- Перед последовательностями заглавных букв добавляется пробел с помощью
re.sub('([A-Z]+)', r' \1', s)
.
- Строка разбивается по пробелам, объединяется с использованием подчеркиваний и преобразуется в нижний регистр.
Теперь давайте запустим нашу функцию на наборе тестов, созданном на этапе настройки:
python3 ~/project/test_snake.py
Если ваша реализация правильная, вы должны увидеть:
All tests passed! Your snake case function works correctly.
Поздравляем! Вы успешно реализовали надежную функцию преобразования в snake case, которая может обрабатывать различные форматы входных данных.
Давайте убедимся, что наша функция точно соответствует спецификации, протестировав ее на примерах из исходной задачи:
## 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)
Запустите обновленный скрипт:
python3 ~/project/snake_case.py
Вы должны увидеть, что все примеры правильно преобразуются в 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
--------------------