Skip to content

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 for anidados (uno para el segundo elemento y otro para el tercero), eliminando la necesidad de escribir 6 líneas de print idénticas con órdenes distintos.
  • Claridad en variables: Usa nombres como resto en lugar de lista2 para indicar que contiene los elementos no seleccionados.
    Nota: Para esta práctica, evita itertools como se requiere, pero en un programa real sería la solución óptima.