Miré más de Python Docs (puedo haber entendido mal), pero no vi que hubiera una manera de hacer esto (mira debajo) sin llamar a una función recursiva.
Lo que me gustaría hacer es generar un valor aleatorio que excluya valores en el medio.¿Puede Python generar un número aleatorio que excluya un conjunto de números, sin usar la recursión?
En otras palabras,
Imaginemos que quería X
ser un número aleatorio que no está en
range(a - b, a + b)
¿Puedo hacer esto en la primera pasada,
o
1. ¿Tengo que generar constantemente un número,
2. Marque si en range()
,
3. Lave el enjuague?
cuanto a por qué no deseo escribir una función recursiva,
1. 'se siente como' Yo no debería tener que
2. El conjunto de números que estoy haciendo esto para en realidad podría terminar siendo bastante grande, y
... He oído que los desbordamientos de pila son malos, y podría ser demasiado cauteloso al hacer esto.
Estoy seguro de que hay una manera agradable, no pittónica, recursiva de hacerlo.
Esto funcionará a menos que el conjunto de respuestas posibles sea extremadamente grande, en cuyo caso usará demasiada memoria y se bloqueará. –
@AndrewG: De acuerdo, no es ideal si tiene un rango de millones/billones. Por otro lado, es simple y memorable. Su respuesta, si bien es una solución muy buena y robusta, podría ser más propensa a errores. – Junuxx
Sí. Usaría tu respuesta si a, b, cyd se conocían desde el principio y se sabía que era un conjunto pequeño, y el mío si dependían de una entrada o si se sabía que era un conjunto grande. –