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 = ['iphone', 'samsung', 'xiaomi', 'poco']

for x in range(len(lista)):
    first = lista[x]
    listacopia = lista.copy()
    del(listacopia[x])
    print(first, listacopia[0], listacopia[1],listacopia[2])
    print(first, listacopia[0], listacopia[2],listacopia[1])
    print(first, listacopia[1], listacopia[0],listacopia[2])
    print(first, listacopia[1], listacopia[2],listacopia[0])
    print(first, listacopia[2], listacopia[0],listacopia[1])
    print(first, listacopia[2], listacopia[1],listacopia[0])

Análisis

Cumple con el enunciado

. El programa genera todas las permutaciones posibles de los 4 elementos de la lista, mostrando cada combinación por pantalla. Para cada elemento como primer elemento fijo, imprime las 6 permutaciones posibles de los 3 elementos restantes, lo que da un total de 24 permutaciones (4 elementos × 6 combinaciones). Esto coincide con el objetivo de generar permutaciones completas.

Es fácil de leer y entender

No. El código repite 6 veces print(...) con combinaciones manuales de índices (listacopia[0], listacopia[1], etc.), lo que dificulta identificar el patrón lógico. Además, el uso de variables poco descriptivas como x y listacopia reduce la claridad. Un principiante podría confundirse al ver tantas líneas similares sin una estructura general evidente.

Sigue buenas prácticas de programación

No. El código depende de combinaciones manuales y no escalables. Si la lista tuviera más elementos, habría que reescribir todas las líneas de print. No se encapsula la lógica en funciones ni se usan bucles anidados para evitar repetición. Además, el uso de del para modificar listas durante iteraciones no es recomendable si hay alternativas más seguras.

Recomendaciones de mejora

  1. Evitar combinaciones manuales: En lugar de escribir 6 print por elemento, usa bucles anidados para generar automáticamente las permutaciones de los elementos restantes. Por ejemplo, con 3 elementos, puedes usar 3 bucles for para iterar sobre cada posición.

  2. Mejorar nombres de variables: Usa nombres más descriptivos, como indice en lugar de x o restantes en lugar de listacopia.

  3. Evitar del: En vez de eliminar elementos con del, podrías usar una lista nueva que excluya el elemento actual con comprensión, como restantes = [elem for elem in lista if elem != first].

  4. Escalabilidad: Si la lista cambia de tamaño, el código actual dejaría de funcionar. Para una solución más general, considera usar recursión o bucles dinámicos (aunque esto último excede lo visto en clase).

  5. Encapsular lógica en funciones: Define una función que genere permutaciones de una lista, facilitando reutilización y claridad.

Nota: Aunque itertools.permutations resolvería el problema de forma más eficiente, esta práctica debe hacerse sin usar bibliotecas externas.