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', 'Hasta Luego', 'Adios']
print("Permutaciones")
for i in range(len(lista)):
first = lista[i]
lista3 = lista.copy()
del(lista3[i])
print(first, lista3[0], lista3[1], lista3[2])
print(first, lista3[1], lista3[0], lista3[2])
Análisis
Cumple con el enunciado
El programa genera permutaciones parciales de una lista de 4 elementos, pero sólo produce 8 combinaciones (2 por cada elemento inicial), cuando debería generar todas las permutaciones posibles (4! = 24). Por ejemplo, faltan combinaciones como 'Hola', 'Adios', 'Qué tal', 'Hasta Luego'.
Es fácil de leer y entender
- Usa variables con nombres poco descriptivos (
lista3en lugar deresto_listao similar). - No hay comentarios que expliquen la lógica.
- El uso de
del(lista3[i])y acceso manual a índices (lista3[0], lista3[1], lista3[2]) dificulta entender cómo se generan las permutaciones.
Sigue buenas prácticas de programación
- No usa bucles anidados para generar todas las combinaciones posibles.
- No es escalable: si la lista tuviera más elementos, el código fallaría al acceder a índices fijos.
- No evita redundancias: repite código para cada permutación manual.
Recomendaciones de mejora
-
Generar todas las permutaciones:
Usa bucles anidados para combinar todos los elementos sin repetición. Por ejemplo:for i in range(len(lista)): for j in range(len(lista)): if i != j: for k in range(len(lista)): if k != i and k != j: for l in range(len(lista)): if l != i and l != j and l != k: print(lista[i], lista[j], lista[k], lista[l]) -
Evitar índices fijos:
En lugar delista3[0], lista3[1], lista3[2], usa bucles para recorrer las combinaciones restantes. -
Mejorar nombres de variables:
Cambiarlista3porresto_listaoelementos_restantespara claridad. -
No usar
del:
En vez de modificar la lista original, usa comprensiones para filtrar elementos:resto_lista = [x for idx, x in enumerate(lista) if idx != i] -
Validar tamaño de la lista:
El código asume que la lista siempre tiene 4 elementos. Si cambia el tamaño, el programa debe adaptarse automáticamente.
Nota: El enunciado indica que la práctica debe hacerse sin usar itertools, por lo que no se debe recurrir a esa biblioteca.