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 = ['Cero', 'Uno', 'Dos', 'Tres']
for x in range(len(lista)):
first = lista[x]
listacopia = lista.copy()
del(listacopia[x])
print(first, listacopia[0], listacopia[1],listacopia[2])
print(first, listacopia[0], listacopia[2],listacopia[1])
print(first, listacopia[1], listacopia[0],listacopia[2])
print(first, listacopia[1], listacopia[2],listacopia[0])
print(first, listacopia[2], listacopia[0],listacopia[1])
print(first, listacopia[2], listacopia[1],listacopia[0])
Análisis
Cumple con el enunciado
Sí. El programa genera las 24 permutaciones esperadas para la lista de 4 elementos. Al fijar cada elemento como primero y combinar manualmente las 6 permutaciones de los 3 elementos restantes (usando índices fijos), cumple con el objetivo de mostrar todas las ordenaciones posibles.
Es fácil de leer y entender
No. El código repite 6 veces la estructura print con combinaciones manuales de índices ([0], [1], [2]), lo que dificulta identificar el patrón lógico. Un lector debe analizar cada línea para descifrar cómo se generan las permutaciones, aumentando la complejidad innecesariamente.
Sigue buenas prácticas de programación
No. Aunque se usa lista.copy() para evitar efectos secundarios (buena práctica), hardcodear las 6 permutaciones viola el principio DRY (Don't Repeat Yourself). Además, el código sólo funciona para listas de 4 elementos: si la lista tuviera más o menos elementos, fallaría al acceder a índices inexistentes (ej.: listacopia[3]).
Recomendaciones de mejora
-
Evita hardcodear combinaciones: En lugar de escribir manualmente las 6 permutaciones para los elementos restantes, usa bucles anidados. Por ejemplo, después de seleccionar
first, itera sobre los índices delistacopiapara generar las combinaciones dinámicamente. -
Hazlo adaptable: El código actual asume que siempre habrá 3 elementos en
listacopia. Usalen(listacopia)en los bucles para que funcione con listas de cualquier tamaño (aunque el enunciado use 4 elementos, es buena práctica preparar el código para cambios futuros). -
Comentarios claros: Añade comentarios que expliquen el propósito de cada sección, como
# Generar permutaciones de los elementos restantes. -
Nota sobre
itertools: En un programa real, usaríasitertools.permutations, pero para esta práctica debes implementarlo manualmente con bucles, como intentas hacer aquí. Sin embargo, estructura el código para que sea más claro y reutilizable.