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 en parte 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.
- Comprobación de archivos con extension '.py'
- Comprobación con ficheros de solución
- Revisión automática de programa
- Análisis
- Recomendaciones de mejora
Comprobación de archivos con extension '.py'
Archivos encontrados, que no son : permutaciones.py
Correcto, se elige permutaciones.py para el análisis
Comprobación con ficheros de solución
Los archivos son diferentes de los de la solución.
Revisión automática de programa
Programa revisado:
lista = ["1","2","3","4"]
print("Aquí tienes todas las combinaciones posibles de 4 cifras con los números 1, 2 3 y 4 ")
for i in range(len(lista)):
first = lista [i]
lista2 = lista.copy()
del(lista2[i])
print(first, lista2[0], lista2[1], lista2[2])
print(first, lista2[0], lista2[2], lista2[1])
print(first, lista2[1], lista2[0], lista2[2])
print(first, lista2[1], lista2[2], lista2[0])
print(first, lista2[2], lista2[0], lista2[1])
print(first, lista2[2], lista2[1], lista2[0])
Análisis
Cumple con el enunciado
El programa no cumple completamente con el enunciado. Aunque genera todas las permutaciones de una lista de 4 elementos, el código está diseñado específicamente para listas de 4 elementos y no funciona para listas con un número arbitrario de strings. Además, el enunciado original pedía una lista como ['Hola', 'Qué tal', 'Adiós'], pero el alumno modificó la lista a ["1","2","3","4"] y el mensaje inicial menciona "combinaciones posibles de 4 cifras", lo cual no corresponde al ejemplo proporcionado en el enunciado.
Es fácil de leer y entender
El código es parcialmente fácil de leer, pero tiene problemas de claridad:
- Usa variables con nombres descriptivos (
lista,first,lista2), lo cual es positivo. - Sin embargo, genera permutaciones manualmente mediante una secuencia de
printpara cada combinación restante, lo que dificulta entender la lógica general. Por ejemplo, las líneasprint(first, lista2[0], lista2[1], lista2[2])y similares son repetitivas y no explican cómo se obtienen las permutaciones.
Sigue buenas prácticas de programación
El programa no sigue buenas prácticas:
-
Repetición de código: Genera permutaciones de los elementos restantes mediante 6 llamadas manuales a
printpor cada elemento de la lista, lo que no es escalable ni mantenible. -
Dependencia de tamaño fijo: El código asume que
lista2siempre tendrá 3 elementos, lo que fallaría si la lista original tuviera más de 4 elementos. -
Modificaciones innecesarias: Usa
del(lista2[i])para eliminar elementos, pero esto altera la lista original. Sería mejor usar técnicas como slicing ocopy()para evitar efectos secundarios.
Recomendaciones de mejora
-
Usar bucles anidados para permutaciones: En lugar de hardcodear las permutaciones restantes, implementa bucles anidados para seleccionar los elementos restantes dinámicamente. Por ejemplo:
for i in range(len(lista)): first = lista[i] restante = lista[:i] + lista[i+1:] for j in range(len(restante)): second = restante[j] restante2 = restante[:j] + restante[j+1:] # Repetir para los elementos restantes -
Hacerlo generalizable: El enunciado opcional pedía soportar listas con "cuatro o más strings". El código actual no cumple con esto. Para listas de tamaño arbitrario, se debería usar recursividad o un algoritmo de permutación genérico (sin
itertools). -
Evitar efectos secundarios: En lugar de modificar
lista2condel, crea una nueva lista sin el elemento seleccionado usando slicing:restante = lista[:i] + lista[i+1:] -
Ajustar el mensaje inicial: El mensaje
"Aquí tienes todas las combinaciones posibles de 4 cifras..."es incorrecto, ya que el programa genera permutaciones, no combinaciones, y no está relacionado con el ejemplo del enunciado. Debería corregirse para reflejar el propósito real:print('Lista:', lista) print('Permutaciones:') -
Agregar comentarios explicativos: Incluye comentarios que expliquen cómo se construyen las permutaciones paso a paso, especialmente para alumnos principiantes.
-
No usar
itertools(como se pide): El enunciado indica que la práctica debe hacerse sinitertools, y el código actual no lo usa, por lo que esto está bien. Sin embargo, en un contexto real, se recomendaría su uso para simplificar el código.