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)
если вы хотели несколько образцов. В противном случае ниже ответы являются лучшими.