基本的数学计算混淆

时间:2012-09-29 19:35:27

标签: python python-3.x

编写一个基本的数学程序来帮助我理解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.这里发生了什么?

7 个答案:

答案 0 :(得分:3)

你需要括号中的括号,如下:

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

否则,您只是将scores[2]除以3

答案 1 :(得分: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]

答案 2 :(得分:3)

Division优先于添加,因此您应该使用括号:

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

答案 3 :(得分:1)

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

它被称为运算符优先级,而在python中,/+“更强”。

来考虑一下,你应该使用

average = sum(scores)/len(scores)

它易于阅读,写作简短,而且更通用。

答案 4 :(得分:1)

您的代码根据基本算术优先级进行正确的计算,但您需要这样做:

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

...你的答案是30岁。

答案 5 :(得分: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 + ".")

这应该在执行时给你正确的结果。我希望这回答了你的问题。 :)

答案 6 :(得分:0)

这是基本的算术:加法前的除法。你实际上正在计算

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

相反,您需要使用括号来覆盖运算符的优先级:

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