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 permutaciones(lista):
if len(lista) <= 1:
return [lista]
resultado = []
for i in range(len(lista)):
elemento_actual = lista[i]
elementos_restantes = lista[:i] + lista[i + 1:]
for perm in permutaciones(elementos_restantes):
resultado.append([elemento_actual] + perm)
return resultado
lista = ['Hola', 'Qué tal', 'Adiós']
print('Lista:', lista)
print('Permutaciones:')
perms = permutaciones(lista)
for perm in perms:
print(' '.join(perm))
print("Terminado")
Análisis
Cumple con el enunciado
El programa implementa una función recursiva para generar todas las permutaciones de una lista sin usar itertools. Al probarlo con ['Hola', 'Qué tal', 'Adiós'], debería imprimir las 6 permutaciones posibles, seguidas de la palabra "Terminado" en cada iteración (esto último podría ser confuso, pero no afecta la funcionalidad principal).
Es fácil de leer y entender
La estructura lógica es clara: divide la lista en elementos actuales y restantes, genera permutaciones recursivamente y las combina. Sin embargo, el mensaje "Terminado" dentro del bucle de impresión de permutaciones genera confusión, ya que se imprime tras cada permutación en lugar de al finalizar todas. Además, el uso de variables en español (elemento_actual, elementos_restantes) puede dificultar la comprensión si el entorno de programación está en inglés.
Sigue buenas prácticas de programación
La recursión es válida, pero no se manejan casos de entrada no válida (ej: None o tipos no list). La función no tiene comentarios explicativos, lo que dificulta entender el proceso recursivo para principiantes. El uso de range(len(lista)) y concatenación de listas es correcto, pero en listas grandes podría ser ineficiente (aunque no es relevante para el enunciado).
Recomendaciones de mejora
-
Eliminar el mensaje
"Terminado"dentro del bucle de impresión
El mensaje se imprime tras cada permutación, lo que no parece intencional. Moverlo fuera del bucle para indicar el fin del proceso:perms = permutaciones(lista) for perm in perms: print(' '.join(perm)) print("Terminado") -
Agregar comentarios explicativos
Aclarar el funcionamiento de la recursión y el proceso de construcción de permutaciones, especialmente para estudiantes principiantes. -
Validar la entrada
Asegurarse de quelistasea un objeto iterable válido (ej: verificar que no seaNone). -
Considerar nombres en inglés para variables
Aunque el código funciona, usar nombres comocurrent_elementyremaining_elementsfacilita la adaptación a estándares globales de programación. -
Evitar concatenación innecesaria de listas
En lugar delista[:i] + lista[i + 1:], usarelementos_restantes = lista[:i] + lista[i+1:](espacio eni+1para mejorar legibilidad). -
No usar
itertools(no aplica aquí)
El programa no usaitertools, lo cual es correcto para cumplir con el enunciado.