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
['Hola', 'Qué tal', 'Adiós']. Para cada elemento de la lista, crea una copia sin ese elemento y combina el elemento eliminado con los dos restantes en ambos órdenes posibles. Esto produce las 6 permutaciones esperadas (3 elementos × 2 combinaciones restantes = 6).
Es fácil de leer y entender
- Itera sobre cada índice de la lista original.
- Elimina el elemento actual para crear una lista reducida.
- Imprime combinaciones del elemento eliminado con los restantes.
Los nombres de variables (first,lista2) son descriptivos, y la lógica es accesible para principiantes.
Sigue buenas prácticas de programación
-
Dependencia de la longitud fija de la lista: El código asume que
lista2siempre tendrá 2 elementos después de eliminar uno, lo que solo funciona para listas de 3 elementos. Si la lista tuviera más o menos elementos, el programa fallaría al acceder alista2[1]. -
Redundancia en las combinaciones: La generación de permutaciones se hace manualmente con dos
print, lo que no escala para listas más grandes. -
Uso innecesario de
del: Se podría evitar modificando la lista con comprensiones o[:]en lugar de eliminar elementos.
Recomendaciones de mejora
-
Evitar dependencias de índices fijos:
En lugar de acceder alista2[0]ylista2[1]directamente, usa un bucle para iterar sobre los elementos restantes. Por ejemplo:for i in range(len(lista)): first = lista[i] lista2 = lista[:i] + lista[i+1:] for j in range(len(lista2)): print(first, lista2[j], lista2[1-j])Esto elimina la suposición de que
lista2tiene exactamente 2 elementos. -
Simplificar la creación de
lista2:
Reemplazalista.copy()ydel(lista2[i])con slicing:lista2 = lista[:i] + lista[i+1:]Es más conciso y evita métodos menos intuitivos para principiantes (
del). -
Reflexión sobre escalabilidad:
Aunque el enunciado no lo requiere, explica que este enfoque manual no es viable para listas más grandes. En un programa real, se usaría recursividad oitertools.permutations(pero no en esta práctica, ya que el enunciado lo prohíbe explícitamente). -
Eliminar duplicados en
print:
La lógica para imprimir las dos combinaciones restantes (lista2[0], lista2[1]ylista2[1], lista2[0]) podría encapsularse en un bucle o función auxiliar, aunque para este caso específico no es necesario.