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 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
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
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
-
Evitar suposiciones sobre la longitud de la lista:
El código asume quelista2siempre 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. -
Usar nombres de variables más descriptivos:
Cambiarfirstporelemento_actualylista2porrestantesharía más claro el propósito de cada variable. -
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. -
No usar
itertools(correcto para esta práctica):
El programa no usaitertools, 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íaitertools.permutationspara evitar código repetido y hacerlo más genérico. -
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.