2017-07-17 66 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)。