鞍点

鞍点

简单

简介

你打算在你家附近的树林里建一座树屋,这样就能看日出日落了。

你从当地一家测绘公司拿到了数据,这些数据显示了地图上每个矩形区域内每棵树的高度。 你需要分析地图上的每个网格,为你的树屋找出合适的好树。

一棵好树要同时满足两点:

  • 比东西两侧的每一棵树都高,这样你就能获得观赏日出和日落的最佳视野。
  • 比南北两侧的每一棵树都矮,从而尽量减少攀爬的高度。

说明

你的任务是找出所有可以搭建树屋的潜在树木。

数据公司以网格的形式提供数据,网格中显示着每棵树的高度。 网格的行代表东西方向,列代表南北方向。

合格的树必须是它所在那一行中最大的,同时是它所在那一列中最小的。

一个网格里可能一棵合格的树都没有。 也可能有一棵,甚至好几棵。

下面这个网格里恰好有一棵候选的树。

      ↓
      1  2  3  4
    |-----------
  1 | 9  8  7  8
→ 2 |[5] 3  2  4
  3 | 6  6  7  1
  • 第 2 行的值是 5、3、2 和 4,其中最大的是 5。
  • 第 1 列的值是 9、5 和 6,其中最小的是 5。

所以[2, 1]这个点(行:2,列:1)是搭建树屋的绝佳位置。

异常消息

有时需要抛出异常。抛出异常时,应该始终附上一条有意义的错误消息,说明错误的来源。这样能让你的代码更易读,对调试也大有帮助。如果已知错误的来源会是某种特定类型,你可以选择抛出内置错误类型中的一种,但仍然要附上有意义的消息。

这道练习要求你在matrix不规则时,用 raise 语句“抛出”ValueError。只有既raise了这个exception,又附上消息,测试才会通过。

要抛出带消息的ValueError,就把消息写成exception类型的实参:

# if the matrix is irregular
raise ValueError("irregular matrix")
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Python Exercism

准备好开始 鞍点 了吗?

注册 Exercism,借助 17 个概念146 个练习 和真人导师指导,学习并掌握 Python,全部免费。