randrange(start, stop)przyjmuje tylko argumenty całkowite. Jak więc uzyskać losową liczbę między dwiema wartościami zmiennoprzecinkowymi?
randrange(start, stop)przyjmuje tylko argumenty całkowite. Jak więc uzyskać losową liczbę między dwiema wartościami zmiennoprzecinkowymi?
Odpowiedzi:
Użyj random.uniform (a, b) :
>>> random.uniform(1.5, 1.9)
1.8733202628557872
Returns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < aznaczy: Innymi słowy, wynik Nmoże być równy wejściowi ai b. W tym przypadku 1.5i 1.9.
.uniformfunkcji, ale zamiast tego z albo .randomlub randrange?
1.5 + random.random() * (1.9 - 1.5)powinien to zrobić, nawet jeśli zgodnie ze specyfikacją nigdy nie zwróci dokładnie 1.9(nawet teoretycznie).
uniform(a, b)jest zaimplementowany jako a + (b-a) * random()i zwraca losową liczbę z zakresu [a, b) lub [a, b] w zależności od zaokrąglenia github.com/python/cpython/blob/…
jeśli chcesz wygenerować losową liczbę zmiennoprzecinkową z cyframi N na prawo od punktu, możesz to zrobić:
round(random.uniform(1,2), N)
drugim argumentem jest liczba miejsc po przecinku.
Najczęściej używałbyś:
import random
random.uniform(a, b) # range [a, b) or [a, b] depending on floating-point rounding
Python zapewnia inne dystrybucje, jeśli potrzebujesz.
Jeśli numpyjuż zaimportowałeś, możesz użyć jego odpowiednika:
import numpy as np
np.random.uniform(a, b) # range [a, b)
Ponownie, jeśli potrzebujesz innej dystrybucji, numpyzapewnia te same dystrybucje co Python, a także wiele dodatkowych .
np.random.uniform(start, stop)lubnp.random.uniform(start, stop, samples)jeśli chcesz wielu próbek. W przeciwnym razie poniższe odpowiedzi są najlepsze.