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 < aDengan kata lain output Ndapat sama dengan input adan b. Dalam hal ini 1.5dan 1.9.
.uniformfungsi, tetapi sebaliknya dengan salah satu .randomatau 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 numpymengimpor, Anda dapat menggunakan yang setara:
import numpy as np
np.random.uniform(a, b) # range [a, b)
Sekali lagi, jika Anda membutuhkan distribusi lain, numpysediakan 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.