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:
-
Error de sintaxis: Usa
list[Any]sin importarAnydesdetyping, lo que causará unNameErroral ejecutarse. -
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:palabrasugiere una sola palabra, pero la lista contiene frases como'Qué tal'. Sería mejor usarelementoofrase. -
❌ Falta comentar el propósito de variables clave comorestoocombinaciones, lo que dificulta su comprensión para principiantes.
Sigue buenas prácticas de programación
No del todo.
-
❌ Tipo no definido: El uso delist[Any]sin importarAnyviola las reglas de tipado en Python. -
❌ Sobrecarga innecesaria: La líneaprint([' '.join(p)])crea una lista temporal innecesaria. Basta conprint(' '.join(p)). -
✅ Bien estructurado el algoritmo recursivo, respetando la lógica de permutaciones sinitertools(como exige la práctica).
Recomendaciones de mejora
-
Corrige el error de tipado:
- Elimina la anotación
: list[Any]o añadefrom typing import Anyal inicio (aunque para principiantes es preferible omitir anotaciones complejas).
- Elimina la anotación
-
Ajusta la salida:
- Cambia
print([' '.join(p)])porprint(' '.join(p))para mostrar las cadenas directamente.
- Cambia
-
Mejora nombres de variables:
- Reemplaza
palabraporelementopara reflejar que la lista contiene frases.
- Reemplaza
-
Añade comentarios breves:
- Ejemplo:
# Genera permutaciones del resto de elementosantes del bucle recursivo.
- Ejemplo:
-
Evita listas temporales innecesarias:
- El uso de
[palabra] + ces correcto, pero asegúrate de que el resto del código no genere estructuras anidadas no requeridas.
- El uso de