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 en parte 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.

TOC


Comprobación de archivos con extension '.py'

Archivos encontrados, que no son : permutaciones.py

Correcto, se elige permutaciones.py para el análisis

Comprobación con ficheros de solución

Los archivos son diferentes de los de la solución.

Revisión automática de programa

Programa revisado:

# PRÁCTICA PERMUTACIONES CON MAS DE 3 ELEMENTOS #
lista = ["un", "dia", "vi", "una", "vaca"]

print("Lista:", lista)
print("Permutaciones:")

def permutaciones(lista): # EN ESTE CASO, LA FUNCION CREA n! PERMUTACIONES, SIENDO n len(lista)
    if len(lista) == 0:
        return [[]]
    resultado = []
    for i in range(len(lista)):
        inicial = lista[i]
        resto = lista[:i] + lista[i+1:]
        for p in permutaciones(resto):
            resultado.append([inicial] + p)
    return(resultado)

resultado = permutaciones(lista)

for p in resultado:
    print(" ".join(p)) #CON ESTA LINEA EL RESULTADO QUEDA BONITO

Análisis

Cumple con el enunciado

El programa cumple parcialmente con el enunciado. Genera correctamente todas las permutaciones de la lista, independientemente de su tamaño (incluyendo 4 o más elementos), y las muestra en el formato solicitado (una permutación por línea, con strings separados por espacios). Sin embargo, el enunciado indica que los alumnos sólo han visto construcciones básicas (bucles for/while, condicionales if-else), y este programa utiliza recursión, que no forma parte de los conceptos permitidos.

Es fácil de leer y entender

El programa no es fácil de entender para un principiante. La recursión es un concepto avanzado que requiere comprender cómo funciona la pila de llamadas y el desglose de problemas en subproblemas, algo que no se ha enseñado aún. Además, el uso de variables como inicial y resto dentro de la función recursiva, aunque claro para alguien con experiencia, puede generar confusión en alumnos que no dominan el concepto de recursión.

Sigue buenas prácticas de programación

El programa sigue algunas buenas prácticas:

  • Usa nombres de variables descriptivos en español (lista, resultado, inicial).
  • Incluye comentarios explicativos breves.
  • La función está bien estructurada y encapsula la lógica de permutaciones.

Sin embargo, no sigue la práctica de evitar funciones recursivas cuando no es necesario, especialmente en un contexto educativo donde se busca reforzar el uso de estructuras básicas como bucles anidados.


Recomendaciones de mejora

  1. Evitar la recursión
    Dado que el enunciado limita el uso a construcciones básicas (bucles y condicionales), el programa debería reescribirse usando bucles anidados. Por ejemplo, para una lista de 3 elementos, se pueden usar 3 bucles for para generar todas las combinaciones posibles sin repetición.

  2. Simplificar para el caso base
    Si el enunciado principal se centra en listas de 3 elementos, el programa debería enfocarse en resolver ese caso específico con estructuras básicas, en lugar de implementar una solución generalizada con recursión.

  3. Documentar el código
    Aunque hay un comentario inicial, se podría mejorar con explicaciones más detalladas de cada paso, especialmente para justificar cómo se generan las permutaciones sin usar conceptos avanzados.

  4. Considerar el uso de itertools (sólo como alternativa)
    Aunque no se debe usar en esta práctica, se podría mencionar en comentarios que en un programa real se podría utilizar itertools.permutations para simplificar el código. Ejemplo:

    # Alternativa con itertools (no permitida en esta práctica)
    # from itertools import permutations
    # for p in permutations(lista):
    #     print(" ".join(p))
  5. Validar la lista de entrada
    Aunque el enunciado no lo exige, sería útil añadir una comprobación para evitar duplicados en la lista original, ya que el programa actual asume que todos los elementos son únicos.