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']. Para una lista de 3 elementos, hay 6 permutaciones, y el código las imprime correctamente al combinar cada elemento como "primero" con las dos posibles combinaciones de los elementos restantes. Esto coincide con el objetivo descrito en el enunciado.
Es fácil de leer y entender
El código es sencillo y sigue una lógica clara:
- Itera sobre cada elemento de la lista original.
- Crea una copia de la lista sin el elemento actual.
- Imprime dos combinaciones posibles de los elementos restantes.
Las variables (first,lista2) tienen nombres descriptivos, y la estructura del bucle es directa. Sin embargo, falta un comentario que explique el propósito del programa o de los pasos clave.
Sigue buenas prácticas de programación
-
Limitación de escalabilidad: El código está diseñado específicamente para listas de 3 elementos. Si la lista tuviera más o menos elementos, no funcionaría correctamente (por ejemplo,
lista2[1]olista2[0]causarían errores). -
Uso de
del: Aunque válido, eliminar elementos por índice puede llevar a confusiones. Una alternativa más explícita sería usar comprensiones de listas para filtrar el elemento actual. -
Redundancia: La lógica para imprimir las permutaciones se repite manualmente (
print(first, lista2[0], lista2[1])yprint(first, lista2[1], lista2[0])), lo que no es eficiente para listas más grandes.
Recomendaciones de mejora
-
Evitar índices fijos:
En lugar de acceder alista2[0]ylista2[1]directamente, usa bucles anidados para generar todas las combinaciones posibles de los elementos restantes. Esto permitiría que el programa funcione para listas de cualquier tamaño. -
Generalizar el código:
Modifica la lógica para que funcione con listas de n elementos, no solo 3. Por ejemplo, usando recursividad o bucles anidados dinámicos (aunque esto último es más avanzado). -
Evitar
del:
En vez de eliminar elementos condel(lista2[i]), crea una nueva lista excluyendo el elemento actual mediante comprensiones:lista2 = [x for j, x in enumerate(lista) if j != i] -
No usar
itertools:
El enunciado parece exigir una solución manual, por lo que no es necesario usaritertools.permutations. De hecho, usarlo iría en contra del objetivo de la práctica. -
Agregar comentarios:
Incluye comentarios breves para explicar el propósito de cada paso, especialmente para alumnos principiantes. Ejemplo:# Para cada elemento en la lista, usamos como primer elemento first = lista[i] # Creamos una copia de la lista sin el elemento actual lista2 = lista.copy() del(lista2[i]) -
Validar entradas:
Aunque no es crítico para este caso, en programas reales se debería verificar que la lista no esté vacía o tenga elementos suficientes para generar permutaciones.