如何在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
相关产品推荐
相关产品推荐

