On 14/03/2008, Scott Kerr <[EMAIL PROTECTED]> wrote: > Hello, > > I am also new to python and programming. Since two have already posted that > you need to import math modules to do square roots, I am curious. > > Why can you not use something like: > > >>>hypotenuse = hyp_squared**1/2 > > or > > >>>hypotenuse = hyp_squared**.5
Hmm, good question :-) I suppose there is no strong reason. The best I can offer is that for many people, the concept of a square root is more accessible through the name "sqrt", whereas fractional exponentiation requires a brief brain pause while they remember what it means. Hence Luke and I, who are familiar with the math module, more easily think "math.sqrt" than "x**0.5". And the same benefit might apply to a hypothetical reader of the code. Interestingly, using x**0.5 seems faster too: Morpork:~ repton$ python -m timeit -s "x = 2" "y = x**0.5" 1000000 loops, best of 3: 0.298 usec per loop Morpork:~ repton$ python -m timeit -s "import math" -s "x = 2" "y = math.sqrt(x)" 1000000 loops, best of 3: 0.487 usec per loop Morpork:~ repton$ python -m timeit -s "import math" -s "m = math.sqrt" -s "x = 2" "y = m(x)" 1000000 loops, best of 3: 0.371 usec per loop though the advantage vanishes if you need a function: Morpork:~ repton$ python -m timeit -s "m = lambda x: x**0.5" -s "x = 2" "y = m(x)" 1000000 loops, best of 3: 0.526 usec per loop (if you've never seen the timeit module before, it's a good way to benchmark short snippets of code. The -s option is used for non-benchmarked startup code. So, for example, ' python -m timeit -s "import math" -s "x = 2" "y = math.sqrt(x)"' means "import math, set x to 2, then run y=math.sqrt(x) many many times to estimate its performance". From the interpreter, type 'import timeit; help(timeit)' for more information) -- John. _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor