【问题标题】:Grade Mapping Using Bisect使用 Bisect 进行等级映射
【发布时间】:2020-03-13 01:37:22
【问题描述】:
from bisect import bisect

grades = "FEDCBA"
breakpoints = [30, 44, 66, 75, 85]  

def grade(total):
    return grades[bisect(breakpoints, total)]

print(grade(66))
print(list(map(grade, [33, 99, 77, 44, 12, 88])))

'''
C
['E', 'A', 'B', 'D', 'F', 'A']

[Program finished]'''

不是我的程序。恩基进口。 Bisect 模块支持以排序顺序维护列表,而无需在每次插入后对列表进行排序。 所以,当我们打电话给grade(66)。它将 66 传递给返回 C 的等级函数,如何? 第二个打印语句更令人困惑。 它是用列表映射功能等级。 如果我尝试打印,print (grades[bisect(breakpoints, grades)]), 我错了,

TypeError: '

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    您的代码为您提供的数据生成了正确的结果!

    断点列表[30, 44, 66, 75, 85]将字符串"FEDCBA"一分为二如下:

    If         grade < 30 then F 
    If   30 <= grade < 44 then E  
    If   44 <= grade < 66 then D
    If   66 <= grade < 75 then C 
    If   75 <= grade < 85 then B
    If   85 <= grade      then A
    

    因此print(grade(66)) 正确地导致C 的输出。

    同样,您的print(list(map(grade, [33, 99, 77, 44, 12, 88]))) 正确地产生了['E', 'A', 'B', 'D', 'F', 'A'] 的输出。

    现在关于您因为print (grades[bisect(breakpoints, grades)]) 而获得TypeError,看起来您打算改为使用grades[bisect(breakpoints, total)]。注意 total 而不是 grades 作为 bisect() 的第二个参数。

    这是另一个版本的工作代码,它将所有变量放在顶部,以便您可以更轻松地更改它们以进行测试:

    data_list = [33, 99, 77, 44, 12, 88]
    grade_string = 'FEDCBA'
    breakpoint_list = [30, 44, 66, 75, 85]
    def grade(total, breakpoints=breakpoint_list, grades=grade_string):
        i = bisect(breakpoints, total)
        return grades[i]
    
    print([grade(total) for total in data_list])
    

    输出是:

    ['E', 'A', 'B', 'D', 'F', 'A']
    

    【讨论】:

      【解决方案2】:
      from bisect import bisect
      
      grades = "FEDCBA"
      breakpoints = [95, 44, 66, 75, 85]  
      
      
      def grade(total):
          i = bisect(breakpoints, total)
          return grades[i]
      
      print("Original Data:", [grade(total) for total in breakpoints ])
      print("Data within print statement:",list(map(grade, [33, 99, 77, 44, 12, 88])))
      

      感谢斯科特, 原始数据:['A', 'D', 'C', 'B', 'A'] 打印语句中的数据:['F', 'A', 'B', 'D', 'F', 'A'] 我能够产生我想要用于学习目的的输出

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多