randrange(start, stop)
prend uniquement des arguments entiers. Alors, comment pourrais-je obtenir un nombre aléatoire entre deux valeurs flottantes?
randrange(start, stop)
prend uniquement des arguments entiers. Alors, comment pourrais-je obtenir un nombre aléatoire entre deux valeurs flottantes?
Réponses:
Utilisez 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
En d'autres termes, la sortie N
peut être égale à l'entrée a
et à b
. Dans ce cas 1.5
et 1.9
.
.uniform
fonction, mais avec ou .random
ou randrange
?
1.5 + random.random() * (1.9 - 1.5)
devrait le faire, même si selon les spécifications cela ne reviendra jamais exactement 1.9
(même en théorie).
uniform(a, b)
être implémenté comme a + (b-a) * random()
et renvoie un nombre aléatoire dans la plage [a, b) ou [a, b] en fonction de l'arrondi github.com/python/cpython/blob/…
si vous voulez générer un flottant aléatoire avec N chiffres à droite du point, vous pouvez faire ceci:
round(random.uniform(1,2), N)
le deuxième argument est le nombre de décimales.
Le plus souvent, vous utiliseriez:
import random
random.uniform(a, b) # range [a, b) or [a, b] depending on floating-point rounding
Python fournit d' autres distributions si vous en avez besoin.
Si vous avez numpy
déjà importé, vous pouvez utiliser son équivalent:
import numpy as np
np.random.uniform(a, b) # range [a, b)
Encore une fois, si vous avez besoin d'une autre distribution, numpy
fournit les mêmes distributions que python, ainsi que de nombreuses autres .
np.random.uniform(start, stop)
ounp.random.uniform(start, stop, samples)
si vous vouliez plusieurs échantillons. Sinon, les réponses ci-dessous sont les meilleures.