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 hacer_permutaciones(lista):
    if len(lista) <= 1:
        return [lista]
    resultado: list[Any] = []
    for i in range(len(lista)):
        palabra = lista[i]
        resto = lista[:i] + lista[i+1:]
        combinaciones = hacer_permutaciones(resto)
        for c in combinaciones:
            resultado.append([palabra] + c)

    return resultado

palabras = ['Hola', 'Qué tal', 'Adiós']

todas = hacer_permutaciones(palabras)

for p in todas:
    print([' '.join(p)])

Análisis

Cumple con el enunciado

No cumple completamente. El programa genera las permutaciones correctamente, pero tiene dos errores críticos:

  1. Error de sintaxis: Usa list[Any] sin importar Any desde typing, lo que causará un NameError al ejecutarse.
  2. Formato de salida incorrecto: Imprime cada permutación como una lista con un solo elemento (ej: ['Hola Qué tal Adiós']), cuando debería imprimir directamente la cadena (ej: Hola Qué tal Adiós). El enunciado probablemente espera cadenas sueltas, no listas anidadas.

Es fácil de leer y entender

Parcialmente.

  • La estructura recursiva es clara para quien entienda permutaciones.
  • Nombres confusos: palabra sugiere una sola palabra, pero la lista contiene frases como 'Qué tal'. Sería mejor usar elemento o frase.
  • Falta comentar el propósito de variables clave como resto o combinaciones, lo que dificulta su comprensión para principiantes.

Sigue buenas prácticas de programación

No del todo.

  • Tipo no definido: El uso de list[Any] sin importar Any viola las reglas de tipado en Python.
  • Sobrecarga innecesaria: La línea print([' '.join(p)]) crea una lista temporal innecesaria. Basta con print(' '.join(p)).
  • Bien estructurado el algoritmo recursivo, respetando la lógica de permutaciones sin itertools (como exige la práctica).

Recomendaciones de mejora

  1. Corrige el error de tipado:
    • Elimina la anotación : list[Any] o añade from typing import Any al inicio (aunque para principiantes es preferible omitir anotaciones complejas).
  2. Ajusta la salida:
    • Cambia print([' '.join(p)]) por print(' '.join(p)) para mostrar las cadenas directamente.
  3. Mejora nombres de variables:
    • Reemplaza palabra por elemento para reflejar que la lista contiene frases.
  4. Añade comentarios breves:
    • Ejemplo: # Genera permutaciones del resto de elementos antes del bucle recursivo.
  5. Evita listas temporales innecesarias:
    • El uso de [palabra] + c es correcto, pero asegúrate de que el resto del código no genere estructuras anidadas no requeridas.