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:

lista = ['Hola', 'Qué tal', 'Adiós']
print('Lista:', lista)
print('Permutaciones:')
print("")
#OPCION 1
print("Opcion 1: (Bucle)")

dim = len(lista)

for j in range(dim):
    prim = lista[j]
    l2 = lista.copy()
    del(l2[j])
    print(prim, l2[0], l2[1])
    print(prim, l2[1], l2[0])

print("")

#Opcion 2
print("Opcion 2:")
print(lista[0], lista[1], lista[2])
print(lista[0], lista[2], lista[1])
print(lista[1], lista[0], lista[2])
print(lista[1], lista[2], lista[0])
print(lista[2], lista[0], lista[1])
print(lista[2], lista[1], lista[0])

Análisis

Cumple con el enunciado

. Ambas opciones generan correctamente las 6 permutaciones posibles de la lista de 3 elementos, como se muestra en el ejemplo de ejecución. El resultado coincide exactamente con lo esperado.

Es fácil de leer y entender

⚠️ Parcialmente. La opción 1 tiene un enfoque lógico (tomar cada elemento como primero y permutar los restantes), pero el uso de del y copy() puede confundir a principiantes. La opción 2 es extremadamente directa pero repetitiva, lo que facilita su comprensión para listas pequeñas.

Sigue buenas prácticas de programación

No. La opción 2 viola completamente el principio de reutilización y escalabilidad al hardcodear todas las permutaciones. La opción 1, aunque mejora, asume que siempre habrá exactamente 2 elementos restantes (accediendo a l2[0] y l2[1]), lo que la hace inflexible para listas de tamaño diferente.

Recomendaciones de mejora

  1. Evitar hardcodeo en la opción 2
    La opción 2 solo funciona para listas de 3 elementos específicos. Si el tamaño de la lista cambia, el programa falla. Es preferible usar bucles para resolver el problema de forma general.

  2. Usar índices en lugar de valores en la opción 1
    En lugar de prim = lista[j], se podría trabajar directamente con índices para evitar crear copias innecesarias de la lista.

  3. Mejorar la claridad del código
    Agregar comentarios explicando cada paso en la opción 1, y evitar operaciones como del(l2[j]) que modifican la lista original de forma poco intuitiva.

  4. Evitar asunciones sobre el tamaño de la lista
    Aunque el enunciado especifica 3 elementos, un programa bien estructurado no debería depender de accesos manuales a l2[0] y l2[1]. Se podría usar un bucle anidado para permutar los elementos restantes.

  5. Uso de itertools.permutations (solo para referencia futura)
    En un programa real, se recomendaría usar itertools.permutations para generar permutaciones automáticamente. Sin embargo, esta práctica exige resolver el problema sin bibliotecas externas, por lo que no es aplicable aquí.