Skip to content

Revisión automática de la práctica 01-permutaciones

Este es el resultado de una revisión automática de la prácica 01-permutaciones, 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 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.


Revisión automática de programa

Programa revisado:

def permutaciones(lista):
    if len(lista) <= 1:
        return [lista]

    resultado = []

    for i in range(len(lista)):

        elemento_actual = lista[i]


        elementos_restantes = lista[:i] + lista[i + 1:]
        for perm in permutaciones(elementos_restantes):
            resultado.append([elemento_actual] + perm)

    return resultado

lista = ['Hola', 'Qué tal', 'Adiós']
print('Lista:', lista)
print('Permutaciones:')


perms = permutaciones(lista)
for perm in perms:
    print(' '.join(perm))
    print("Terminado")

Análisis

Cumple con el enunciado

Sí.
El programa implementa una función recursiva para generar todas las permutaciones de una lista sin usar itertools. Al probarlo con ['Hola', 'Qué tal', 'Adiós'], debería imprimir las 6 permutaciones posibles, seguidas de la palabra "Terminado" en cada iteración (esto último podría ser confuso, pero no afecta la funcionalidad principal).

Es fácil de leer y entender

⚠️ Parcialmente.
La estructura lógica es clara: divide la lista en elementos actuales y restantes, genera permutaciones recursivamente y las combina. Sin embargo, el mensaje "Terminado" dentro del bucle de impresión de permutaciones genera confusión, ya que se imprime tras cada permutación en lugar de al finalizar todas. Además, el uso de variables en español (elemento_actual, elementos_restantes) puede dificultar la comprensión si el entorno de programación está en inglés.

Sigue buenas prácticas de programación

⚠️ Parcialmente.
La recursión es válida, pero no se manejan casos de entrada no válida (ej: None o tipos no list). La función no tiene comentarios explicativos, lo que dificulta entender el proceso recursivo para principiantes. El uso de range(len(lista)) y concatenación de listas es correcto, pero en listas grandes podría ser ineficiente (aunque no es relevante para el enunciado).


Recomendaciones de mejora

  1. Eliminar el mensaje "Terminado" dentro del bucle de impresión
    El mensaje se imprime tras cada permutación, lo que no parece intencional. Moverlo fuera del bucle para indicar el fin del proceso:

    perms = permutaciones(lista)
    for perm in perms:
        print(' '.join(perm))
    print("Terminado")
  2. Agregar comentarios explicativos
    Aclarar el funcionamiento de la recursión y el proceso de construcción de permutaciones, especialmente para estudiantes principiantes.

  3. Validar la entrada
    Asegurarse de que lista sea un objeto iterable válido (ej: verificar que no sea None).

  4. Considerar nombres en inglés para variables
    Aunque el código funciona, usar nombres como current_element y remaining_elements facilita la adaptación a estándares globales de programación.

  5. Evitar concatenación innecesaria de listas
    En lugar de lista[:i] + lista[i + 1:], usar elementos_restantes = lista[:i] + lista[i+1:] (espacio en i+1 para mejorar legibilidad).

  6. No usar itertools (no aplica aquí)
    El programa no usa itertools, lo cual es correcto para cumplir con el enunciado.