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
['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
- El uso de variables como
firstylista2ayuda a entender la lógica. - Sin embargo, la modificación de
lista2condel(lista2[i])puede confundir a principiantes, ya que altera la lista original en lugar de seleccionar elementos directamente. - Los índices
[0]y[1]enprintasumen quelista2siempre tendrá dos elementos, lo que es válido aquí pero no es explícito.
Sigue buenas prácticas de programación
- 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
lista2en lugar de generar una nueva sin el elemento seleccionado (por ejemplo, usandolista[:i] + lista[i+1:]). - No se generaliza la lógica para permutaciones de cualquier longitud, lo que limita su reutilización.
Recomendaciones de mejora
-
Evitar modificar listas en lugar de copiarlas:
En lugar de usardel(lista2[i]), podrías crear una nueva lista sin el elemento actual con slicing:lista2 = lista[:i] + lista[i+1:]Esto evita alterar
lista2y hace la operación más clara. -
Usar variables más descriptivas:
Cambiarlista2por un nombre comorestantesmejora la comprensión:restantes = lista.copy() del(restantes[i]) -
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. -
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]) -
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. -
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).