Math.sqrt(-1)没有错误

时间:2013-04-14 21:38:46

标签: python

查看下面的代码,当我输入一个负数时,似乎没有错误,但是平方根不能为负,所以我不知道为什么会这样。

import math
d=[]
while True:
    z=int(raw_input())
    if (z>0 and math.sqrt(z)): d.append(int(z))

闲置时:

math.sqrt(int(-1))

Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    math.sqrt(int(-1))
ValueError: math domain error

2 个答案:

答案 0 :(得分:7)

    if (z>0 and math.sqrt(z)): ...

Boolean operations short-circuit。这意味着如果z > 0为false,则不会评估math.sqrt(z)。因此没有错误。

P.S。严格地说,负数的平方根存在并且是complex。像scipy.sqrt()这样的函数很乐意返回一个复杂的平方根:

>>> import scipy as sp
>>> sp.sqrt(-1)
1j

答案 1 :(得分:3)

没有错误,因为您正在检查以确保值为正。 and运算符短路,这意味着如果第一个条件为假,则不评估第二个条件。你写了if z>0 and math.sqrt(z)。如果z小于或等于零,则不计算第二个表达式(平方根),因此您永远不会尝试取平方根,因此没有错误。