py_compress_decompress · Python

▶ Aprender py_compress_decompress (Python) paso a paso · explicación de py_compress_decompress

Código línea a línea

Tres columnas: el código, el trozo del subject o del main que obliga a escribir esa línea, y el por qué.

py_compress_decompress.py
CódigoSubjectPor qué
def compress(s: str) -> str:`compress(s: str) -> str`:Firma tal cual la pide el subject: nombre, parámetro y tipo de retorno.
out = ""return an empty stringAcumulador vacío: si s está vacío, sale tal cual.
i = 0Índice del carácter que empieza la racha.
while i < len(s):consecutive repeated charactersRecorro racha a racha, no carácter a carácter: i salta al final de cada racha.
j = ij avanza mientras el carácter sea el mismo que en i.
while j < len(s) and s[j] == s[i]:consecutive repeated charactersPrimero el límite, luego la comparación: así s[j] nunca se sale.
j += 1Un carácter más en la racha.
run = j - iappending the count after the characterLongitud de la racha = cuántas veces se repite.
out += s[i] if run == 1 else s[i] + str(run)If a character appears only once consecutively, omit the number '1'.Racha de 1 → solo la letra. Si no, letra + número (en texto, str).
i = jSiguiente racha empieza donde acabó esta.
return outDevuelvo, no imprimo: el corrector compara el valor devuelto.
def decompress(s: str) -> str:`decompress(s: str) -> str`:Segunda función en el mismo fichero: se corrigen juntas.
out = ""return an empty stringAcumulador vacío: si s está vacío, sale tal cual.
i = 0Índice del carácter que empieza la racha.
while i < len(s):consecutive repeated charactersRecorro racha a racha, no carácter a carácter: i salta al final de cada racha.
ch = s[i]expands it back to its uncompressed formLa letra actual.
i += 1Avanzo: lo que venga ahora son dígitos (o la siguiente letra).
digits = ""Handles multi-digit countsLos dígitos se acumulan como texto porque pueden ser varios ("12").
while i < len(s) and s[i].isdigit():Handles multi-digit counts (e.g., "a12" -> 12 'a's).Trago todos los dígitos seguidos. isdigit evita int() sobre una letra.
digits += s[i]Un dígito más al número.
i += 1Avanzo: lo que venga ahora son dígitos (o la siguiente letra).
out += ch * (int(digits) if digits else 1)If no count follows a character, it counts as 1.Sin dígitos → 1 copia. str * int repite la letra.
return outDevuelvo, no imprimo: el corrector compara el valor devuelto.