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:


lista1 = ['Hola', 'Qué tal', 'Adios'] 
print("lista:", lista1)
print("permutaciones:")

for i in range(len(lista1)): #asignamos un bucle que tenga de rango la longitud de la lista
    primera_palabra = lista1[i] #asignamos una variable especial para que vata variando el primer objeto de la lista
    lista2 = lista1.copy() #creamos una copia de la lista original
    del(lista2[i]) #borramos el comando de la lista original que hacia que cambien el orden de los objetos de la lista 2
    print(primera_palabra, lista2[0], lista2[1])
    print(primera_palabra, lista2[1], lista2[0]) #imprimimos la secuencia necesaria para que no se repita ningun objeto en la permutacion de nuestra lista

Análisis

Cumple con el enunciado

.
El programa genera todas las permutaciones posibles de la lista de 3 elementos, mostrando cada combinación en orden diferente. Para cada elemento de la lista original (lista1), crea una copia (lista2) sin ese elemento y luego imprime dos combinaciones usando los elementos restantes. Esto cubre las 6 permutaciones necesarias (3! = 6).

Es fácil de leer y entender

⚠️ Parcialmente.
El código tiene comentarios explicativos, pero algunos son ambiguos (ej: "borramos el comando de la lista original"). Además, el uso de del(lista2[i]) para modificar la lista puede confundir a principiantes. La lógica funciona, pero podría simplificarse con estructuras más claras.

Sigue buenas prácticas de programación

No.
El programa depende de que la lista tenga exactamente 3 elementos. Si la lista tuviera más o menos elementos, el código fallaría al acceder a lista2[0] y lista2[1]. Además, modificar listas con del puede llevar a errores si no se maneja con cuidado. No se validan casos extremos (ej: lista vacía).

Recomendaciones de mejora

  1. Evitar asumir la longitud fija de la lista:
    En lugar de usar índices fijos (lista2[0], lista2[1]), itera sobre los elementos restantes con bucles anidados para hacer el código más generalizable.

  2. Usar variables con nombres más descriptivos:
    Cambiar primera_palabra por elemento_actual o prefijo para aclarar su propósito.

  3. Corregir comentarios ambiguos:
    El comentario "borramos el comando de la lista original" es incorrecto. Debería decir "eliminamos el elemento actual de la copia de la lista".

  4. Evitar modificar listas mientras se iteran:
    En lugar de del(lista2[i]), usa operaciones como lista1[:i] + lista1[i+1:] para crear sublistas sin el elemento actual.

  5. Considerar el uso de itertools (solo para referencia futura):
    En un programa real, itertools.permutations resolvería el problema de forma más eficiente. Sin embargo, para esta práctica, el enfoque manual es adecuado para entender la lógica.