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:')
for _ in range(len(lista)):
primero = lista[_]
lista2 = lista.copy()
del(lista2[_])
print(primero, lista2[0], lista2[1])
print(primero, lista2[1], lista2[0])
Análisis
Cumple con el enunciado
Sí cumple. El programa genera correctamente las 6 permutaciones para la lista de 3 elementos proporcionada en el ejemplo (['Hola', 'Qué tal', 'Adiós']). Cada iteración fija un elemento como primero y combina los dos restantes en ambos órdenes posibles, lo que coincide con el resultado esperado para una lista de tamaño fijo 3.
Es fácil de leer y entender
Parcialmente. Usa nombres de variables en español (lista, primero, lista2), lo que ayuda a la comprensión. Sin embargo, el uso de _ como variable de iteración en el bucle for no es descriptivo para principiantes, y las operaciones con índices fijos (lista2[0], lista2[1]) no dejan claro el propósito de manejar "los elementos restantes".
Sigue buenas prácticas de programación
No del todo. El código está hardcodeado para listas de exactamente 3 elementos (asume que lista2 siempre tendrá 2 elementos). Esto viola la idea básica de trabajar con estructuras dinámicas, aunque el enunciado sea específico para 3 elementos. Además, modificar la lista con del(lista2[_]) es menos claro que usar operaciones como slicing para obtener los elementos restantes.
Recomendaciones de mejora
-
Evita hardcodear índices: En lugar de acceder directamente a
lista2[0]ylista2[1], usa un bucle anidado para recorrer los elementos restantes. Por ejemplo, después de elegirprimero, itera sobrelista2para generar combinaciones dinámicamente. Esto haría el código adaptable incluso si la lista tuviera más elementos (aunque el enunciado sea para 3, es buen hábito practicar soluciones escalables). -
Mejora la legibilidad de variables: Usa nombres como
indiceen lugar de_para que se entienda que representa la posición actual en la lista. Por ejemplo:
for indice in range(len(lista)):. -
Sustituye
delpor operaciones más claras: En lugar dedel(lista2[_]), crea la sublista con slicing:
lista2 = lista[:indice] + lista[indice+1:].
Esto evita modificar la lista original y es más intuitivo para principiantes.