randrange(start, stop)
Nimmt nur ganzzahlige Argumente an. Wie würde ich also eine Zufallszahl zwischen zwei Gleitkommawerten erhalten?
randrange(start, stop)
Nimmt nur ganzzahlige Argumente an. Wie würde ich also eine Zufallszahl zwischen zwei Gleitkommawerten erhalten?
Antworten:
Verwenden Sie 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
Mit anderen Worten, die Ausgabe N
kann entweder der Eingabe a
oder entsprechen b
. In diesem Fall 1.5
und 1.9
.
.uniform
Funktion zu verwenden, sondern mit entweder .random
oder randrange
?
1.5 + random.random() * (1.9 - 1.5)
sollte es tun, obwohl dies gemäß den Spezifikationen niemals genau zurückkehren wird 1.9
(auch nicht in der Theorie).
uniform(a, b)
implementiert zu sein a + (b-a) * random()
und gibt eine Zufallszahl im Bereich [a, b) oder [a, b] zurück, abhängig von der Rundung github.com/python/cpython/blob/…
Wenn Sie einen zufälligen Float mit N Ziffern rechts vom Punkt generieren möchten, können Sie Folgendes tun:
round(random.uniform(1,2), N)
Das zweite Argument ist die Anzahl der Dezimalstellen.
Am häufigsten würden Sie verwenden:
import random
random.uniform(a, b) # range [a, b) or [a, b] depending on floating-point rounding
Python bietet bei Bedarf weitere Distributionen .
Wenn Sie bereits numpy
importiert haben , können Sie das entsprechende verwenden:
import numpy as np
np.random.uniform(a, b) # range [a, b)
Wenn Sie eine andere Distribution benötigen, numpy
bieten Sie dieselben Distributionen wie Python sowie viele zusätzliche Distributionen .
np.random.uniform(start, stop)
odernp.random.uniform(start, stop, samples)
wenn Sie mehrere Proben wollten. Ansonsten sind die folgenden Antworten am besten.