二分探索で数字を仕分け
ちょっと面白いコードを見つけました。と言ってもPythonの公式リファレンスに載ってるものですが。
>>> 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']
bisectは二分探索のためのモジュールです。 ですがよくある使い方とは違いますね。
この場合、score
(例えば89)がbreakpoints
のどこに入るかを探します。
そうしてi
には3が入り、grades[3]
、すなわちBが結果に出る、と。
条件分岐を一度も使わない書き方がスマートですね。