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 = ['uno', 'dos', 'tres']

for i in range(3):
    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 ['uno', 'dos', 'tres'] sin repetir elementos. Para cada elemento de la lista original, crea una sublista sin ese elemento e imprime las dos combinaciones posibles con los elementos restantes. Esto produce las 6 permutaciones válidas (3! = 6).

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 usando los elementos restantes.
    Los nombres de variables (lista, lista2, first) son descriptivos y el uso de del para eliminar elementos es intuitivo para principiantes.

Sigue buenas prácticas de programación

⚠️ Parcialmente.

  • Ventajas:
    • Uso correcto de .copy() para evitar modificar la lista original accidentalmente.
    • Lógica directa para el caso específico de 3 elementos.
  • Desventajas:
    • El código está hardcodeado para listas de 3 elementos. Si la lista tuviera más elementos, no funcionaría (por ejemplo, no maneja permutaciones de 4 o más elementos).
    • Repite la impresión de permutaciones manualmente (print(first, lista2[0], lista2[1]) y print(first, lista2[1], lista2[0])), lo que no es escalable.
    • No usa bucles anidados, que serían más adecuados para generar permutaciones de forma general.

Recomendaciones de mejora

  1. Evitar hardcodear índices:
    En lugar de usar lista2[0] y lista2[1], se podría iterar sobre los elementos restantes con un bucle anidado para generar todas las combinaciones posibles. Esto haría el código más flexible para listas de cualquier tamaño.

  2. Usar nombres en español:
    Aunque el código es correcto, para alinearse con el contexto del alumno, se recomienda usar nombres como elemento_actual en lugar de first y sublista en lugar de lista2.

  3. No usar del:
    Aunque válido, eliminar elementos por índice puede ser menos intuitivo que usar una comprensión para crear la sublista directamente, por ejemplo:

    sublista = [x for j, x in enumerate(lista) if j != i]
  4. Evitar repetición manual de permutaciones:
    En lugar de imprimir dos veces por iteración, se podrían usar bucles anidados para generar todas las combinaciones posibles de los elementos restantes.

  5. No usar itertools:
    Esta práctica está diseñada para resolver permutaciones manualmente, por lo que el enfoque del alumno es adecuado. No se requiere usar bibliotecas externas.