[Tutor] random number generator

Alan Gauld alan.gauld at btinternet.com
Fri Oct 5 09:33:06 CEST 2007

"Jim Hutchinson" <jim at ubuntu-rocks.org> wrote

> program that "should" work but doesn't. It generates a random number
> between 1 and 2 out to 10 decimal places.

Ok, Here's the problem. You are trying to compare two floating
point numbers. But python stores data in binary and displays
it in decimal. A lot of decimal numbers cannot be exactly
represented in binary so what you see displayed is an
approximation of the actual number stored in memory.

> while (guess != number):

So when you try to compare the number you entered with
the number stored in memory they are not quite the same.
The normal way of dealing with this in programs is to define
a very small number (often called epsilon or e) and check if
your guess is plus or minus e from the target. So your
code would become

e = 0.0000000001
while not( guess - e < number < guess + e ):
    # ...your code here

I briefly mention this in the Raw Materials topic of my tutor
when discussing Real numbers


Alan Gauld
Author of the Learn to Program web site

More information about the Tutor mailing list