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 = ["Buenos dias", "Como estas", "Adios"]
for i in range(3):
primero = lista[i]
lista2 = lista.copy()
del(lista2[i])
print(primero, lista2[0], lista2[1])
print(primero, lista2[1], lista2[0])
Análisis
Cumple con el enunciado
El programa genera todas las permutaciones posibles de la lista ["Buenos dias", "Como estas", "Adios"] de 3 elementos, imprimiendo 6 combinaciones en total (2 por cada iteración del bucle). Esto coincide con el objetivo implícito del enunciado, que es mostrar todas las formas de ordenar los elementos de la lista.
Es fácil de leer y entender
El código es comprensible para un principiante, pero tiene detalles que pueden confundir:
-
lista2 = lista.copy()crea una copia, pero luego se modifica condel(lista2[i]). - La lógica para generar las permutaciones depende de que la lista tenga exactamente 3 elementos (por ejemplo,
lista2[0]ylista2[1]están hardcodeados). - El uso de
delpara modificar la lista podría reemplazarse por una técnica más clara, como usar índices relativos.
Sigue buenas prácticas de programación
- El código asume que la lista tiene 3 elementos. Si cambia el tamaño de la lista, el programa dejaría de funcionar correctamente (por ejemplo,
lista2[1]fallaría si la lista original tuviera menos de 2 elementos). - No se evita la repetición de código: las dos llamadas a
printdentro del bucle son muy similares. - Se podría mejorar la claridad usando bucles anidados para manejar los elementos restantes, en lugar de acceder directamente a índices específicos.
Recomendaciones de mejora
-
Evitar dependencias de tamaño fijo:
En lugar de usarprint(primero, lista2[0], lista2[1])yprint(primero, lista2[1], lista2[0]), itera sobre las combinaciones posibles con un bucle adicional. Por ejemplo, para cada elemento restante enlista2, podrías generar pares ordenados. -
Usar variables más descriptivas:
Cambiarlista2por un nombre comorestantesootros_mensajespara clarificar su propósito. -
Eliminar el uso de
del:
En lugar de eliminar elementos, podrías crear una nueva lista excluyendo el elemento actual con una comprensión:restantes = [mensaje for j, mensaje in enumerate(lista) if j != i] -
Evitar repetición de código:
Si el objetivo es permutar los elementos restantes, usa un bucleforanidado para recorrerlos en orden directo e inverso, en lugar de duplicar la líneaprint. -
No usar
itertools(como en este caso):
El programa no utilizaitertools, lo cual es correcto para esta práctica, ya que el enunciado probablemente busca una solución manual. Sin embargo, en un contexto real,itertools.permutationssería una herramienta adecuada y eficiente.