温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python中不使用If-Elif 语句怎么判断某个数字所属的等级

发布时间:2021-11-04 16:04:04 来源:亿速云 阅读:305 作者:iii 栏目:web开发

这篇文章主要介绍“Python中不使用If-Elif 语句怎么判断某个数字所属的等级”,在日常操作中,相信很多人在Python中不使用If-Elif 语句怎么判断某个数字所属的等级问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中不使用If-Elif 语句怎么判断某个数字所属的等级”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

题目大意是:有从 A 到 F 的 5 个等级,现要判断某个数值(从 0 到 1 之间)所属的等级。举例,如数值 >= 0.9,则属于 A;若数值  >= 0.8,则属于 B;以此类推。

若使用 if-elif 语句,可能写成这样:

if scr >= 0.9:     print('A') elif scr >= 0.8:     print('B') elif scr >= 0.7:     print('C') elif scr >= 0.6:     print('D') else:     print('F')

此写法出现了很多重复的模式,不够简洁优雅。有什么更好的写法,来实现这个目的呢?

该问题下的回答挺多的,实现思路五花八门。我挑几个可读性比较好:

方法一:使用bisect模块(数字可调)

Python中不使用If-Elif 语句怎么判断某个数字所属的等级

方法二:使用 zip() 与 next()

Python中不使用If-Elif 语句怎么判断某个数字所属的等级

方法三:使用字典(仅适用于 Python 3.6 以上的有序字典)

Python中不使用If-Elif 语句怎么判断某个数字所属的等级

还有其它几个回答,虽然都能实现数字分级的目的,但是其可读性要差很多,因为它们要么需要你作计算和推理,要么就是引入了额外的变量。

感兴趣的话,你可在这个地址查看全部答案:https://stackoverflow.com/questions/61030617/how-can-i-simplify-repetitive-if-elif-statements

纵观全部答案后,我认为还是使用bisect的方法比较高效优雅,不愧是它获得了很高的赞同票。

这里简单分析下它的实现过程。

bisect是 Python 内置的标准库,实现了二分查找算法。所谓二分查找,也被称为“折半查找”(Binary Search),其基本思想是把有序排列的  n 个元素平均分成两半,然后将待查找的 x 与中间元素比较,若 x 小于中间元素,则将左半段二分,再将 x 与其中间元素比对,以此类推。

这是一个简单的图示例子:

Python中不使用If-Elif 语句怎么判断某个数字所属的等级

bisect库中的 bisect() 方法,查找元素 x 在一个升序序列中的插入点 i,使得插入点左侧的元素都小于等于 x,插入点右侧的元素都大于  x。

对照前面的例子:

from bisect import bisect   def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):      i = bisect(breakpoints, score)      return grades[i]

可以化简成两部分:

  • bisect([60, 70, 80, 90], score),返回插入点的值。假如 score 是 59,计算得出插入点在 60 的左侧,而  Python 列表的索引值是以 0 开始,所以返回插入点的值为 0;假如 score 是 60,计算得出插入点在 60 的右侧,即返回索引值为 1。

  • 'FDCBA'[i],返回索引值为 i 的字符。假如 i 是 0,得到“F”;假如 i 是 3,得到“B”……

二分查找算法是效率较高的算法,时间复杂度为 O(logn)。该题目的查找范围很小,所以时间效率差别不大。但是其写法称得上是  Pythonic,值得借鉴。

另外,再看看前面的方法三(使用字典),它的可读性很强,即顺次将 scr 与字典中的值比较(从高往低,即  0.9~0.5),以此得出对应的键值。(PS:它多分了一个“E”级,可去掉)

如果 Python 版本低于 3.6,则 grades.items() 会是无序的,将会破坏比较的顺序。为了兼容性,可以修改成  sorted(grades.items()):

Python中不使用If-Elif 语句怎么判断某个数字所属的等级

这种写法没有引入额外的库,使用的 items() 与 sorted() 都是基础知识(相比于方法二的 zip() 与  next()),简单实用,也非常值得推荐。

不管怎么说,反复使用 if-elif 语句的判断方式是挺笨拙的,必须改进。

到此,关于“Python中不使用If-Elif 语句怎么判断某个数字所属的等级”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI