查看下面的代码,当我输入一个负数时,似乎没有错误,但是平方根不能为负,所以我不知道为什么会这样。
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
答案 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
小于或等于零,则不计算第二个表达式(平方根),因此您永远不会尝试取平方根,因此没有错误。