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.
Revisión automática de programa
Programa revisado:
import random
import math
listaeditable = ["Uno","Dos","Tres","Cuatro"]
possiblecombinations = math.factorial(len(listaeditable))
combinations = []
while not len(combinations) == possiblecombinations:
lista = list(listaeditable)
combinacion = []
for _ in range(len(lista)):
item = random.choice(lista)
lista.remove(item)
combinacion.append(item)
if combinacion not in combinations:
combinations.append(combinacion)
combinationprint = ' '.join(combinacion)
print(combinationprint)
Análisis
Cumple con el enunciado
El programa no cumple completamente con el enunciado. Aunque genera permutaciones de strings separados por espacios, no sigue el formato exacto solicitado:
- No tiene las líneas de inicio obligatorias:
lista = ['Hola', 'Qué tal', 'Adiós'],print('Lista:', lista),print('Permutaciones:') - No utiliza la lista específica del ejemplo (
['Hola', 'Qué tal', 'Adiós']) sino que usa una lista diferente (["Uno","Dos","Tres","Cuatro"]) - El nombre del archivo no se puede verificar, pero según el contenido parece estar bien nombrado
El formato de salida sí es correcto (strings separados por espacios).
Es fácil de leer y entender
El programa es poco legible para principiantes por varios motivos:
-
Nombres de variables poco descriptivos:
listaeditable,possiblecombinations,combinationprintno siguen las convenciones de Python (debería sersnake_case) -
Lógica confusa: El uso de un bucle
whilecon selección aleatoria es un enfoque poco intuitivo para entender cómo se generan las permutaciones - Falta de comentarios: No hay documentación que explique la estrategia utilizada
-
Lógica anti-esperada: Es confuso que se use
randompara algo que debería ser determinista
Sigue buenas prácticas de programación
El programa no sigue buenas prácticas:
- Nomenclatura incorrecta: Usa mayúsculas en el medio de nombres de variables
-
Ineficiencia: El bucle
whilepodría ejecutarse indefinidamente si hay problemas con la aleatoriedad - Complejidad innecesaria: Existe un método más simple y eficiente para generar permutaciones
-
No es determinista: El uso de
randomhace que los resultados varíen entre ejecuciones - Falta de validación: No verifica si la lista está vacía
Recomendaciones de mejora
-
Usar el formato exacto del enunciado: Incluir las líneas de inicio obligatorias y la lista específica
-
Implementar un algoritmo determinista: Reemplazar el método aleatorio con un algoritmo de permutaciones tradicional, como:
from itertools import permutations for perm in permutations(lista): print(' '.join(perm)) -
Mejorar la nomenclatura: Usar
snake_casepara todas las variables -
Agregar manejo de casos especiales: Verificar si la lista está vacía o tiene un solo elemento
-
Opcional avanzado: Para demostrar el manejo de listas arbitrarias, podría solicitar la lista al usuario o permitir que se pase como parámetro
-
Agregar comentarios: Documentar la estrategia utilizada
Nota sobre itertools: El programa actual no usa itertools, pero podría beneficiarse de su uso para un programa real. Sin embargo, como estás aprendiendo, sería mejor implementar el algoritmo desde cero para entender la lógica de las permutaciones.