You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python哨兵值失效程序提前退出,如何正确设置-1终止循环?

问题根源梳理
  • 原循环条件绑定了成绩有效范围,只要输入超出0-100就直接终止循环,自然无法实现只有输入-1才退出的逻辑
  • 你尝试写的while grade_entered != '-1'不生效是因为输入被转成了float类型,数值型的-1和字符串'-1'不可能相等,判断永远不成立
  • 原代码中else和while配对,只有循环正常终止才会执行错误提示,不符合输入无效成绩就立刻提示的要求
  • 原逻辑统计的是所有有效成绩的平均分,和需求要求的「及格成绩(>=50分)占有效成绩的比例」不匹配
修改后可运行代码
pass_count = 0
valid_count = 0
print('Enter test scores to average. Enter -1 to Quit:')

while True:
    # 先读输入,不提前转数值,方便判断哨兵值
    input_str = input("").strip()
    # 先判断是不是哨兵值
    if input_str == '-1':
        break
    # 转成浮点型判断有效性,兼容非数值输入的异常情况
    try:
        grade_entered = float(input_str)
    except:
        print('This is not a valid grade!')
        continue
    # 判断成绩范围是否有效
    if 0 <= grade_entered <= 100:
        valid_count += 1
        # 统计及格人数
        if grade_entered >= 50:
            pass_count +=1
    else:
        print('This is not a valid grade!')
        continue

# 避免无有效成绩时的除零错误
if valid_count == 0:
    print("No valid grades entered.")
else:
    print(f"You have entered {pass_count} passing grades.")
    pass_rate = (pass_count / valid_count) * 100
    print("{:.1f}% of the valid grades are passing".format(pass_rate))
核心修改说明
  • 循环改为while True,优先判断输入是否为哨兵值-1,匹配则直接跳出循环,保证只有输入-1才会终止程序
  • 先以字符串形式读取输入,判断完哨兵值后再转数值,避免类型不匹配导致的哨兵判断失效
  • 无效成绩(超范围/非数值)直接提示后用continue回到循环开头,不会终止程序
  • 新增及格成绩统计逻辑,按需求计算及格占比,同时添加了无有效成绩的异常防护

内容的提问来源于stack exchange,提问作者Jonathan Arias-Gomez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 03:36:02