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'] al combinar cada elemento como primero y luego permutar los dos restantes. Para una lista de 3 elementos, produce las 6 combinaciones esperadas (3 elementos × 2 permutaciones de los restantes). Sin embargo, no es generalizable a listas de longitud diferente, ya que depende de índices fijos (lista2[0], lista2[1]).

Es fácil de leer y entender

⚠️ Parcialmente. El código es sencillo, pero el uso de nombres como lista2 y la modificación directa de listas con del pueden confundir a principiantes. La lógica para generar permutaciones está explícita, pero carece de comentarios o nombres descriptivos que expliquen su propósito.

Sigue buenas prácticas de programación

No.

  • Dependencia de longitud fija: El código asume que la lista tiene exactamente 3 elementos. Si cambia la longitud, fallará.
  • Uso innecesario de del: Se podría evitar usando técnicas como slicing o comprensiones para crear sublistas.
  • Duplicación de lógica: Los print repiten código para permutar los dos últimos elementos manualmente.

Recomendaciones de mejora

  1. Evitar suposiciones sobre la longitud de la lista:
    Si el enunciado permite listas de cualquier tamaño, el código debería adaptarse. Por ejemplo, usar bucles anidados para permutar los elementos restantes en lugar de acceder a índices fijos.

  2. Usar nombres más descriptivos:
    Renombrar variables como lista2 a resto o elementos_restantes para clarificar su propósito.

  3. Evitar del y preferir técnicas inmutables:
    En lugar de modificar la lista con del, crear una nueva lista excluyendo el elemento actual usando slicing:

    elementos_restantes = lista[:i] + lista[i+1:]
  4. Reducir duplicación con bucles:
    Si la lista tuviera más elementos, los print repetidos no serían viables. Para mejorar, se podrían usar bucles anidados para generar permutaciones de los elementos restantes.

  5. Añadir comentarios:
    Explicar la lógica paso a paso, especialmente para alumnos principiantes. Ejemplo:

    # Para cada elemento, se usa como "primero" y se permutan los restantes
  6. No usar itertools (como se pide):
    El programa no recurre a bibliotecas externas, lo cual es coherente con el enunciado. Para listas más grandes, se recomendaría itertools.permutations, pero en esta práctica se debe evitar.