2012-05-14 69 views

Trả lời

5
import random 

def r(minimum, maximum): 
    return minimum + (maximum - minimum) * random.random() 

print r(-1, 1) 

EDIT: @ San4ez random.uniform(-1, 1) là cách chính xác. Không cần phải phát minh lại bánh xe ...

Dù sao, random.uniform() được mã hóa như:

def uniform(self, a, b): 
    "Get a random number in the range [a, b) or [a, b] depending on rounding." 
    return a + (b-a) * self.random() 
+1

'def rand(): trả lại 4 # Được tạo bởi cuộn xúc xắc công bằng. Đảm bảo là ngẫu nhiên.' –

+0

Cảm ơn rất nhiều.Nhưng tôi không thể làm theo cách này.Tại đây tôi muốn chuyển giá trị làm đối số trong khi chạy tập lệnh. #!/usr/bin/env python nhập sys, ngẫu nhiên r = sys.argv [1] y = sys.argv [2] in random.range (y, r) – user1393251

+0

@ user1393251 - bạn có thể làm theo cách này (phương thức 'r' của tôi được gọi giống như cách' random.uniform' chính xác), chỉ là tôi đang phát minh lại bánh xe ở đây… Lấy câu trả lời của San4ez. – eumiro

23

Sử dụng random.uniform(a, b)

>>> import random 
>>> random.uniform(-1, 1) 
0.4779007751444888 
>>> random.uniform(-1, 1) 
-0.10028581710574902 
1

Hầu hết các ngôn ngữ có một hàm sẽ trả về một số ngẫu nhiên trong khoảng [0 , 1], sau đó bạn có thể thao tác để sắp xếp phạm vi mà bạn cần. Trong python, hàm là random.random. Vì vậy, đối với phạm vi của bạn của [-1, 1], bạn có thể làm điều này:

import random 
random_number = random.random() * 2 - 1 

Bằng cách tăng gấp đôi số chúng ta có được một loạt các [0, 2], và bằng cách trừ đi một từ nó, chúng tôi nhận [- 1, 1].

2

nếu bạn muốn integer in a specified range:

print random.randrange(-1, 2) 

nó sử dụng quy ước giống như range, vì vậy giới hạn trên không được bao gồm.

random.uniform làm điều gì đó tương tự nếu bạn cần nổi giá trị, nhưng nó not always clear nếu giới hạn trên được bao gồm hoặc không

1

Bạn cũng có thể làm điều gì đó như thế này

import random 
random.choice([-1, 1]) 
Các vấn đề liên quan