2011-07-28 12 views
7

Jak zdefiniować dziesiętny zakres od 0 do 1 w python? Funkcja Range() w pythonie zwraca tylko wartości int. Mam kilka zmiennych w moim kodzie, których liczba zmienia się od 0 do 1. Jestem zdezorientowany, w jaki sposób umieścić to w kodzie. DziękujęJak utworzyć zakres losowych liczb dziesiętnych między 0 a 1

Chciałbym dodać więcej do mojego pytania. Nie ma kroku ani żadnej wartości przyrostu, która wygenerowałaby wartości dziesiętne. Muszę użyć zmiennej, która może mieć wartość od 0 do 1. Może to być dowolna wartość. Ale program powinien znać granicę, która ma zakres od 0 do 1. Mam nadzieję, że wyraziłem się jasno. Dziękuję

http://docs.python.org/library/random.html

+1

Musisz być bardziej konkretny. Od 0 do 1 może mieć wartość od 0 do nieskończoności. Jakie są kroki? – Jacob

+0

Dzięki, ale nie ma żadnego kroku. Może to być dowolna wartość z przedziału od 0 do 1. Mam tylko zmienną, która miałaby wartości od 0 do 1. – zingy

+2

@eryksun Tak, potrzebuję losowego zakresu. Powinienem wpisać słowo losowo. – zingy

Odpowiedz

9

Jeśli szukasz listy liczb losowych między 0 a 1, myślę, że można mieć dobre wykorzystanie modułu random

>>> import random 
>>> [random.random() for _ in range(0, 10)] 
[0.9445162222544106, 0.17063032908425135, 0.20110591438189673, 
0.8392299590767177, 0.2841838551284578, 0.48562600723583027, 
0.15468445000916797, 0.4314435745393854, 0.11913358976315869, 
0.6793348370697525] 
+0

Tak to zadziała. Dzięki – zingy

0

Wydaje się listowych byłoby dość użyteczne tutaj.

mylist = [x/n for x in range(n)] 

Coś takiego? Mój zardzewiały Python.

+0

Myślę, że to zadziała. Dziękuję – zingy

+1

Jeśli chcesz mieć listę 0, to tak, będzie działać idealnie. Integer division ftl! – geoffspear

+0

Myślę, że w ostatnich wersjach Pythona to naprawdę działa dobrze. Czy nie musisz używać // b, aby uzyskać podział liczb całkowitych? Proszę to sprawdzić, Wooble. – Patrick87

5
for i in range(100): 
    i /= 100.0 
    print i 

Zobacz także decimal.

1
def float_range(start, end, increment): 
    int_start = int(start/increment) 
    int_end = int(end/increment) 
    for i in range(int_start, int_end): 
     yield i * increment 
+0

Dzięki, ale nie ma żadnego konkretnego przyrostu. To tylko losowa wartość pomiędzy 0 a 1. – zingy

0
>>> from decimal import Decimal 
>>> [Decimal(x)/10 for x in xrange(11)] 
[Decimal("0"), Decimal("0.1"), Decimal("0.2"), Decimal("0.3"), Decimal("0.4"), Decimal("0.5"), Decimal("0.6"), Decimal("0.7"), Decimal("0.8"), Decimal("0.9"), Decimal("1")] 

Edit, zważywszy na komentarz Mark losowej za odpowiedź:

Jeśli naprawdę nie chcesz szereg płynnie wzrastających, ale raczej losową liczbą między 0 a 1, należy random.random().

+0

@ Wooble hhmm Przypuszczam, że random.random() działa idealnie. Dzięki – zingy

0

Będzie to numer wyjścia dziesiętny między 0 do 1 z wielkością kroku 0.1

import numpy as np 
mylist = np.arange(0, 1, 0.1) 
+0

przydatna funkcja! ale myślę, że op zmienił pytanie, aby określić, że zapisy muszą być losowe, podczas gdy arange wykona uporządkowaną serię. – navicore

Powiązane problemy