<p>下面是两个Python解决方案。作为一个学习问题,有一些有趣的地方需要理解:带元组键的字典、迭代字典项、生成器表达式、类继承。你知道吗</p>
<p>这不是构建代码的唯一方法。另一种方法是设置边界分数序列,如<a href="https://stackoverflow.com/a/48653351/9209546">@MartijnPeter's answer</a>。然而,这些都是可读的、性能合理的解决方案。你知道吗</p>
<p>在这两种情况下,请注意代码中缺少的<code>return</code>语句的重要性。默认情况下,Python返回<code>None</code>。你知道吗</p>
<p><strong>功能性</strong></p>
<pre><code>def grade(mark):
grds = {(75, 100.1): 'First',
(70, 75): 'Upper Second',
(60, 70): 'Second',
(50, 60): 'Third',
(45, 50): 'F1 Supp.',
(40, 45): 'F2',
(0, 40): 'F3'}
return next(v for k, v in grds.items() if k[0] <= mark < k[1])
</code></pre>
<p><strong>面向对象</p>
<p>python的美妙之处在于它在某种程度上结合了面向对象和函数式编程。考虑以下解决方案。效率与上述类似,但它引入了一个构造,即继承自<code>dict</code>的子类<code>dict_range</code>,可以在其他场景中轻松重用。你知道吗</p>
<pre><code>class dict_range(dict):
def __getitem__(self, value):
return next(self.get(k) for k in self.keys() if k[0] <= value < k[1])
def grade(mark):
grds = dict_range({(75, 100.1): 'First',
(70, 75): 'Upper Second',
(60, 70): 'Second',
(50, 60): 'Third',
(45, 50): 'F1 Supp.',
(40, 45): 'F2',
(0, 40): 'F3'})
return grds[mark]
</code></pre>