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' , 'bien' , 'hasta luego']
for i in range(len(lista)):
first = lista[i]
lista2 = lista.copy()
del(lista2[i])
print(first, lista2[0], lista2[1], lista2[2])
print(first, lista2[0], lista2[2], lista2[1])
print(first, lista2[1], lista2[0], lista2[2])
print(first, lista2[1], lista2[2], lista2[0])
print(first, lista2[2], lista2[0], lista2[1])
print(first, lista2[2], lista2[1], lista2[0])
Análisis
Cumple con el enunciado
Sí cumple. El programa genera todas las permutaciones posibles de la lista dada (['hola', 'que tal', 'bien', 'hasta luego']). Para cada elemento como primer término, imprime las 6 combinaciones de los 3 elementos restantes, obteniendo 24 resultados totales (4 elementos × 6 permutaciones), que corresponde a 4! (factorial de 4). Los ejemplos de ejecución coinciden con lo esperado para este caso específico.
Es fácil de leer y entender
Parcialmente. Aunque la lógica es comprensible para listas de tamaño fijo (4 elementos), el código repite manualmente las 6 permutaciones de los elementos restantes usando índices fijos (lista2[0], lista2[1], etc.). Esto genera redundancia y dificulta identificar el patrón general. Si la lista tuviera más elementos, el código sería confuso y propenso a errores por la repetición explícita de combinaciones.
Sigue buenas prácticas de programación
No. El programa usa índices fijos y repite código innecesariamente, lo que viola el principio DRY (Don't Repeat Yourself). Además, asume que la lista siempre tendrá 4 elementos, lo que lo hace inflexible. Aunque usa lista.copy() para evitar modificar la lista original (buena práctica), la lógica para generar permutaciones no escala y no aprovecha estructuras iterativas básicas como bucles anidados.
Recomendaciones de mejora
-
Evita índices fijos: En lugar de acceder manualmente a
lista2[0],lista2[1], etc., usa bucles anidados para recorrer los elementos restantes. Por ejemplo, después de elegir el primer elemento, itera sobre los restantes para el segundo, tercero y cuarto puesto. -
Reduce la repetición: Las 6 permutaciones de los 3 elementos podrían generarse con dos bucles
foranidados (uno para el segundo elemento y otro para el tercero), eliminando la necesidad de escribir 6 líneas deprintidénticas con órdenes distintos. -
Claridad en variables: Usa nombres como
restoen lugar delista2para indicar que contiene los elementos no seleccionados.
Nota: Para esta práctica, evitaitertoolscomo se requiere, pero en un programa real sería la solución óptima.