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:

entrada= input("Escribe varias palabras separadas por comas:")

#Convertimos las palabras en una lista
lista=entrada.split(",")

print("lista",lista)
print("Permutaciones")

#Con este comando genero las permutaciones manualmente
def permutaciones(lista):

    #si la lista solo tiene una palabra , es la unica permutacion posible
    if len(lista) ==1:
        return [lista]

    #Guardamos todas las permutaciones aqui
    resultado = []

    #REcorremos todas las posiciones de la lista
    for i in range(len(lista)):
        #elegimos 1 como primero
        primero = lista[i]
        #ahora los demas elementos quitando el elegido
        resto = lista[:i] +lista[i+1:]

        #Obtengo ahora las permutaciones del resto
        subpermutaciones = permutaciones(resto)

        #Añadimos el primero a cada una de las permutaciones

        for p in subpermutaciones:
            resultado.append ([primero]+ p)

    return resultado

#Si no hay elementos ,avisamos ; si no, imprimimos cada permutación

if not lista:
    print("(No hay elementos para permutar")
else:
    for p in permutaciones(lista):
        print(" ".join(p))


Análisis

Cumple con el enunciado

.
El programa genera todas las permutaciones posibles de las palabras ingresadas sin usar itertools, como se requiere. Si la lista está vacía, muestra un mensaje adecuado. Las permutaciones se imprimen concatenadas con espacios, siguiendo el formato esperado.

Es fácil de leer y entender

⚠️ Parcialmente.
El código tiene comentarios explicativos, pero algunos son redundantes (ej: "#Convertimos las palabras en una lista"). Las variables usan nombres en español (lista, primero, resto), lo que facilita la comprensión para hablantes del idioma, pero podría confundir en contextos internacionales. La recursividad de la función permutaciones es correcta, pero su lógica puede ser difícil de seguir para principiantes.

Sigue buenas prácticas de programación

⚠️ Parcialmente.

  • La función permutaciones tiene un nombre claro y realiza una tarea específica.
  • No se validan entradas vacías dentro de la función (ej: si la lista contiene cadenas vacías como resultado de split).
  • La variable lista se define en el ámbito global, lo que podría evitarse pasando parámetros explícitos.
  • El código no incluye manejo de errores para casos como espacios innecesarios (ej: "a, b" con espacio tras la coma).

Recomendaciones de mejora

  1. Validar palabras vacías en la entrada:
    Eliminar elementos vacíos tras split para evitar permutaciones con cadenas vacías:

    lista = [palabra.strip() for palabra in entrada.split(",") if palabra.strip()]
  2. Eliminar comentarios redundantes:
    Simplificar comentarios que repiten lo obvio (ej: "#REcorremos todas las posiciones de la lista").

  3. Manejo de espacios en la entrada:
    Usar strip() al procesar palabras para evitar errores por espacios tras las comas.

  4. Claridad en la recursividad:
    Añadir un comentario en la línea subpermutaciones = permutaciones(resto) explicando que se llama recursivamente a la función.

  5. Uso de itertools (solo para referencia):
    Aclarar al alumno que, en un programa real, se usaría itertools.permutations para simplificar el código, pero que en esta práctica debe evitarse como se indica en el enunciado.

  6. Estructura de control para listas vacías:
    Aunque el programa ya maneja listas vacías en el if not lista, se podría integrar esta validación dentro de la función permutaciones para mayor robustez.