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']

for i in range(len(lista)):
    first = lista[i]
    lista2 = lista.copy()
    del(lista2[i])
    print(first, lista2[0], lista2[1])
    print(first, lista2[1], lista2[0])

Análisis

Cumple con el enunciado

.
El programa genera todas las permutaciones posibles de la lista ['Hola', 'Qué tal', 'Adiós']. Para una lista de 3 elementos, hay 6 permutaciones, y el código las imprime correctamente al combinar cada elemento como "primero" con las dos posibles combinaciones de los elementos restantes. Esto coincide con el objetivo descrito en el enunciado.


Es fácil de leer y entender

.
El código es sencillo y sigue una lógica clara:

  1. Itera sobre cada elemento de la lista original.
  2. Crea una copia de la lista sin el elemento actual.
  3. Imprime dos combinaciones posibles de los elementos restantes.
    Las variables (first, lista2) tienen nombres descriptivos, y la estructura del bucle es directa. Sin embargo, falta un comentario que explique el propósito del programa o de los pasos clave.

Sigue buenas prácticas de programación

No del todo.

  • Limitación de escalabilidad: El código está diseñado específicamente para listas de 3 elementos. Si la lista tuviera más o menos elementos, no funcionaría correctamente (por ejemplo, lista2[1] o lista2[0] causarían errores).
  • Uso de del: Aunque válido, eliminar elementos por índice puede llevar a confusiones. Una alternativa más explícita sería usar comprensiones de listas para filtrar el elemento actual.
  • Redundancia: La lógica para imprimir las permutaciones se repite manualmente (print(first, lista2[0], lista2[1]) y print(first, lista2[1], lista2[0])), lo que no es eficiente para listas más grandes.

Recomendaciones de mejora

  1. Evitar índices fijos:
    En lugar de acceder a lista2[0] y lista2[1] directamente, usa bucles anidados para generar todas las combinaciones posibles de los elementos restantes. Esto permitiría que el programa funcione para listas de cualquier tamaño.

  2. Generalizar el código:
    Modifica la lógica para que funcione con listas de n elementos, no solo 3. Por ejemplo, usando recursividad o bucles anidados dinámicos (aunque esto último es más avanzado).

  3. Evitar del:
    En vez de eliminar elementos con del(lista2[i]), crea una nueva lista excluyendo el elemento actual mediante comprensiones:

    lista2 = [x for j, x in enumerate(lista) if j != i]
  4. No usar itertools:
    El enunciado parece exigir una solución manual, por lo que no es necesario usar itertools.permutations. De hecho, usarlo iría en contra del objetivo de la práctica.

  5. Agregar comentarios:
    Incluye comentarios breves para explicar el propósito de cada paso, especialmente para alumnos principiantes. Ejemplo:

    # Para cada elemento en la lista, usamos como primer elemento
    first = lista[i]
    # Creamos una copia de la lista sin el elemento actual
    lista2 = lista.copy()
    del(lista2[i])
  6. Validar entradas:
    Aunque no es crítico para este caso, en programas reales se debería verificar que la lista no esté vacía o tenga elementos suficientes para generar permutaciones.