py_string_sculptor
Código comentado línea a línea y paso a paso:
Entregas: py_string_sculptor.py con string_sculptor(text). Rank 03 · nivel 5.
Qué pide (en palabras normales)
- Alternar minúscula/mayúscula en las letras: la primera minúscula, la segunda mayúscula...
- Lo que no es letra se copia y no cuenta en la alternancia. Un espacio además reinicia: la siguiente letra vuelve a minúscula.
Subject (enunciado original)
Write a function that transforms a string by alternating the case of
alphabetic characters only.
Non-alphabetic characters remain unchanged and are NOT counted in the
alternation index.
The first alphabetic character should be lowercase, the second uppercase, etc.
Spaces reset the alternation (next alpha after a space is lowercase again).
Expected file: py_string_sculptor.py
Function signature:
def string_sculptor(text: str) -> str:
Examples:
string_sculptor("hello")
=> "hElLo"
string_sculptor("Hello World")
=> "hElLo wOrLd"
string_sculptor("abc123def")
=> "aBc123DeF"
string_sculptor("Python3.9!")
=> "pYtHoN3.9!"
string_sculptor("")
=> ""
Solución: un booleano
upper = False
for ch in text:
if ch == " ":
upper = False
out += ch
elif ch.isalpha():
out += ch.upper() if upper else ch.lower()
upper = not upper
else:
out += ch
No hace falta índice ni contador: solo "¿la próxima letra va en mayúscula?". Letra → aplico y cambio. Espacio → False. Otro → nada.
Trampas
- El reinicio es solo con espacio, no con cualquier no-letra:
"abc123def"→"aBc123DeF", laDsigue la alternancia que dejó lac. - Fuerza el caso, no lo "cambies":
"Hello"empieza por mayúscula y tiene que salir"hElLo". - Usar
enumerateconi % 2cuenta también los no-alfabéticos y falla.