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
Es fácil de leer y entender
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
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
-
Evitar combinaciones manuales: En lugar de escribir 6
printpor elemento, usa bucles anidados para generar automáticamente las permutaciones de los elementos restantes. Por ejemplo, con 3 elementos, puedes usar 3 buclesforpara iterar sobre cada posición. -
Mejorar nombres de variables: Usa nombres más descriptivos, como
indiceen lugar dexorestantesen lugar delistacopia. -
Evitar
del: En vez de eliminar elementos condel, podrías usar una lista nueva que excluya el elemento actual con comprensión, comorestantes = [elem for elem in lista if elem != first]. -
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).
-
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.