Skip to content

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

El programa cumple con el enunciado. Genera todas las permutaciones posibles de una lista de elementos (en este caso, cadenas de texto) mediante recursión, sin utilizar la biblioteca 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

⚠️ El código es funcional pero podría mejorar en claridad. La función 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

⚠️ La función no incluye validaciones de entrada (ej: verificar que 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

  1. 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
  2. Validar la entrada
    Asegurarse de que la función maneje casos inesperados, como entradas no listas:

    if not isinstance(lista, list):
        return []
  3. Evitar repetición innecesaria
    La línea resto = 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.

  4. Uso de itertools (solo como referencia)
    Aunque el programa evita itertools correctamente (como se espera en la práctica), podrías mencionar como mejora futura que en un entorno real se podría usar itertools.permutations para simplificar el código. Ejemplo:

    from itertools import permutations
    permutaciones = list(permutations(palabras))
  5. 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.