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 岁。这是怎么回事?

4

7 回答 7

3

您的平均值需要括号,如下所示:

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

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

于 2012-09-29T19:36:40.447 回答
3

实际上你的代码正在做这样的事情:

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

所以为了避免使用括号:

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

顺便说一句,不要eval()用于此:

>>> inp=input("enter 3 scores: ")
enter 3 scores: 1,5,6
>>> scores=list(map(int,inp.split(",")))
>>> scores
[1, 5, 6]
于 2012-09-29T19:36:51.293 回答
3

除法优先于加法,因此您应该使用括号:

average = (scores[0] + scores[1] + scores[2]) / 3
于 2012-09-29T19:37:09.627 回答
1

尝试

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

它被称为运算符优先级,在 python 中,/它比+.

想想看,你应该使用

average = sum(scores)/len(scores)

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

于 2012-09-29T19:36:36.323 回答
1

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

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

...你的答案是 30。

于 2012-09-29T19:41:07.120 回答
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 + ".")

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

于 2012-09-30T01:32:05.220 回答
0

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

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

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

average = (scores[0] + scores[1] + scores[2]) / 3
于 2012-09-29T19:36:36.573 回答