python - 如何在评分系统功能中简化重复的if-elif语句?

目标是构建一个程序,将分数从“0到1”系统转换为“F到A”系统:

  • 如果score >= 0.9将显示'A'
  • 如果score >= 0.8将显示'B'
  • 0.7,C
  • 0.6,D
  • 和低于该点的任何值,打印F

  • 这是构建它的方法,它可以在程序上运行,但是有些重复:
    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')
    

    我想知道是否有一种构建函数的方式,以便复合语句不会
    如此重复。

    我是一个初学者,但是会喜欢以下内容:
    def convertgrade(scr, numgrd, ltrgrd):
        if scr >= numgrd:
            return ltrgrd
        if scr < numgrd:
            return ltrgrd
    

    有可能吗

    这样做的目的是,稍后我们可以通过仅将scr,numbergrade和letter grade用作参数来调用它:
    convertgrade(scr, 0.9, 'A')
    convertgrade(scr, 0.8, 'B')
    convertgrade(scr, 0.7, 'C')
    convertgrade(scr, 0.6, 'D')
    convertgrade(scr, 0.6, 'F')
    

    如果可以传递更少的参数,那就更好了。

    最佳答案

    您可以使用bisect模块进行数字表查找:

    from bisect import bisect 
    
    def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):
         i = bisect(breakpoints, score)
         return grades[i]
    
    >>> [grade(score) for score in [33, 99, 77, 70, 89, 90, 100]]
    ['F', 'A', 'C', 'C', 'B', 'A', 'A']