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', 'Que tal', 'Adios']
print('Lista: ', Lista)
print('Permutaciones: ')
for i in range(len(Lista)):
for j in range(len(Lista)):
for k in range(len(Lista)):
if len({i, j, k}) == 3:
print(Lista[i], Lista[j], Lista[k])
Análisis
Cumple con el enunciado
Sí. El programa genera todas las permutaciones posibles de los elementos de la lista ['Hola', 'Que tal', 'Adios'] sin repetir elementos. Al usar tres bucles anidados y verificar que los índices i, j, k sean distintos (con len({i, j, k}) == 3), asegura que cada combinación incluya los tres elementos en orden diferente. Esto produce las 6 permutaciones esperadas para una lista de 3 elementos.
Es fácil de leer y entender
No. El uso de tres bucles anidados y una condición basada en la longitud de un conjunto puede ser confuso para un principiante. Además, el nombre de la variable Lista con letra mayúscula no sigue las convenciones de estilo de Python (PEP8), lo que reduce la claridad. La lógica para evitar repetir índices no es intuitiva y podría explicarse mejor.
Sigue buenas prácticas de programación
No. El código está diseñado específicamente para listas de 3 elementos (por los tres bucles), lo que lo hace inflexible. Si la lista tuviera más o menos elementos, el programa no funcionaría. Además, no se encapsula la lógica en funciones, lo que limita su reutilización. El uso de itertools.permutations (no presente aquí) sería una solución más eficiente y legible en un contexto real.
Recomendaciones de mejora
-
Usar nombres de variables en minúsculas:
CambiarListaalistapara seguir las convenciones de estilo de Python. -
Evitar bucles anidados innecesarios:
La solución actual depende de tres bucles, lo que la limita a listas de exactamente 3 elementos. Para listas más grandes, esto no es escalable. Se podría replantear con recursión o backtracking para manejar cualquier tamaño. -
Simplificar la condición de índices únicos:
En lugar delen({i, j, k}) == 3, se podrían comparar directamente los índices (if i != j and j != k and i != k), aunque esto no resuelve el problema de escalabilidad. -
Considerar
itertools.permutations(solo para contextos reales):
En un programa real, se recomendaría usaritertools.permutationspara evitar reinventar la lógica. Sin embargo, si la práctica exige implementar permutaciones manualmente, esta opción no es válida.