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 = lista[i]
elementos_restantes = lista[:i] + lista[i + 1:]
for perm in permutaciones(elementos_restantes):
resultado.append([elemento] + 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 cumple parcialmente con el enunciado.
- Genera correctamente todas las permutaciones de una lista sin usar
itertools. - Sin embargo, el
print("terminado")dentro del bucle de impresión agrega texto innecesario al resultado final, lo cual no parece alinearse con el formato esperado de salida (sólo mostrar las permutaciones).
Es fácil de leer y entender
El código es fácil de leer para alguien que conoce recursión y listas.
- Los nombres de variables (
lista,elemento,elementos_restantes) son descriptivos. - La lógica recursiva está bien estructurada, aunque podría beneficiarse de comentarios explicativos para principiantes.
- El uso de
print("terminado")genera confusión, ya que no está relacionado con el cálculo de permutaciones.
Sigue buenas prácticas de programación
El programa sigue algunas buenas prácticas, pero tiene áreas de mejora:
- La función
permutacionesestá bien definida y encapsula la lógica. - El código de prueba (fuera de la función) no está protegido con
if __name__ == "__main__":, lo que limita su reutilización. - No hay validación para casos como listas vacías.
- El
print("terminado")viola el principio de responsabilidad única (la función de permutación no debería mezclar lógica de impresión).
Recomendaciones de mejora
-
Eliminar `print("terminado"):
Este mensaje no aporta valor al resultado y altera el formato de salida esperado. Basta con imprimir cada permutación. -
Validar listas vacías:
Si la lista está vacía, la función debería devolver una lista con una permutación vacía:return [[]]en lugar de[lista]cuandolen(lista) == 0. -
Mejorar el código de prueba:
Mover el código de prueba bajo un bloqueif __name__ == "__main__":para evitar ejecución no deseada si se importa como módulo. -
Comentarios explicativos:
Añadir comentarios breves en la función recursiva para aclarar cómo se construyen las permutaciones. -
Evitar duplicados innecesarios:
La líneaelemento = lista[i]no es estrictamente necesaria, pero mejora la legibilidad. Puede mantenerse.
Ejemplo de salida corregida:
for perm in perms:
print(' '.join(perm)) # Sin "terminado"