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:

#!/usr/bin/env python3

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 los elementos de la lista ['Hola', 'Qué tal', 'Adiós']. Para cada elemento elegido como "primero", combina los dos elementos restantes en ambos órdenes, lo que produce las 6 permutaciones esperadas (3 elementos × 2 combinaciones restantes).

Es fácil de leer y entender

⚠️ Parcialmente.

  • El uso de variables como first y lista2 ayuda a entender la lógica.
  • Sin embargo, la modificación de lista2 con del(lista2[i]) puede confundir a principiantes, ya que altera la lista original en lugar de seleccionar elementos directamente.
  • Los índices [0] y [1] en print asumen que lista2 siempre tendrá dos elementos, lo que es válido aquí pero no es explícito.

Sigue buenas prácticas de programación

No.

  • El código está diseñado específicamente para listas de 3 elementos. Si la lista cambia de tamaño, el programa fallará (por ejemplo, al acceder a lista2[1] si solo queda un elemento).
  • Se modifica la lista lista2 en lugar de generar una nueva sin el elemento seleccionado (por ejemplo, usando lista[:i] + lista[i+1:]).
  • No se generaliza la lógica para permutaciones de cualquier longitud, lo que limita su reutilización.

Recomendaciones de mejora

  1. Evitar modificar listas en lugar de copiarlas:
    En lugar de usar del(lista2[i]), podrías crear una nueva lista sin el elemento actual con slicing:

    lista2 = lista[:i] + lista[i+1:]

    Esto evita alterar lista2 y hace la operación más clara.

  2. Usar variables más descriptivas:
    Cambiar lista2 por un nombre como restantes mejora la comprensión:

    restantes = lista.copy()
    del(restantes[i])
  3. Evitar asumir la longitud de la lista:
    Si la lista tuviera más elementos, el código no funcionaría. Para permutaciones de 3 elementos, podrías usar bucles anidados para elegir los elementos restantes dinámicamente.

  4. Agregar comentarios:
    Explica cada paso para facilitar la lectura, especialmente para quienes están aprendiendo:

    # Para cada elemento en la lista, usarlo como primer elemento de la permutación
    for i in range(len(lista)):
        first = lista[i]
        # Crear una copia sin el elemento actual
        restantes = lista.copy()
        del(restantes[i])
        # Generar las dos permutaciones posibles con los elementos restantes
        print(first, restantes[0], restantes[1])
        print(first, restantes[1], restantes[0])
  5. No usar itertools (como se pide en la práctica):
    El programa no recurre a bibliotecas externas, lo cual es correcto para esta tarea, ya que el objetivo es implementar la lógica manualmente.

  6. Preparar para escalabilidad (opcional):
    Si bien el enunciado no lo exige, podrías explorar cómo adaptar el código para listas de cualquier longitud (por ejemplo, usando recursión o bucles anidados).