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)якщо вам потрібно кілька зразків. Інакше нижче найкращі відповіді.