如何使用信号值在while循环中平均用户输入?

时间:2019-02-27 17:21:04

标签: python python-3.x

对于课堂作业,我被要求创建一个程序,该程序使用while循环对多个用户输入的考试成绩进行平均。我想出了一个可以运行的程序,但是它不符合我的老师要求的特定标准。 我需要使用while循环来允许用户输入任意数量的考试分数,每行一个数字,直到输入前哨值。 我该如何使用while循环和9999的前哨值​​来更改此程序以获得相同的结果?

这是我到目前为止的情况。

scores=int(input("how many test scores will you enter: "))
total_sum=0
for n in range(scores):
    numbers=float(input("Enter exam score : "))
    total_sum+=numbers
avg=total_sum/scores
print("average of ", scores, " test scores is :", avg)

输出应如下所示

Enter exam score. 9999 to quit: 100
Enter exam score. 9999 to quit: 95.5
Enter exam score. 9999 to quit: 90
Enter exam score. 9999 to quit: 9999

These 3 scores average to : 95.16666667

3 个答案:

答案 0 :(得分:2)

认为最好的方法是将分数存储在列表中,然后在用户输入前哨值之后计算分数的平均值:

SENTINEL = float(9999)

scores = []
while True:
    number = float(input("Enter exam score (9999 to quit): "))
    if number == SENTINEL:
        break
    scores.append(number)

if not scores:
    print("You didn't enter any scores.")
else:
    avg = sum(scores)/len(scores)
    print("average of ", len(scores), " test scores is :", avg)

答案 1 :(得分:1)

有两种方法可以解决此问题。通用方法是保持所有分数的连续运行以及您已阅读的分数,然后检查下一个要阅读的分数是== 9999,以查看是否退出while循环

以下是一个快速版本:

num_scores = 0
total_sum = 0
shouldExit = False
while shouldExit is False:
    nextScore = float(input("Enter exam score : "))
    if nextScore == 9999: #find a way to do this that does not involve a == comparison on a floating-point number, if you can
        shouldExit = True
    if shouldExit is False:
        num_scores += 1
        total_sum  += nextScore
avg = total_sum / num_scores

看看这种方法如何为您工作

答案 2 :(得分:1)

获取输入后,您就可以退出for循环。

for n in range(scores):
    c = int(Input('Enter test score, enter 9999 to break'))
    if c == 9999:
       break;
    scores += c

至少是这样的事情。