randrange(start, stop)
chỉ lấy đối số nguyên. Vậy làm thế nào tôi có được một số ngẫu nhiên giữa hai giá trị float?
randrange(start, stop)
chỉ lấy đối số nguyên. Vậy làm thế nào tôi có được một số ngẫu nhiên giữa hai giá trị float?
Câu trả lời:
Sử dụng 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
rằng nói cách khác, đầu ra N
có thể bằng đầu vào a
và b
. Trong trường hợp này 1.5
và 1.9
.
.uniform
chức năng, nhưng thay vào đó bằng .random
hoặcrandrange
?
1.5 + random.random() * (1.9 - 1.5)
nên làm điều đó, mặc dù theo thông số kỹ thuật, điều này sẽ không bao giờ trở lại chính xác 1.9
(ngay cả trong lý thuyết).
uniform(a, b)
được triển khai a + (b-a) * random()
và trả về một số ngẫu nhiên trong phạm vi [a, b) hoặc [a, b] tùy thuộc vào làm tròn github.com/python/cpython/blob/ trộm
nếu bạn muốn tạo một số float ngẫu nhiên có N chữ số ở bên phải điểm, bạn có thể thực hiện điều này:
round(random.uniform(1,2), N)
đối số thứ hai là số thập phân.
Thông thường nhất, bạn sẽ sử dụng:
import random
random.uniform(a, b) # range [a, b) or [a, b] depending on floating-point rounding
Python cung cấp các bản phân phối khác nếu bạn cần.
Nếu bạn đã numpy
nhập, bạn có thể sử dụng tương đương:
import numpy as np
np.random.uniform(a, b) # range [a, b)
Một lần nữa, nếu bạn cần một bản phân phối khác, numpy
cung cấp các bản phân phối tương tự như python, cũng như nhiều bản phân phối bổ sung .
np.random.uniform(start, stop)
hoặcnp.random.uniform(start, stop, samples)
nếu bạn muốn nhiều mẫu. Nếu không dưới đây câu trả lời là tốt nhất.