1

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

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
4

2 回答 2

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

布尔运算短路。这意味着如果z > 0为假,math.sqrt(z)则不评估。因此没有错误。

PS 严格来说,负数的平方根存在并且是复数。像这样的函数scipy.sqrt()会很高兴地返回一个复杂的平方根:

>>> import scipy as sp
>>> sp.sqrt(-1)
1j
于 2013-04-14T21:40:54.793 回答
3

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

于 2013-04-14T21:40:52.870 回答