python数学域错误-sqrt [英] python math domain error - sqrt

查看:313
本文介绍了python数学域错误-sqrt的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是什么原因引起的问题?

What causes the problem?

from math import sqrt
print "a : "
a = float(raw_input())
print "b : "
b = float(raw_input())
print "c : "
c = float(raw_input())
d = (a + b + c)/2
s = sqrt(d*(d-a)*(d-b)*(d-c))
print "a+b+c =", a, b, c
print "Distr. =", d*2, "Area =", s

错误:

Traceback (most recent call last):
   File "C:/Python27/fájlok/háromszög terület2.py", line 11, in <module>
       s = sqrt(d*(d-a)*(d-b)*(d-c))
ValueError: math domain error

推荐答案

问题是 Heron的问题仅当两个数字的总和大于第三个数字时,公式才有效.您需要明确检查.

The problem is that the Heron's formula holds good only when the sum of the two numbers are greater than the third. You need to check that explicitly.

使用代码来实现此目的的更好方法是使用异常处理

A better way as you are using a code to do that is by using Exception handling

try:
    s = sqrt(d*(d-a)*(d-b)*(d-c))
    print "a+b+c =", a, b, c
    print "Distr. =", d*2, "Area =", s
except ValueError:
    print "Please enter 3 valid sides"

如果您想在没有try阻止的情况下进行操作,可以按照以下方式进行操作

If you want to do it without try block you can do it as

delta = (d*(d-a)*(d-b)*(d-c))
if delta>0:
    s = sqrt(delta)
    print "a+b+c =", a, b, c
    print "Distr. =", d*2, "Area =", s
else:
    print "Please enter 3 valid sides"

这篇关于python数学域错误-sqrt的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆