randrange(start, stop)
бере лише цілі аргументи. То як би я отримав випадкове число між двома значеннями поплавця?
randrange(start, stop)
бере лише цілі аргументи. То як би я отримав випадкове число між двома значеннями поплавця?
Відповіді:
Використовуйте 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 < a
Іншими словами, вихід N
може дорівнювати як вводу, так a
і b
. У цьому випадку 1.5
і 1.9
.
.uniform
функції, а замість того .random
чи іншого, або randrange
?
1.5 + random.random() * (1.9 - 1.5)
повинен це зробити, навіть якщо згідно з специфікаціями це ніколи не повернеться точно 1.9
(навіть теоретично).
uniform(a, b)
, реалізовано як a + (b-a) * random()
і повертає випадкове число в діапазоні [a, b) або [a, b] залежно від округлення github.com/python/cpython/blob/…
якщо ви хочете генерувати випадковий поплавок з N цифрами праворуч від точки, ви можете зробити це:
round(random.uniform(1,2), N)
другий аргумент - кількість десяткових знаків.
Найчастіше ви використовуєте:
import random
random.uniform(a, b) # range [a, b) or [a, b] depending on floating-point rounding
Python надає інші дистрибутиви, якщо вам це потрібно.
Якщо ви вже numpy
імпортували, ви можете використовувати його еквівалент:
import numpy as np
np.random.uniform(a, b) # range [a, b)
Знову ж таки, якщо вам потрібен інший дистрибутив, numpy
передбачені ті ж дистрибутиви, що і python, а також багато додаткових .
np.random.uniform(start, stop)
абоnp.random.uniform(start, stop, samples)
якщо вам потрібно кілька зразків. Інакше нижче найкращі відповіді.