2012-09-29 114 views
0

編寫一個基本的數學程序來幫助我理解python數學計算。基本的數學計算混淆

如果我寫

x = 15 + 30 + 45 
print(x) 

我得到

90 

如果我寫

x = 90/3 
print(x) 

我得到

30.0 

但如果我寫

def avg3(): 
    print("This program will calculate the average of 3 scores") 
    scores = eval(input("enter 3 scores: ")) 
    average = scores[0] + scores[1] + scores[2]/3 
    avg = str(average) 
    print("The average of the input scores is " + avg + ".") 

avg3() 

和輸入

15, 30, 45 

返回什麼是

The average of the input scores is 60.0. 
當然,我很期待30這是怎麼回事

回答

3

你需要在你的平均括號,就像這樣:

average = (scores[0] + scores[1] + scores[2])/3 

否則,您只需將scores[2]除以3即可。

+0

好吧,現在我真的覺得自己像個白癡:-)。感謝您清理蜘蛛網。 – kjarsenal

1

嘗試

average = (scores[0] + scores[1] + scores[2])/3 

它被稱爲運算符優先級,並在蟒蛇,/+ 「更強」。

來仔細想想,你應該使用

average = sum(scores)/len(scores) 

很容易閱讀,短寫,比較一般。

+0

好的表情 – kjarsenal

0

這是基本算術:除法之前的加法。你實際計算

average = scores[0] + scores[1] + (scores[2]/3) 

相反,你需要使用括號來覆蓋操作符的優先級:

average = (scores[0] + scores[1] + scores[2])/3 
3

其實你的代碼做這樣的事情:

average = 15+30+(45/3) #that's because/has higher precedence than + 

所以要避免使用括號:

average = (scores[0] + scores[1] + scores[2])/3 

BTW不要使用eval()此:

>>> inp=input("enter 3 scores: ") 
enter 3 scores: 1,5,6 
>>> scores=list(map(int,inp.split(","))) 
>>> scores 
[1, 5, 6] 
+0

看起來更簡潔。謝謝。 – kjarsenal

+0

+1對「eval」說不# –

3

分部優先於添加,所以你應該使用圓括號:

average = (scores[0] + scores[1] + scores[2])/3 
1

你的代碼是根據基本的算術優先做正確的計算,但你需要這樣做:

(scores[0] + scores[1] + scores[2])/3 

...你的答案是30。

+2

哮喘患者的乘法優先權更高? :) – abarnert

+0

哦,真的可以..:第 –

1

所有你需要的做的是圍繞加括號:

average = scores[0] + scores[1] + scores[2] 

所以您的代碼將是這樣的:

average = (scores[0] + scores[1] + scores[2])/3 

根據Python(或任何其他編程語言)中的操作順序,劃分在索引操作符之前完成。所以,你真的在​​你的程序所做的是:

average = scores[0] + scores[1] + (scores[2]/3) 

因此,總體而言你完整的程序是:

def avg3(): 
print("This program will calculate the average of 3 scores") 
scores = eval(input("enter 3 scores: ")) 
average = (scores[0] + scores[1] + scores[2])/3 
avg = str(average) 
print("The average of the input scores is " + avg + ".") 

執行時,這應該給你正確的結果。我希望這回答了你的問題。 :)