strange behavior of math.sqrt() in new 3.0 version

Scott David Daniels Scott.Daniels at Acm.Org
Fri Dec 26 17:15:00 EST 2008


David Lemper wrote:
> I'm a newbee trying 3.0   Please help with  math.sqrt() 
> 
> At the command line this function works correctly 
>       >>> import math
>               n = input("enter a number > ")
>               s = math.sqrt(n)
>      An entry of 9 or 9.0  will yield 3.0

> Yet the same code in a script gives an error message
>      Script1
>                    import math
>                    n = input("enter a number > ")
>                    s = math.sqrt(n)
>  ... TypeError : a float is required
 >
> Strangely the above code runs fine in version 2.5  ( ? ) ...

OK, here's what's going on:
"at the command line" in 2.X, the builtin function input reads a string
and returns the eval of that string.  This is a bit of a safety issue.
I suspect when "it worked from the command line," you were using a 2.X
command line inadvertently.  in 2.X, you'll get similar errors if you
use "raw_input" instead of "input".

The "input" function in 3.0 is the same as the "raw_input" function
in 2.X.  I would suggest using:
     import math
     value = float(input("enter a number > "))
     root = math.sqrt(value)
     print('root(%s) == %s' % (value, root))

I avoid using single-letter variables except where I know the types
from the name (so I use i, j, k, l, m, n as integers, s as string,
and w, x, y, and z I am a little looser with (but usually float or
complex).

--Scott David Daniels
Scott.Daniels at Acm.Org



More information about the Python-list mailing list