Math.sqrt(-1)没有错误

Hig*_*ler 1 python

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

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)

NPE*_*NPE 7

    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)

  • 虽然负数存在平方根,但"平方根"没有好的选择.将`sqrt(-1)`计算为'1j`是一个坏主意,因为你失去了某些有用的数学属性`sqrt`(例如乘法同态和连续性). (2认同)