看看下面的代码,当我输入一个负数时,似乎没有错误,但是平方根不能是负数,所以我不知道为什么会发生这种情况.
import math
d=[]
while True:
z=int(raw_input())
if (z>0 and math.sqrt(z)): d.append(int(z))
Run Code Online (Sandbox Code Playgroud)
闲置时:
math.sqrt(int(-1))
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
math.sqrt(int(-1))
ValueError: math domain error
Run Code Online (Sandbox Code Playgroud)
if (z>0 and math.sqrt(z)): ...
Run Code Online (Sandbox Code Playgroud)
布尔运算短路.这意味着如果z > 0为false,math.sqrt(z)则不进行评估.因此没有错误.
PS严格来说,负数的平方根存在且复杂.像scipy.sqrt()这样的函数会愉快地返回一个复杂的平方根:
>>> import scipy as sp
>>> sp.sqrt(-1)
1j
Run Code Online (Sandbox Code Playgroud)