python平均测试分数

时间:2016-06-05 14:32:07

标签: python while-loop average

我试图编写一个程序来确定一些测试的平均值。测试次数会有所不同,但我不希望它最初是由用户输入设置的。我想使用while循环和一个零的sentinel值来停止输入。我希望平均值显示为三位小数,%符号紧跟在最后一位后面,如下所示... 样本运行: 输入考试成绩80 输入考试成绩70 输入测试分数90 输入测试分数88 输入测试分数0 平均值为82.000%

total =0
counter = 0

while True:
    entry = int(input('Enter test score:'))
    if entry ==0:
        break

    total += entry
    counter += 1
    average = (total/counter)

 print("The average score:",format(average, '.3f'),'%',sep='') 

6 个答案:

答案 0 :(得分:1)

While必须全部小写。

if entry == 0缺少冒号。

total += entrycounter += 1需要在循环中,因为它们必须在每次迭代时发生。

您是否尝试在发布此处之前运行您的代码?

答案 1 :(得分:0)

我至少看到这两个选项: 1.将值存储在数组中,然后在循环之后计算平均值。 2.在每个循环上迭代计算平均值

如果你期待大量的输入,我会去选项(2)。

关于格式化,这可能会有所帮助:https://docs.python.org/3/library/string.html#formatstrings

答案 2 :(得分:0)

它看起来并不像你尝试过,因为你的代码根本无法运行。但是,这是答案。您需要将结果存储在列表中,然后通过列表长度(分数)得到平均值的平均值。 .format方法允许您指定3个小数位。

scores = []
while True:
    entry = int(input('Enter test score: '))
    if entry == 0:
       break 
    scores.append(entry)


print('The average is', "{0:.3f}".format(float(sum(scores) / len(scores))))

答案 3 :(得分:0)

以下情况应该有效。

scores = []
while True:
    entry = input("Enter test score: ")
    if entry == '':
        break
    elif not entry.isnumeric():
        print("Scores must be numeric.")
    else:
        scores.append(int(entry))

average = sum(scores)/len(scores)
print("The average score is {:.03f}.".format(average))

平均值的计算方法是,将scores列表的总和除以scores中的元素总数。其余的只是逻辑,以确保用户输入数字分数,并在用户输入任何内容时退出(只需按返回没有文字)。

答案 4 :(得分:0)

total = 0
counter = 0

while True:
    entry = int(input("Enter Test score: "))
    if entry == 0: break
    total += entry   # this should be in while loop
    counter += 1

total = total * 1.0
if counter == 0: exit(1)
avg = total / counter
print("Average is: %3.f" % avg + '%')

total + = entry应该在while循环中,因为你想为每个收到的条目添加它。 希望有所帮助:)

答案 5 :(得分:0)

total =0
counter = 0

while True:
    entry = int(input('Enter test score:'))
    if entry ==0:
        break

total += entry
counter += 1
average = (total/counter)

print("The average score:",format(average, '.3f'),'%',sep='')