Skip to content

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'

  • 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
import re


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("Uso: python3 palindromo.py \"texto a evaluar\"")
        return

    texto_original = " ".join(sys.argv[1:])

    texto_limpio = re.sub(r'[^a-zA-Z]', '', texto_original).lower()

    if palindromo(texto_limpio):
        print("Es palíndromo")
    else:
        print("No es palíndromo")


if __name__ == "__main__":
    main()

Análisis

Cumple con el enunciado

El programa cumple parcialmente con el enunciado. La función recursiva palindromo está implementada correctamente: maneja el caso base (cadenas vacías o de longitud 1), compara extremos y reduce el problema recursivamente. Sin embargo, no procesa adecuadamente caracteres alfabéticos propios del español como la "ñ". La expresión regular [^a-zA-Z] elimina estos caracteres (ej.: "año" se convierte en "ao"), lo que viola el requisito de ignorar solo caracteres no alfabéticos. En español, la "ñ" es alfabética, por lo que debería conservarse. Los ejemplos del enunciado no incluyen estos casos, pero el programa fallaría con entradas como "eñe" (que sí es palíndromo).

Es fácil de leer y entender

El código es claro para un estudiante principiante. Usa nombres descriptivos (texto_limpio, palindromo), estructura lógica y comentarios implícitos en la lógica. Sin embargo, el uso de re.sub podría generar confusión, ya que los alumnos solo han visto construcciones básicas (bucles, condicionales). Un enfoque con for o while para limpiar la cadena sería más accesible para su nivel.

Sigue buenas prácticas de programación

La estructura general es adecuada: separa la limpieza de la lógica recursiva, incluye docstring y maneja argumentos correctamente. No obstante, depende de una librería avanzada (re) sin justificación clara, cuando el problema podría resolverse con ciclos básicos. Además, no se valida si texto_limpio queda vacío tras la limpieza (aunque el caso base lo maneja implícitamente).

Recomendaciones de mejora

  1. Reemplaza re.sub con un ciclo básico: Usa un bucle for para filtrar caracteres alfabéticos con isalpha() y convertir a minúsculas. Ejemplo:

    texto_limpio = ''.join(c.lower() for c in texto_original if c.isalpha())

    Esto manejaría correctamente la "ñ" y usaría conceptos ya vistos (ciclos, condicionales).

  2. Explica brevemente la limpieza de texto: Añade un comentario en main() indicando que se eliminan caracteres no alfabéticos según el alfabeto español (aunque Python isalpha() ya lo hace automáticamente).

  3. Evita dependencias innecesarias: Al no usar re, el código sería más coherente con el nivel de los alumnos y cumpliría mejor el enunciado al respetar caracteres alfabéticos del español.