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) #Imprime la lista original
print('Permutaciones:')
for i in range(len(lista)): #Bucle dependiendo de la longitud de la lista
lista1 = lista[i] #Una palabra de la lista se queda fija dependiendo del valor de i
lista2 = lista.copy() #Mantiene la lista original
del (lista2[i]) #Para evitar que se repita la palabra fija, la eliminamos. En i=0, no aparecerá de nuevo "Hola".
print(lista1, lista2[0], lista2[1]) #"Qué tal" ahora es 0. "lista1" para i = 0 es "Hola"
print(lista1, lista2[1], lista2[0]) #Imprime la otra combinación
#Hay que tener en cuenta que ahora la i se irá sumando de uno en uno, así que, para i = 1, la palabra fija es "Qué tal"
Análisis
Cumple con el enunciado
El programa genera todas las permutaciones posibles de los elementos de la lista ['Hola', 'Qué tal', 'Adiós']. Para una lista de 3 elementos, hay 6 permutaciones, y el código las imprime correctamente. Por ejemplo, cuando i=0, fija 'Hola' y permuta los otros dos elementos ('Qué tal' y 'Adiós'), generando dos combinaciones. Repite este proceso para cada elemento de la lista, logrando el resultado esperado.
Es fácil de leer y entender
El código tiene comentarios explicativos, pero el uso de nombres como lista1 y lista2 no es descriptivo. Además, la lógica asume que la lista siempre tiene 3 elementos (por ejemplo, print(lista1, lista2[0], lista2[1])), lo que puede confundir a un lector principiante si la lista cambia de tamaño. Una mejor organización y nombres más claros (como elemento_fijo, restantes) mejorarían la comprensión.
Sigue buenas prácticas de programación
El código está diseñado específicamente para listas de 3 elementos. Si la lista tuviera más o menos elementos, el programa fallaría (por ejemplo, al acceder a lista2[1] si la lista está vacía). Además, se repite la lógica de permutación manualmente (print(lista1, lista2[0], lista2[1]) y print(lista1, lista2[1], lista2[0])), lo que no es escalable. Una solución más general usaría bucles anidados o recursión para manejar listas de cualquier longitud.
Recomendaciones de mejora
-
Usar nombres descriptivos:
Cambiarlista1ylista2por variables comoelemento_fijoyrestantespara clarificar su propósito. -
Evitar dependencias del tamaño fijo:
El código asume quelista2siempre tendrá 2 elementos. Para listas más largas, esto no funciona. Podrías usar bucles anidados para generar permutaciones dinámicamente. -
Simplificar la lógica de permutación:
En lugar de imprimir manualmente las dos combinaciones posibles (lista2[0], lista2[1]ylista2[1], lista2[0]), podrías usar un bucle adicional para iterar sobre las posibles combinaciones de los elementos restantes. -
No modificar listas mientras se iteran:
Aunque en este caso se usalista.copy()para evitar alterar la lista original, es preferible evitar operaciones comodelsi no son estrictamente necesarias, especialmente para principiantes. -
Evitar
itertools(como en la práctica):
El programa no usaitertools, lo cual es correcto para esta práctica, ya que el objetivo es implementar la lógica manualmente.