如何不用if语句实现Python成绩等级判定逻辑?
无if语句实现分数等级判定方案
首先先修正你现有if语句版本的两个小问题:一是变量赋值应该是65(题目要求),二是第三个分支里的markss拼写错误,修正后的代码如下:
mark = 65 if mark > 69: print(mark, "marks is a Distinction") elif 60 <= mark <= 69: print(mark, "marks is a Merit") elif 50 <= mark <= 59: print(mark, "marks is a Pass") else: print(mark, "marks is a Fail")
接下来提供两种不用if语句的实现方式:
方法一:利用列表索引映射
核心思路是根据分数所在区间,计算出对应的列表索引,直接从列表中取出等级:
mark = 65 # 按分数从低到高对应等级:<50, 50-59, 60-69, ≥70 grades = ["Fail", "Pass", "Merit", "Distinction"] # 通过计算得到索引:mark//10 后调整区间,再用max/min限制范围 index = min(max((mark // 10) - 4, 0), 3) print(mark, "marks is a", grades[index])
原理:
mark//10:65//10=6,55//10=5,45//10=4,75//10=7- 减4后:6-4=2,5-4=1,4-4=0,7-4=3
max(...,0)确保低于50时索引为0,min(...,3)确保高于70时索引为3
方法二:使用bisect模块匹配区间
bisect模块可以快速找到分数在区间列表中的插入位置,对应到等级:
import bisect mark = 65 # 划分分数区间的临界点:50,60,70 cutoffs = [50, 60, 70] grades = ["Fail", "Pass", "Merit", "Distinction"] # bisect_left找到插入点,对应等级索引 index = bisect.bisect_left(cutoffs, mark) print(mark, "marks is a", grades[index])
原理:
- 当mark<50时,插入点是0,对应"Fail"
- 50≤mark<60时,插入点是1,对应"Pass"
- 60≤mark<70时,插入点是2,对应"Merit"
- mark≥70时,插入点是3,对应"Distinction"
内容的提问来源于stack exchange,提问作者CeePee
相关产品推荐
相关产品推荐

