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']
print('Lista:', lista)
print('Permutaciones:')
def permutar(lista):
if len(lista) == 1:
return [lista]
resultado = []
for i in range(len(lista)):
primero = lista[i]
resto = lista[:i] + lista[i + 1:]
for p in permutar(resto):
resultado.append([primero] + p)
return resultado
for p in permutar(lista):
print(' '.join(p))
Análisis
Cumple con el enunciado
El programa genera todas las permutaciones de la lista ['Hola', 'Qué tal', 'Adiós'] y las imprime en líneas separadas, como se muestra en el ejemplo de ejecución. La función recursiva permutar construye las permutaciones de forma correcta, y el bucle final imprime cada una concatenada con espacios.
Es fácil de leer y entender
El código tiene nombres de variables en español (primero, resto) que son descriptivos, pero carece de comentarios que expliquen la lógica recursiva. Para un principiante, entender cómo se combinan las permutaciones del resto de la lista con el elemento actual podría ser confuso sin una explicación adicional.
Sigue buenas prácticas de programación
- La función
permutartiene un propósito claro, pero no maneja casos extremos (como listas vacías). - No se incluye una docstring para documentar la función.
- La variable
listaen el bucle exterior podría tener un nombre más específico (ej.elementoopermutacion). - La recursión es válida, pero en programas reales se preferirían métodos iterativos o bibliotecas como
itertoolspara evitar límites de recursión.
Recomendaciones de mejora
-
Agregar comentarios:
Explica la lógica recursiva en cada paso, especialmente cómo se combinan los elementos. -
Usar nombres más claros:
Cambiarprimeroporelemento_actualyrestoporsublista_restopara evitar ambigüedades. -
Manejar listas vacías:
Añadir una validación al inicio de la función para devolver[[]]si la lista está vacía, evitando errores. -
Incluir una docstring:
Documentar la funciónpermutarpara describir su propósito, parámetros y retorno. -
Evitar
itertoolsen esta práctica:
Aunque en un programa real se recomendaríaitertools.permutations, esta solución cumple con el enunciado al implementar la lógica manualmente. -
Simplificar la impresión:
Mover la lógica de impresión dentro de la función o usar un bucle más explícito para facilitar la comprensión. Ejemplo:for p in permutar(lista): print(p)(sin
join, si el formato no es crítico).