【问题标题】:python average test scorepython平均考试成绩
【发布时间】:2016-06-05 14:32:07
【问题描述】:

我正在尝试编写一个程序来确定数字测试的平均值。测试的数量会有所不同,但我不希望它最初由用户输入设置。我想使用一个while循环和一个零值的哨兵来停止输入。我希望平均值显示到小数点后三位,% 符号紧跟在最后一位数字之后,如下所示... 样品运行: 输入测试分数 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='') 

【问题讨论】:

  • 你用的是什么版本的 Python?
  • @AlexHall 我正在使用 python 3.5

标签: python while-loop average


【解决方案1】:

While 必须全部小写。

if entry == 0 缺少一个冒号。

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

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

【讨论】:

  • 它返回一个错误...说我没有定义真实...但我什至不确定这是否是获得我想要的结果的正确方法... @alexhall
  • 使用True,但你甚至没有在代码中的任何地方提到true。请参阅stackoverflow.com/help/how-to-ask
【解决方案2】:
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 += 条目应该在 while 循环内,因为您想为收到的每个条目添加它。 希望对您有所帮助:)

【讨论】:

  • 如果我有这样的打印行 print("The average score:",format(average, '.3f')) 我的百分号会去哪里?
  • 使用print( "The average score: {0}%".format(avg) ) 之类的格式。百分号不在输出中,因为它不存在于字符串中。格式的参数按该顺序替换为字符串。您可能想在打印之前调整精度:使用round(avg[, 3]
【解决方案3】:

看起来您甚至没有尝试过,因为您的代码根本无法运行。然而,这就是答案。您需要将结果存储在列表中,然后通过列表长度(分数数)上的列表总和获得平均值。 .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))))

【讨论】:

    【解决方案4】:

    以下应该可以工作。

    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 中的元素总数。其余的只是确保用户输入数字分数并在用户不输入任何内容时退出的逻辑(只需按 Return 而不输入文本)。

    【讨论】:

    • 如何将百分号添加到当前打印行,最后一个数字和符号之间没有空格?
    • @CzSzPzTz:在句号之前添加。 print("The average score is {:.03f}%.".format(average))
    【解决方案5】:
    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='') 
    

    【讨论】:

      猜你喜欢
      • 2021-05-03
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 2016-05-27
      • 1970-01-01
      相关资源
      最近更新 更多