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:

"""Módulo para verificar si un texto es un palíndromo.

Este módulo proporciona funciones para determinar si una cadena de texto
es un palíndromo, ignorando mayúsculas/minúsculas y caracteres no alfabéticos.
"""

import sys


def palindromo(texto: str) -> bool:
    """Determina si el texto es un palíndromo de forma recursiva.

    :param texto: Cadena de caracteres a evaluar, en minúsculas
    y sin caracteres no alfabéticos
    :return: True si es palíndromo, False en caso contrario
    """
    # Casos base
    if len(texto) <= 1:
        return True
    # Si el primer y último carácter son iguales, verificamos el resto
    if texto[0] == texto[-1]:
        return palindromo(texto[1:-1])
    return False


def limpiar_texto(texto: str) -> str:
    """Limpia el texto, dejando solo letras en minúsculas.

    :param texto: Texto a limpiar
    :return: Texto en minúsculas y sin caracteres no alfabéticos
    """
    return ''.join(
        caracter.lower()
        for caracter in texto
        if caracter.isalpha()
    )


def main():
    """Función principal que maneja la ejecución del programa.

    Lee los argumentos de línea de comandos, limpia el texto de entrada
    y verifica si es un palíndromo, mostrando el resultado.
    """
    if len(sys.argv) != 2:
        print("Uso: python palindromo.py 'texto a verificar'")
        return

    texto = sys.argv[1]
    texto_limpio = limpiar_texto(texto)

    if not texto_limpio:
        print("No es palíndromo")
        return

    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 no cumple completamente con el enunciado. Aunque la función recursiva palindromo está bien implementada (maneja casos base correctamente y reduce el problema en cada llamada), hay un error crítico en la función main. Cuando el texto limpio resulta en una cadena vacía (ej: entrada "!!!"), el programa imprime "No es palíndromo", pero según el enunciado las cadenas vacías son palíndromos. El código actual evita llamar a palindromo en este caso, incumpliendo el requisito explícito del problema.

Es fácil de leer y entender

El código es claro y accesible para principiantes. Usa nombres descriptivos (limpiar_texto, palindromo), incluye comentarios explicativos y divide la lógica en funciones pequeñas. La recursión se implementa de forma intuitiva (comparar primer/último carácter y reducir la cadena), lo que facilita su comprensión para estudiantes que están aprendiendo el concepto.

Sigue buenas prácticas de programación

El programa aplica buenas prácticas básicas:

  • Documentación clara con docstrings en todas las funciones.
  • Separación de responsabilidades (limpieza de texto vs. verificación recursiva).
  • Manejo adecuado de argumentos de línea de comandos.
    Sin embargo, el error en main al no considerar que la cadena vacía es un palíndromo demuestra una falta de alineación con los requisitos específicos del enunciado, lo que afecta la corrección lógica.

Recomendaciones de mejora

  1. Eliminar la verificación prematura de cadena vacía en main:
    La línea if not texto_limpio: ... debe eliminarse. La función palindromo ya maneja correctamente las cadenas vacías (devuelve True), por lo que no es necesario tratar este caso de forma especial antes de llamarla. Esto asegurará que entradas como "!!!" (que se limpian a "") se evalúen como palíndromos, cumpliendo el enunciado.

  2. Ajustar el mensaje para cadenas no alfabéticas:
    Si el enunciado requiere tratar explícitamente casos sin caracteres válidos (ej: "123"), el programa actual los consideraría como palíndromos (por ser cadena vacía tras limpieza), lo cual es correcto según la especificación. No se necesita cambio adicional aquí, solo eliminar el bloque problemático en main.

  3. Refuerzo conceptual en comentarios:
    Agregar un comentario en main explicando que "la cadena vacía se considera palíndromo según el enunciado, por lo que se evalúa directamente con la función recursiva" ayudaría a reforzar el requisito para el estudiante.