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:
#!/usr/bin/env python3
lista = ["Hola","¿Que tal?","Adios"]
print("Lista: ", lista)
print("Permutaciones:")
for i in range(len(lista)):
first = lista[i]
lista2 = lista.copy()
del(lista2[i])
print(first,lista2[0],lista2[1])
print(first,lista2[1],lista2[0])
Análisis
Cumple con el enunciado
El programa genera todas las permutaciones posibles de los 3 elementos de la lista, mostrando 6 combinaciones (3 elementos × 2 posibles ordenaciones para los restantes). El resultado coincide con lo esperado para una lista de 3 elementos.
Es fácil de leer y entender
Aunque el código sigue una lógica clara (tomar cada elemento como "primero" y permutar los restantes), el uso de del(lista2[i]) y la manipulación directa de índices (lista2[0], lista2[1]) puede confundir a principiantes. Además, asume que la lista siempre tendrá 3 elementos, lo que limita su comprensión general.
Sigue buenas prácticas de programación
- Modifica la lista original (
lista) al usardel, lo que podría causar errores si se reutiliza. - No es escalable: si la lista tuviera más de 3 elementos, el código no funcionaría (usa índices fijos).
- Repite código en los
printpara permutar los dos últimos elementos, en lugar de usar un bucle anidado.
Recomendaciones de mejora
-
Evitar modificar listas originales
Usalista2 = lista[:i] + lista[i+1:]en lugar dedel(lista2[i])para no alterar la lista original. -
Usar bucles anidados
Reemplaza la repetición manual de permutaciones (print(first,lista2[0],lista2[1])yprint(first,lista2[1],lista2[0])) con un segundo bucle que itere sobre las posibles combinaciones restantes. -
Agregar comentarios
Explica cada paso del código (ej: "Tomar el primer elemento", "Crear una lista sin el primer elemento", etc.) para facilitar su comprensión. -
No usar
itertools
Aunqueitertools.permutationsresolvería el problema de forma más eficiente, la práctica busca que se implemente la lógica manualmente. Mantén el enfoque actual. -
Hacerlo más flexible
Si bien no es obligatorio, considera cómo adaptar el código para listas de cualquier longitud (ej: usando recursión o bucles dinámicos), aunque esto excede el nivel de dificultad actual.