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 = lista[i]


        elementos_restantes = lista[:i] + lista[i + 1:]
        for perm in permutaciones(elementos_restantes):
            resultado.append([elemento] + 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

El programa cumple parcialmente con el enunciado.

  • Genera correctamente todas las permutaciones de una lista sin usar itertools.
  • Sin embargo, el print("terminado") dentro del bucle de impresión agrega texto innecesario al resultado final, lo cual no parece alinearse con el formato esperado de salida (sólo mostrar las permutaciones).

Es fácil de leer y entender

El código es fácil de leer para alguien que conoce recursión y listas.

  • Los nombres de variables (lista, elemento, elementos_restantes) son descriptivos.
  • La lógica recursiva está bien estructurada, aunque podría beneficiarse de comentarios explicativos para principiantes.
  • El uso de print("terminado") genera confusión, ya que no está relacionado con el cálculo de permutaciones.

Sigue buenas prácticas de programación

El programa sigue algunas buenas prácticas, pero tiene áreas de mejora:

  • La función permutaciones está bien definida y encapsula la lógica.
  • El código de prueba (fuera de la función) no está protegido con if __name__ == "__main__":, lo que limita su reutilización.
  • No hay validación para casos como listas vacías.
  • El print("terminado") viola el principio de responsabilidad única (la función de permutación no debería mezclar lógica de impresión).

Recomendaciones de mejora

  1. Eliminar `print("terminado"):
    Este mensaje no aporta valor al resultado y altera el formato de salida esperado. Basta con imprimir cada permutación.

  2. Validar listas vacías:
    Si la lista está vacía, la función debería devolver una lista con una permutación vacía: return [[]] en lugar de [lista] cuando len(lista) == 0.

  3. Mejorar el código de prueba:
    Mover el código de prueba bajo un bloque if __name__ == "__main__": para evitar ejecución no deseada si se importa como módulo.

  4. Comentarios explicativos:
    Añadir comentarios breves en la función recursiva para aclarar cómo se construyen las permutaciones.

  5. Evitar duplicados innecesarios:
    La línea elemento = lista[i] no es estrictamente necesaria, pero mejora la legibilidad. Puede mantenerse.

Ejemplo de salida corregida:

for perm in perms:
    print(' '.join(perm))  # Sin "terminado"