Implementação Final e Testes
Agora, vamos completar nossa implementação para lidar com todos os casos necessários e verificar se ela passa em todos os casos de teste.
Atualize seu arquivo snake_case.py com a implementação 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 implementação final:
- Substitui hífens por espaços
- Adiciona um espaço antes de padrões como "Word" com
re.sub('([A-Z][a-z]+)', r' \1', s)
- Adiciona um espaço antes de sequências de letras maiúsculas com
re.sub('([A-Z]+)', r' \1', s)
- Divide por espaços, junta com underscores e converte para minúsculas
Agora, vamos executar nossa função em relação ao conjunto de testes que foi criado na etapa de configuração:
python3 ~/project/test_snake.py
Se sua implementação estiver correta, você deverá ver:
All tests passed! Your snake case function works correctly.
Parabéns! Você implementou com sucesso uma função robusta de conversão para snake case que pode lidar com vários formatos de entrada.
Vamos garantir que nossa função siga com precisão a especificação, testando-a com os exemplos do 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)
Execute seu script atualizado:
python3 ~/project/snake_case.py
Você deve ver que todos os exemplos são convertidos corretamente para 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
--------------------