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 generar_permutaciones(lista):
# Caso base: si solo hay un elemento, no hay más permutaciones
if len(lista) == 1:
return [lista]
resultado = [] # Aquí guardaremos todas las permutaciones
for i in range(len(lista)): # Recorremos cada posición de la lista
elemento_fijo = lista[i] # Tomamos el que está en la posición i
resto = lista[:i] + lista[i+1:] # Creamos una lista sin ese
for p in generar_permutaciones(resto):
# Combinamos el elemento fijo con cada permutación del resto
resultado.append([elemento_fijo] + p)
return resultado
lista = ['Hola', 'Qué tal', 'Adiós']
print('Lista:', lista)
print('Permutaciones:')
# Generamos y mostramos todas las permutaciones
for p in generar_permutaciones(lista):
print(' '.join(p))
Análisis
Cumple con el enunciado
Sí cumple. El programa genera todas las permutaciones de la lista proporcionada sin usar itertools, como requiere la práctica. Para la lista de ejemplo ['Hola', 'Qué tal', 'Adiós'], produce las 6 permutaciones esperadas (3 elementos → 3! = 6 combinaciones). La lógica recursiva implementada sigue el enfoque clásico de "fijar un elemento y permutar el resto", validando el caso base correctamente cuando queda un solo elemento.
Es fácil de leer y entender
Sí es legible. Usa nombres de variables en español (elemento_fijo, resto, resultado) que reflejan su propósito, y los comentarios explican cada paso clave (caso base, construcción del resto, combinación de resultados). La estructura con bucles anidados y recursión está organizada de forma secuencial, adecuada para principiantes.
Sigue buenas prácticas de programación
Cumple parcialmente. Aunque la lógica es correcta y evita itertools (como exige la práctica), no contempla el caso de lista vacía: si lista = [], devolvería [] en lugar de [[]] (única permutación válida para lista vacía). Además, falta un docstring que describa la función, sus parámetros y valor de retorno, lo que ayudaría a entender su uso sin revisar el código interno.
Recomendaciones de mejora
-
Añade un caso base para lista vacía: Incluye
if len(lista) == 0: return [[]]antes del caso actual para manejar este escenario, aunque el enunciado no lo exija explícitamente. -
Incluye un docstring explicativo: Describe brevemente qué hace la función, por ejemplo:
"""Genera todas las permutaciones de una lista usando recursión. Retorna una lista de listas.""" -
Verifica el tipo de elementos en la impresión: El uso de
' '.join(p)asume que los elementos son cadenas. Si la práctica permite listas con otros tipos (ej. números), adapta la impresión para evitar errores. -
Evita crear listas innecesarias: En
resto = lista[:i] + lista[i+1:]se generan sublistas temporales. Para listas grandes esto sería ineficiente, pero en este contexto (práctica básica) es aceptable. No es prioritario corregirlo, pero tenlo en cuenta para futuros ejercicios.