Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

en clase 03 Seleccionando los cursos, la lista de matrículas de un alumno repite cursos

La forma en que se codificó la creación de las matrículas admite que un alumno esté matriculado más de una vez en un curso. Pienso que puede corregirse validando el elemento a insertar en todasmatrículas. Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Debería crearse un bucle estilo while True en que se verifique si mat ya está en todas_matriculas; en caso de ya existir, se itera nuevamente generando aleatoriamente un nuevo mat; de lo contrario, se agrega el mat y se sale del bucle. Esa entiendo que sería la lógica correcta, y se me ocurrió hacerlo de la forma siguiente:

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Por favor, indicarme si es correcto el razonamiento. Y si hay otra forma de codificar el mismo, aunque mi solución al menos no me dio error de sintaxis. :)

2 respuestas

Hola Ernesto , espero que estés muy bien.

La idea que has propuesto es correcta en términos generales y se ajusta a la lógica que deseas implementar. Quieres garantizar que un alumno no se matricule más de una vez en el mismo curso. La solución que has planteado utilizando un buclewhileque verifica si la matrícula ya existe en todas_matriculas y, en caso afirmativo, genera una nueva matrícula, es una aproximación válida para lograr esto.

Te dejo una adptación de tu codigo

while True:
    mat = [id, np.random.choice(cursos.index, p=prob)]
    if mat in todas_matriculas:
        continue  # Si la matrícula ya existe, continúa el bucle
    else:
        todas_matriculas.append(mat)
        break  # Si la matrícula no existe, agrega la matrícula y sale del bucle

La modificación que hice es reemplazar next con continue y usar break para salir del bucle cuando se encuentra una matrícula única. Esto es más claro y tiene el mismo efecto. Además, asegura que no se agreguen matrículas duplicadas a la lista todas_matriculas.

Ten en cuenta que esta solución puede llevar más tiempo si hay un número significativo de cursos o matrículas, ya que se realizarán más iteraciones del bucle en busca de matrículas únicas. Sin embargo, es una forma efectiva de garantizar que no haya duplicados en la lista de matrículas. Otra alternativa podría ser utilizar un enfoque de muestreo sin reemplazo si tienes acceso a una función de muestreo de datos en tu lenguaje de programación (por ejemplo, en Python, puedes usar random.sample). Esto garantizaría que no haya duplicados sin necesidad de un bucle de verificación.

Un saludo.

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios
solución!

Muchas gracias, estimada Ingrid . Ya hice la corrección con continue

Intenté utilizar random.sample, pero no entendí la documentación en python sobre random.random_sample, pensando que podía pasarle como parámetro los cursos. Pudiera indicarme cómo quedaría esa alternativa?