2012-05-14 10 views

Odpowiedz

5
import random 

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

print r(-1, 1) 

EDYCJA: @ San4ez's random.uniform(-1, 1) jest prawidłowy sposób. Nie trzeba wyważać otwartych drzwi ...

Zresztą random.uniform() jest kodowana jako:

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(): powrót 4 # Wygenerowane przez rzetelny rzut kostką. Gwarantowane być losowe. " –

+0

Wielkie dzięki. Ale nie mogę zrobić w ten sposób. Gdzie chcę przekazać wartość jako argument podczas uruchamiania skryptu. #!/usr/bin/env python importuj sys, losowo r = sys.argv [1] y = sys.argv [2] drukuj random.range (y, r) – user1393251

+0

@ user1393251 - możesz zrobić w ten sposób (moja metoda "r" jest nazywana tą samą metodą, co poprawne "random.uniform"), właśnie wymyślam tutaj koło ... Weź odpowiedź San4ez. – eumiro

23

użytkowania random.uniform(a, b)

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

Większość języków mają funkcję, która będzie zwracać liczbę losową w przedziale [0 1], którą następnie można manipulować, aby uzyskać odpowiedni zakres. W pythonie funkcja ta to random.random. Tak dla zakresu [-1, 1], można to zrobić:

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

przez podwojenie liczby otrzymujemy szereg [0, 2], a przez odjęcie jednego z niego, otrzymujemy [- 1, 1].

2

jeśli chcesz integer in a specified range:

print random.randrange(-1, 2) 

wykorzystuje tę samą konwencję za range, więc górna granica nie jest wliczony w cenę.

random.uniform robi coś podobnego, jeśli trzeba unosić wartości, ale to not always clear jeśli górna granica jest włączone czy nie

Powiązane problemy