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) #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

⚠️ Parcialmente.
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

No.
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

  1. Usar nombres descriptivos:
    Cambiar lista1 y lista2 por variables como elemento_fijo y restantes para clarificar su propósito.

  2. Evitar dependencias del tamaño fijo:
    El código asume que lista2 siempre tendrá 2 elementos. Para listas más largas, esto no funciona. Podrías usar bucles anidados para generar permutaciones dinámicamente.

  3. Simplificar la lógica de permutación:
    En lugar de imprimir manualmente las dos combinaciones posibles (lista2[0], lista2[1] y lista2[1], lista2[0]), podrías usar un bucle adicional para iterar sobre las posibles combinaciones de los elementos restantes.

  4. No modificar listas mientras se iteran:
    Aunque en este caso se usa lista.copy() para evitar alterar la lista original, es preferible evitar operaciones como del si no son estrictamente necesarias, especialmente para principiantes.

  5. Evitar itertools (como en la práctica):
    El programa no usa itertools, lo cual es correcto para esta práctica, ya que el objetivo es implementar la lógica manualmente.