randrange(start, stop)
hanya membutuhkan argumen integer. Jadi bagaimana saya mendapatkan angka acak antara dua nilai float?
randrange(start, stop)
hanya membutuhkan argumen integer. Jadi bagaimana saya mendapatkan angka acak antara dua nilai float?
Jawaban:
Gunakan acak. Seragam (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
Dengan kata lain output N
dapat sama dengan input a
dan b
. Dalam hal ini 1.5
dan 1.9
.
.uniform
fungsi, tetapi sebaliknya dengan salah satu .random
atau randrange
?
1.5 + random.random() * (1.9 - 1.5)
harus melakukannya, meskipun menurut spesifikasi ini tidak akan pernah kembali persis 1.9
(bahkan secara teori).
uniform(a, b)
diimplementasikan sebagai a + (b-a) * random()
dan mengembalikan angka acak dalam kisaran [a, b) atau [a, b] tergantung pada pembulatan github.com/python/cpython/blob/…
jika Anda ingin menghasilkan float acak dengan N digit di sebelah kanan titik, Anda bisa membuatnya:
round(random.uniform(1,2), N)
argumen kedua adalah jumlah desimal.
Paling umum, Anda akan menggunakan:
import random
random.uniform(a, b) # range [a, b) or [a, b] depending on floating-point rounding
Python menyediakan distribusi lain jika Anda perlu.
Jika sudah numpy
mengimpor, Anda dapat menggunakan yang setara:
import numpy as np
np.random.uniform(a, b) # range [a, b)
Sekali lagi, jika Anda membutuhkan distribusi lain, numpy
sediakan distribusi yang sama dengan python, dan juga banyak tambahan lainnya .
np.random.uniform(start, stop)
ataunp.random.uniform(start, stop, samples)
jika Anda ingin beberapa sampel. Kalau tidak, jawaban di bawah ini yang terbaik.