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:

#!/usr/bin/env python3

lista = ['Hola', 'Qué tal', 'Hasta Luego', 'Adios']
print("Permutaciones")
for i in range(len(lista)):
    first = lista[i]
    lista3 = lista.copy()
    del(lista3[i])
    print(first, lista3[0], lista3[1], lista3[2])
    print(first, lista3[1], lista3[0], lista3[2])

Análisis

Cumple con el enunciado

No cumple completamente.
El programa genera permutaciones parciales de una lista de 4 elementos, pero sólo produce 8 combinaciones (2 por cada elemento inicial), cuando debería generar todas las permutaciones posibles (4! = 24). Por ejemplo, faltan combinaciones como 'Hola', 'Adios', 'Qué tal', 'Hasta Luego'.

Es fácil de leer y entender

⚠️ Parcialmente legible.

  • Usa variables con nombres poco descriptivos (lista3 en lugar de resto_lista o similar).
  • No hay comentarios que expliquen la lógica.
  • El uso de del(lista3[i]) y acceso manual a índices (lista3[0], lista3[1], lista3[2]) dificulta entender cómo se generan las permutaciones.

Sigue buenas prácticas de programación

No sigue buenas prácticas.

  • No usa bucles anidados para generar todas las combinaciones posibles.
  • No es escalable: si la lista tuviera más elementos, el código fallaría al acceder a índices fijos.
  • No evita redundancias: repite código para cada permutación manual.

Recomendaciones de mejora

  1. Generar todas las permutaciones:
    Usa bucles anidados para combinar todos los elementos sin repetición. Por ejemplo:

    for i in range(len(lista)):
        for j in range(len(lista)):
            if i != j:
                for k in range(len(lista)):
                    if k != i and k != j:
                        for l in range(len(lista)):
                            if l != i and l != j and l != k:
                                print(lista[i], lista[j], lista[k], lista[l])
  2. Evitar índices fijos:
    En lugar de lista3[0], lista3[1], lista3[2], usa bucles para recorrer las combinaciones restantes.

  3. Mejorar nombres de variables:
    Cambiar lista3 por resto_lista o elementos_restantes para claridad.

  4. No usar del:
    En vez de modificar la lista original, usa comprensiones para filtrar elementos:

    resto_lista = [x for idx, x in enumerate(lista) if idx != i]
  5. Validar tamaño de la lista:
    El código asume que la lista siempre tiene 4 elementos. Si cambia el tamaño, el programa debe adaptarse automáticamente.

Nota: El enunciado indica que la práctica debe hacerse sin usar itertools, por lo que no se debe recurrir a esa biblioteca.