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

如何在Python循环中过滤0-20范围外的成绩,不存入numpy数组

解决方法

你的核心需求是确保存入numpy数组的成绩必须在0-20之间,不符合的输入要被拒绝,直到用户输入合法值为止。先说说你现有代码的问题:

  • 第一个成绩没有做范围验证,直接存入
  • 后续循环里的条件判断逻辑错误:grade[0] and grade[item] < 20 等价于判断grade[0]不为0且grade[item]小于20,但grade[item]初始是0,所以这个条件一直为真,导致不管输入什么都会被存入
  • 没有处理输入小于0的情况,也没有要求用户重新输入错误值

下面是修正后的代码,完全满足需求:

import numpy as np

# 初始化长度为5的float类型数组
grades = np.zeros(5, dtype=float)

for i in range(len(grades)):
    while True:
        # 获取输入并转为浮点数
        try:
            score = float(input("输入成绩:"))
            # 验证范围
            if 0 <= score <= 20:
                grades[i] = score
                break  # 输入合法,跳出循环,处理下一个位置
            else:
                print("成绩必须在0-20之间,请重新输入!")
        except ValueError:
            print("请输入有效的数字!")

print(f"成绩列表:{grades}")
# 直接用numpy的内置函数,不用lambda更直观
min_grade = np.amin(grades)
max_grade = np.amax(grades)
print(f"最低分:{min_grade}")
print(f"最高分:{max_grade}")

代码说明:

  • 使用while True循环来持续获取输入,直到用户输入合法值为止
  • 加入try-except处理非数字输入的情况,避免程序崩溃
  • 明确判断0 <= score <= 20,确保成绩在合法范围内
  • 去掉了没必要的lambda表达式,直接调用numpy的amin和amax更清晰

测试的时候,如果输入25这类超出范围的值,程序会提示重新输入,直到输入0-20之间的数值才会存入数组,最终数组里的所有值都是符合要求的。

内容的提问来源于stack exchange,提问作者user23491889

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:52:33