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', 'Qué tal', 'Adiós']
print('Lista:', lista)
print('Permutaciones:')
for i in range(len(lista)):          # elijo el PRIMERO
    for j in range(len(lista)):      # elijo el SEGUNDO
        for k in range(len(lista)):  # elijo el TERCERO
            if i != j and i != k and j != k:  # aseguro que no se repita
                print(lista[i], lista[j], lista[k])

Análisis

Cumple con el enunciado

. El programa genera todas las permutaciones posibles de los elementos de la lista ['Hola', 'Qué tal', 'Adiós'] sin repetir elementos. Al usar tres bucles anidados y verificar que los índices i, j y k sean distintos, asegura que cada combinación sea única y que todos los elementos estén ordenados de todas las formas posibles. El resultado coincide con el ejemplo esperado.

Es fácil de leer y entender

. El código está estructurado con comentarios claros que explican el propósito de cada bucle (# elijo el PRIMERO, etc.) y la condición if i != j and i != k and j != k es directa. Los nombres de las variables (i, j, k) son convencionales para índices en bucles, y el uso de sangrías ayuda a visualizar la jerarquía de los bucles anidados.

Sigue buenas prácticas de programación

⚠️ Parcialmente. El enfoque funciona para listas de 3 elementos, pero no es escalable ni eficiente para listas más largas. Por ejemplo, si la lista tuviera 4 elementos, se necesitarían 4 bucles anidados y condiciones más complejas. Además, el código repite la verificación de índices distintos mediante una condición explícita, lo que podría simplificarse con técnicas como recursión o itertools.permutations en un contexto real.


Recomendaciones de mejora

  1. Evitar bucles anidados innecesarios
    El uso de múltiples bucles for y la condición if para evitar repeticiones es válido en este caso, pero no es una práctica recomendada para listas más largas. En un programa real, se podría usar itertools.permutations para simplificar el código.
    Ejemplo:

    import itertools
    lista = ['Hola', 'Qué tal', 'Adiós']
    print('Permutaciones:')
    for perm in itertools.permutations(lista):
        print(' '.join(perm))
  2. Generalizar para listas de cualquier tamaño
    Si el enunciado permitiera listas de longitud variable, se debería evitar codificar bucles anidados manualmente. En su lugar, se podrían usar funciones recursivas o técnicas como backtracking, aunque esto excede el nivel actual del alumno.

  3. Optimizar la condición de verificación
    La condición if i != j and i != k and j != k es correcta, pero para listas más grandes se volvería impráctica. En este caso, es aceptable, pero se podría mencionar que en problemas complejos se usan métodos más eficientes.

  4. Formato de salida consistente
    Aunque el formato actual (print(lista[i], lista[j], lista[k])) es válido, si el enunciado requiere que cada permutación se muestre como una cadena única (ej. 'Hola Qué tal Adiós'), se debería usar ' '.join(...) para evitar espacios adicionales al inicio o final.