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

def palindromo(texto: str) -> bool:
    if len(texto) <= 1:
        return True
    if texto[0] == texto[-1]:
        return palindromo(texto[1:-1])
    return False

def main():
    if len(sys.argv) < 2:
        return

    entrada = sys.argv[1]
    limpio = "".join(c.lower() for c in entrada if c.isalpha())

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

if __name__ == "__main__":
    main()

Análisis

Cumple con el enunciado

El programa cumple completamente con los requisitos del enunciado. La función palindromo es puramente recursiva (sin bucles), maneja correctamente el caso base para cadenas vacías o de un carácter, y reduce el problema en cada llamada mediante texto[1:-1]. El procesamiento previo en main() elimina caracteres no alfabéticos y convierte todo a minúsculas, como exige el enunciado. Ejemplos como "¡Reconocer!" y "" son evaluados correctamente según los casos de prueba proporcionados.

Es fácil de leer y entender

El código es mayormente comprensible para un principiante. Los nombres en español (limpio, entrada) y la estructura clara de la recursión facilitan la lectura. Sin embargo, la línea limpio = "".join(c.lower() for c in entrada if c.isalpha()) usa una comprensión de lista anidada que podría resultar confusa para estudiantes que apenas están aprendiendo bucles for, ya que combina tres operaciones (filtrado, transformación y unión) en una sola línea.

Sigue buenas prácticas de programación

El programa incluye elementos positivos como la docstring en palindromo y la estructura if __name__ == "__main__". No obstante, omite validar adecuadamente la entrada: si no se pasa ningún argumento, el programa termina silenciosamente sin mensaje de error, lo que dificulta su uso práctico. Además, aunque la comprensión de lista es eficiente, para estudiantes principiantes sería más pedagógico usar un bucle for explícito para procesar los caracteres, reforzando conceptos básicos ya vistos.

Recomendaciones de mejora

  • En main(), añade un mensaje de error cuando no se reciba ningún argumento (ej: print("Error: Debe proporcionar un texto como argumento")), para guiar al usuario.
  • Reemplaza la comprensión de lista en el procesamiento de limpio por un bucle for con acumulador, usando isalpha() y lower() paso a paso. Esto reforzaría el uso de estructuras básicas y haría el código más didáctico.
  • Añade comentarios breves en el procesamiento de limpio explicando cada paso (eliminar no alfabéticos, convertir a minúsculas), para reforzar el entendimiento del flujo lógico.