Revisión automática de la práctica 06-palindromo
Este es el resultado de una revisión automática de la prácica 06-palindromo, tal y como la hemos recogido de este repositorio de entrega. Por favor, ten en cuenta que al ser una revisión automática, realizada en parte con la ayuda de un asistente de inteligencia artificial generativa, puede incluir errores, y ser incorrecta. Pero leela con atención, porque creemos que puede tener información útil. Si tienes cualquier duda, o crees que la revisión es errónea, por favor, consulta con los profesores de la asignatura.
- Comprobación de archivos con extension '.py'
- Comprobación con ficheros de solución
- Prueba automática del programa
- Revisión automática de programa
- Análisis
- Recomendaciones de mejora
Comprobación de archivos con extension '.py'
- Archivos Python excluidos de la búsqueda:
- Archivos Python encontrados (excluyendo esos): palindromo.py
Correcto, se elige palindromo.py como entrega.
Comprobación con ficheros de solución
Los archivos son diferentes de los de la solución.
Prueba automática del programa
Pruebas realizadas por 06-palindromo/tests/test_palindromo.py:
OK
Pruebas realizadas por 06-palindromo/tests/test_program.py:
OK
Revisión automática de programa
Programa revisado:
import sys
SI = "Es palíndromo"
NO = "No es palíndromo"
def palindromo(texto: str) -> bool:
if len(texto) <= 1:
return True
if texto[0] != texto[-1]:
return False
return palindromo(texto[1:-1])
def main():
if len(sys.argv) < 2:
print(NO)
return
texto = sys.argv[1]
texto_limpio = "".join(c.lower() for c in texto if c.isalpha())
print(SI if palindromo(texto_limpio) else NO)
if __name__ == "__main__":
main()
Análisis
Cumple con el enunciado
El programa cumple completamente con el enunciado. La función palindromo es puramente recursiva (sin bucles), maneja correctamente el caso base para cadenas vacías o de longitud 1, y reduce el problema en cada llamada recursiva comparando el primer y último carácter. El procesamiento previo en main() elimina caracteres no alfabéticos y normaliza a minúsculas antes de llamar a la función recursiva, tal como exige el enunciado. Los ejemplos proporcionados en el enunciado (como "Anita lava la tina." y cadenas vacías) se evalúan correctamente.
Es fácil de leer y entender
El código es claro y accesible para principiantes. La estructura lógica es intuitiva: primero se limpia la entrada y luego se aplica la recursión. Los nombres de variables (texto_limpio, SI, NO) son descriptivos y el uso de constantes mejora la legibilidad. La función recursiva muestra claramente los casos base y la reducción del problema, lo que facilita entender el flujo de ejecución para alguien que está aprendiendo recursión.
Sigue buenas prácticas de programación
El programa sigue buenas prácticas básicas: separación de responsabilidades entre main() y la función recursiva, uso de constantes para mensajes, y documentación mínima en la función palindromo. El procesamiento de la entrada se realiza de manera eficiente con operaciones básicas de cadenas (aunque el uso de list comprehension podría simplificarse con un bucle for para hacerlo más didáctico, no es un error considerando los conocimientos previos permitidos).
Recomendaciones de mejora
-
Explicar el procesamiento de entrada con comentarios breves: Añadir un comentario en
main()que indique explícitamente que se están eliminando caracteres no alfabéticos y normalizando a minúsculas, para reforzar el cumplimiento del enunciado (ej:# Limpiar texto: solo letras y minúsculas). -
Simplificar la limpieza de texto para principiantes: Reemplazar la list comprehension por un bucle
forbásico al construirtexto_limpio, ya que los alumnos están en etapas iniciales y el uso de bucles es más familiar que las comprensiones de listas. Por ejemplo:texto_limpio = "" for c in texto: if c.isalpha(): texto_limpio += c.lower() -
Validar entrada vacía explícitamente: Aunque el código ya maneja cadenas vacías correctamente, añadir un comentario en el caso base (
if len(texto) <= 1) que recuerde que incluye el caso de cadena vacía reforzaría el entendimiento para principiantes.