Python中的ValueError: math domain error

3
我正在编写一段代码,用于在Python中解决勾股定理问题。问题是,当我让代码尝试解决B时,总是会出现一个错误。
这是始终给我带来问题的部分:
bsqr = (int(c) ** 2) - (int(a) ** 2)
b = int(bsqr) / sqrt(bsqr)

我遇到了这个错误:

 Traceback (most recent call last):
 File "<pyshell#24>", line 1, in <module> pythag()
 File "C:\Python34\fact.py", line 156, in pythag
 b = int(bsqr) / sqrt(bsqr)
 ValueError: math domain error

什么导致了这个错误,我该如何修复它?

展示完整的代码。可能会出现除以0或类似的情况。 - Quintec
2
这可能太基础了,但一个非常有用的调试工具是将所有的变量打印出来。在这种情况下,print(a, c, bsqr)应该给你一个相当大的提示。 - DSM
2个回答

6
很可能是因为bsqr为负数,而对负数取平方根效果不好。
>>> import math
>>> math.sqrt(-1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error

请检查代数和输入。 c(斜边)始终应大于任何一条腿(ab)。


另外,顺便提一下,如果您输入的ac的值相等(在int截断之后),还可能出现ZeroDivisionError


我不同意! - jonrsharpe
@jonrsharpe -- 这个数学上是可行的,但是不能用 math.sqrt ;-)。不过还是个聪明的评论。 - mgilson

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接