# Random number between 0 and 1?

## Question:

I want a random number between 0 and 1, like 0.3452. I used `random.randrange(0, 1)` but it is always 0 for me. What should I do?

`random.random()` does exactly that

``````>>> import random
>>> for i in range(10):
...     print(random.random())
...
0.908047338626
0.0199900075962
0.904058545833
0.321508119045
0.657086320195
0.714084413092
0.315924955063
0.696965958019
0.93824013683
0.484207425759
``````

If you want really random numbers, and to cover the range [0, 1]:

``````>>> import os
>>> int.from_bytes(os.urandom(8), byteorder="big") / ((1 << 64) - 1)
0.7409674234050893
``````

I want a random number between 0 and 1, like 0.3452

`random.random()` is what you are looking for:

From python docs:
random.random() Return the next random floating point number in the
range [0.0, 1.0).

And, btw, Why your try didn’t work?:

Your try was: `random.randrange(0, 1)`

From python docs:
random.randrange() Return a randomly selected element from range(start, stop, step). This is equivalent to choice(range(start, stop, step)), but doesn’t actually build a range object.

So, what you are doing here, with `random.randrange(a,b)` is choosing a random element from `range(a,b)`; in your case, from `range(0,1)`, but, guess what!: the only element in `range(0,1)`, is `0`, so, the only element you can choose from `range(0,1)`, is `0`; that’s why you were always getting `0` back.

You can use `random.uniform`

``````import random
random.uniform(0, 1)
``````

you can use use numpy.random module, you can get array of random number in shape of your choice you want

``````>>> import numpy as np
>>> np.random.random(1)
0.17425892129128229
>>> np.random.random((3,2))
array([[ 0.7978787 ,  0.9784473 ],
[ 0.49214277,  0.06749958],
[ 0.12944254,  0.80929816]])
>>> np.random.random((3,1))
array([[ 0.86725993],
[ 0.36869585],
[ 0.2601249 ]])
>>> np.random.random((4,1))
array([[ 0.87161403],
[ 0.41976921],
[ 0.35714702],
[ 0.31166808]])
>>> np.random.random_sample()
0.47108547995356098
``````

RTM

From the docs for the Python `random` module:

``````Functions for integers:

random.randrange(stop)
random.randrange(start, stop[, step])

Return a randomly selected element from range(start, stop, step).
This is equivalent to choice(range(start, stop, step)), but doesn’t
actually build a range object.
``````

That explains why it only gives you 0, doesn’t it. `range(0,1)` is ``. It is choosing from a list consisting of only that value.

Also from those docs:

``````random.random()
Return the next random floating point number in the range [0.0, 1.0).
``````

But if your inclusion of the `numpy` tag is intentional, you can generate many random floats in that range with one call using a `np.random` function.

This solution works!

`random.randrange(0,2)`

My variation that I find to be more flexible.

``````str_Key           = ""
str_FullKey       = ""
str_CharacterPool = "01234ABCDEFfghij~-)"
for int_I in range(64):
str_Key = random.choice(str_CharacterPool)
str_FullKey = str_FullKey + str_Key
``````
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.