为何符合循环条件的数值68未被添加到字典对应键中?
问题:分数分类时数值68被代码忽略
我正在按分数区间对考试成绩进行分类,并将其添加到字典的对应键中,但代码完全忽略了数值68。
原代码
import numpy as np exam_results = np.array( [ 42, 56, 59, 76, 43, 34, 62, 51, 50, 65, 66, 50, 46, 5, 79, 99, 51, 26, 35, 8, 34, 47, 64, 58, 61, 12, 30, 63, 20, 68 ] ) summarized_data = {'excellent': [], 'good': [], 'average': [], 'passable': [], 'failed': [] } count = 0 for er in exam_results: count += 1 if count < len(exam_results): if er >= 90: summarized_data["excellent"].append(int(er)) elif 70 <= er <= 89: summarized_data["good"].append(int(er)) elif 50 <= er <= 69: summarized_data["average"].append(int(er)) elif 20 <= er <= 49: summarized_data["passable"].append(int(er)) else: summarized_data["failed"].append(int(er)) for result in summarized_data: print(result, '-', summarized_data[result]) print(np.sort(exam_results))
运行结果
excellent - [99] good - [76, 79] average - [56, 59, 62, 51, 50, 65, 66, 50, 51, 64, 58, 61, 63] passable - [42, 43, 34, 46, 26, 35, 34, 47, 30, 20] failed - [5, 8, 12] [ 5 8 12 20 26 30 34 34 35 42 43 46 47 50 50 51 51 56 58 59 61 62 63 64 65 66 68 76 79 99]
预期结果(average键)
average - [56, 59, 62, 51, 50, 65, 66, 50, 51, 64, 58, 61, 63, 68]
问题原因
循环里的if count < len(exam_results)条件是核心问题:
- 数组共有30个元素,
len(exam_results)等于30 - 遍历到最后一个元素(也就是68)时,
count会递增到30,此时count < 30不成立,导致后续的分类逻辑完全没执行,68也就没被加入任何列表。
修复方案
直接删掉多余的count变量和错误的判断条件,遍历数组时不需要手动计数,直接处理每个元素即可:
import numpy as np exam_results = np.array( [ 42, 56, 59, 76, 43, 34, 62, 51, 50, 65, 66, 50, 46, 5, 79, 99, 51, 26, 35, 8, 34, 47, 64, 58, 61, 12, 30, 63, 20, 68 ] ) summarized_data = {'excellent': [], 'good': [], 'average': [], 'passable': [], 'failed': [] } for er in exam_results: if er >= 90: summarized_data["excellent"].append(int(er)) elif 70 <= er <= 89: summarized_data["good"].append(int(er)) elif 50 <= er <= 69: summarized_data["average"].append(int(er)) elif 20 <= er <= 49: summarized_data["passable"].append(int(er)) else: summarized_data["failed"].append(int(er)) for result in summarized_data: print(result, '-', summarized_data[result]) print(np.sort(exam_results))
修复后运行,average列表就会包含68,符合预期。
内容的提问来源于stack exchange,提问作者RicardoDLM
相关产品推荐
相关产品推荐

