首页 > 解决方案 > 哨兵值不起作用,程序运行得太早

问题描述

所以当我输入给我的值时,程序在它应该停止之前停止,它是 123 而不是 -1。我确实将 {while Grade_entered >=0 和 Grade_entered <= 100:} 替换为 {while grade_entered != '-1':} ,这是一个标记值,但如果我这样做,程序就不会运行。我还添加了 continue ,因为我认为如果我输入的数字不在 0 - 100 范围内,它会使程序继续运行,但这根本没有帮助。我的问题是我应该在哪里添加标记值{while grade_entered != '-1':} 以便在我插入 -1 后程序结束?

<您需要计算输入了多少及格分数。使用哨兵控制的 while 循环,该循环将要求用户输入学生成绩,直到输入值 -1。使用计数器变量来计算所有通过成绩的成绩,其中 50 是最低及格成绩。如果有任何成绩超出有效范围(0 到 100),则向用户显示错误消息,并且不要将该成绩视为通过(或有效)。我们还想看看有效成绩通过的百分比。>

# 1st Test Case
# 45
# 90
# 70
# 87
# 123      That is not a valid test grade!
# 100      You have entered 4 passing grades.
# -1       80.0% of the valid grades are passing.

count = 0
total = 0
grade_entered = 0
print('Enter test scores to average. Enter -1 to Quit:')

while grade_entered >= 0 and grade_entered <= 100:
    grade_entered = float(input(""))
    if grade_entered >= 0 and grade_entered <= 100:
        total += grade_entered
        count += 1
        continue
else:
    print('This is not a valid grade!')

print("You have entered " + str(count) + " passing grades.")
average = total / count
print("{:.2f}% of the valid grades are passing".format(average))

这是我得到的结果

Enter test scores to average. Enter -1 to Quit:
45
90
70
87
123
This is not a valid grade!
You have entered 4 passing grades.
73.00% of the valid grades are passing

标签: pythonpython-3.x

解决方案


使用 python 时进行正确的缩进很重要,你的 else 子句不再是 while 循环的一部分,因为它离得太远了。

整个事情看起来应该是这样的:

grade_entered = float(input(""))
while grade_entered != -1:
    if grade_entered >= 0 and grade_entered <= 100:
        total += grade_entered
        count += 1
        #continue this is unnecesarry
    else:
        print('This is not a valid grade!')
    grade_entered = float(input(""))

推荐阅读