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:

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

⚠️ Parcialmente.
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

⚠️ Parcialmente.

  • La función permutar tiene 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 lista en el bucle exterior podría tener un nombre más específico (ej. elemento o permutacion).
  • La recursión es válida, pero en programas reales se preferirían métodos iterativos o bibliotecas como itertools para evitar límites de recursión.

Recomendaciones de mejora

  1. Agregar comentarios:
    Explica la lógica recursiva en cada paso, especialmente cómo se combinan los elementos.

  2. Usar nombres más claros:
    Cambiar primero por elemento_actual y resto por sublista_resto para evitar ambigüedades.

  3. 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.

  4. Incluir una docstring:
    Documentar la función permutar para describir su propósito, parámetros y retorno.

  5. Evitar itertools en esta práctica:
    Aunque en un programa real se recomendaría itertools.permutations, esta solución cumple con el enunciado al implementar la lógica manualmente.

  6. 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).