2017-07-17 56 views
0
def sqrt(number): 
    number = root**2 
    return root 

def area_triangle(a, b, c): 
    x = (a+b+c)/2 
    result = x*(x-a)*(x-b)*(x-c) 
    print (sqrt(result)) 

area_triangle(4,5,6) 

这给了我某个姓名错误“NameError:名字‘根’没有定义”无math.sqrt一些平方根

我想这样做没有math.sqrt或root = number**(1/2) 如何我可以解决这个问题,而不使用这两个,为什么不发生同样的错误,因为“NameError:name'number'未定义”如果我使用替代方案?

+1

井根确实没有定义。应该是root = number ** 2或者你想在这里完成的事情。 – WilomGfx

+3

为什么你不想使用'math.sqrt'或者一半功率?我看到两个主要的原因可以避免这种情况:当你需要比'math.sqrt'和half-power所提供的15-17个有效数字更高的精度,或者你正在处理大整数并且你想要一个整数的精确答案平方根的一部分。 'decimal'模块处理第一种情况,对于第二种情况,您可以通过网络搜索来找到这样的功能。 –

+0

我想学习所有不同的方法,我不想只学习一种方法,并把其他人排除在外。 –

回答

4

Python不是一个方程求解器,就像Wolfram Alpha一样。它是一种执行你给它的指令的语言。

root = number**(1/2) 

是一条指令。它说:拿number,已经存在,并提高到1/2的力量;将结果命名为root

number = root**2 

也是一个指令,但不是你想要的。它说:取root,应该已经存在,并提高到第二力量;将结果命名为number。但root实际上并不存在,所以你得到一个错误。

你给出的两个选项是寻找平方根最明智的选择 - 不知道为什么要避开它们。当然,您可以自己实现一个平方根查找算法,但使用内置解决方案肯定更直接!一个小的变化可能是使用number**(.5)math.pow(number,1/2)(这当然相当于你的1/2)。