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

Sí cumple.
El programa genera todas las permutaciones posibles de los 3 elementos en la lista ['Hola', 'Qué tal', 'Adiós']. Para cada elemento, elimina ese elemento de una copia de la lista y luego imprime dos combinaciones: el elemento eliminado seguido de los dos restantes en orden original y en orden invertido. Esto produce las 6 permutaciones válidas (3 elementos × 2 combinaciones restantes).

Es fácil de leer y entender

⚠️ Parcialmente.
El código es funcional pero podría mejorar en claridad. Las variables first, lista2 y el uso de índices fijos (lista2[0], lista2[1]) no explican claramente la lógica. Además, al no usar comentarios, un principiante podría tener dificultades para entender cómo se generan las permutaciones. Un nombre como elemento_actual o restantes ayudaría más.

Sigue buenas prácticas de programación

No del todo.
El código está diseñado específicamente para listas de 3 elementos. Si la lista tuviera más o menos elementos, los accesos a lista2[0] y lista2[1] causarían errores. Esto hace que el programa no sea reutilizable ni robusto. Además, el uso de del(lista2[i]) modifica la lista directamente, lo cual es válido aquí pero podría evitarse con técnicas más seguras (como selección explícita de elementos).

Recomendaciones de mejora

  1. Evitar suposiciones sobre la longitud de la lista:
    El código asume que lista2 siempre tendrá 2 elementos después de eliminar uno. Si la lista original tuviera más de 3 elementos, esto fallaría. Para listas de longitud variable, se debería usar un bucle para imprimir los elementos restantes en lugar de acceder a ellos por índices fijos.

  2. Usar nombres de variables más descriptivos:
    Cambiar first por elemento_actual y lista2 por restantes haría más claro el propósito de cada variable.

  3. Agregar comentarios explicativos:
    Añadir comentarios breves para describir cada paso (ej: "Eliminar el elemento actual", "Imprimir permutaciones con el elemento actual al inicio") ayudaría a entender la lógica.

  4. No usar itertools (correcto para esta práctica):
    El programa no usa itertools, lo cual es adecuado para cumplir con el enunciado, ya que la práctica probablemente busca una solución manual. Sin embargo, en un programa real, se recomendaría itertools.permutations para evitar código repetido y hacerlo más genérico.

  5. Evitar accesos manuales a índices:
    Si la lista tuviera más elementos, sería necesario usar bucles anidados o recursión para generar permutaciones. Aquí, al usar índices fijos (lista2[0], lista2[1]), el código no es escalable.