[Tutor] random floats in a range greater than 0.0-1.0

Danny Yoo dyoo@hkn.eecs.berkeley.edu
Wed, 13 Feb 2002 14:06:11 -0800 (PST)


On Thu, 14 Feb 2002, kevin parks wrote:

> I see in the random module that you can get random integers with
> randrange and you can get 0-1.0 floats, but how does one get floats in
> a range (of say 0-100, 50-128, or whatever...), do you just use the
> regular random (0-1) floats and scale the output?

I think scaling would be the way to go on this one.  I can't think offhand
of a function in the random module that will do this, but cooking up such
a function should be too bad.

This sounded like a fun problem, so I've cooked up such a function.

*** Spoiler space ahead ***



















*** Spoiler space engaged ***

Here's a function called randfrange() that returns a random floating-point
number:

###
>>> import random
>>> def randfrange(a, b=None):
...     """Returns a random float in the range [a, b)."""    
...     if b == None:
...         a, b = 0, a
...     return random.random() * (b-a) + a
... 
>>> randfrange(50, 128)
97.318483168501587
>>> randfrange(50, 128)
81.658069841691457
>>> randfrange(2, 2)
2.0
>>> randfrange(2, 3)
2.1495229573274912
>>> randfrange(42, 43)
42.372700368345136
>>> randfrange(50)
2.7482513388830343
>>> randfrange(100)
24.518574974538375
###


Hope this helps!