randrange(start, stop)
leva apenas argumentos inteiros. Então, como eu obteria um número aleatório entre dois valores flutuantes?
randrange(start, stop)
leva apenas argumentos inteiros. Então, como eu obteria um número aleatório entre dois valores flutuantes?
Respostas:
Use 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
Em outras palavras, a saída N
pode ser igual a entrada a
e b
. Nesse caso 1.5
e 1.9
.
.uniform
função, mas usando .random
ou randrange
?
1.5 + random.random() * (1.9 - 1.5)
deve fazê-lo, embora de acordo com as especificações isso nunca retorne exatamente 1.9
(mesmo em teoria).
uniform(a, b)
é implementado a + (b-a) * random()
e retorna um número aleatório no intervalo [a, b) ou [a, b] dependendo do arredondamento github.com/python/cpython/blob/…
se você deseja gerar uma flutuação aleatória com N dígitos à direita do ponto, você pode fazer isso:
round(random.uniform(1,2), N)
o segundo argumento é o número de casas decimais.
Geralmente, você usaria:
import random
random.uniform(a, b) # range [a, b) or [a, b] depending on floating-point rounding
Python fornece outras distribuições, se você precisar.
Se você tem numpy
importou, poderá usar seu equivalente:
import numpy as np
np.random.uniform(a, b) # range [a, b)
Novamente, se você precisar de outra distribuição, numpy
forneça as mesmas distribuições que o python, além de muitas outras .
np.random.uniform(start, stop)
ounp.random.uniform(start, stop, samples)
se você queria várias amostras. Caso contrário, as respostas abaixo são as melhores.