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:
def generar_permutaciones(lista):
if len(lista) == 0:
return [[]]
resultado = []
for i in range(len(lista)):
elemento = lista[i]
resto = lista[:i] + lista[i+1:]
for p in generar_permutaciones(resto):
resultado.append([elemento] + p)
return resultado
palabras = ['Hola', 'Qué tal', 'Adiós']
permutaciones = generar_permutaciones(palabras)
for p in permutaciones:
print(p)
Análisis
Cumple con el enunciado
itertools. Para la lista de ejemplo ['Hola', 'Qué tal', 'Adiós'], produce 6 permutaciones (3! = 6), que es el resultado esperado.
Es fácil de leer y entender
generar_permutaciones sigue una lógica recursiva correcta, pero carece de comentarios que expliquen el proceso paso a paso. Variables como elemento y resto son descriptivas, pero la recursión anidada puede resultar confusa para principiantes.
Sigue buenas prácticas de programación
lista sea una lista válida). Además, para listas grandes, la recursión podría causar un desbordamiento de pila (RecursionError), aunque esto no es crítico en el contexto de la práctica.
Recomendaciones de mejora
-
Agregar comentarios explicativos
Incluir comentarios en cada paso clave de la recursión ayudaría a entender cómo se construyen las permutaciones. Ejemplo:# Caso base: si la lista está vacía, devolver una lista con una permutación vacía if len(lista) == 0: return [[]] # ... # Para cada elemento, generar permutaciones con el resto de la lista -
Validar la entrada
Asegurarse de que la función maneje casos inesperados, como entradas no listas:if not isinstance(lista, list): return [] -
Evitar repetición innecesaria
La línearesto = lista[:i] + lista[i+1:]crea copias redundantes de la lista en cada iteración. Para listas grandes, esto afecta el rendimiento, pero en la práctica (con listas pequeñas) es aceptable. -
Uso de
itertools(solo como referencia)
Aunque el programa evitaitertoolscorrectamente (como se espera en la práctica), podrías mencionar como mejora futura que en un entorno real se podría usaritertools.permutationspara simplificar el código. Ejemplo:from itertools import permutations permutaciones = list(permutations(palabras)) -
Ejemplo de salida más claro
Si el enunciado requiere un formato específico para la salida (ej: mostrar permutaciones como tuplas o con índices), el programa actual no lo cumple. En su forma actual, imprime listas anidadas, lo cual es válido si el enunciado no especifica otro formato.