你打算在你家附近的树林里建一座树屋,这样就能看日出日落了。
你从当地一家测绘公司拿到了数据,这些数据显示了地图上每个矩形区域内每棵树的高度。 你需要分析地图上的每个网格,为你的树屋找出合适的好树。
一棵好树要同时满足两点:
你的任务是找出所有可以搭建树屋的潜在树木。
数据公司以网格的形式提供数据,网格中显示着每棵树的高度。 网格的行代表东西方向,列代表南北方向。
合格的树必须是它所在那一行中最大的,同时是它所在那一列中最小的。
一个网格里可能一棵合格的树都没有。 也可能有一棵,甚至好几棵。
下面这个网格里恰好有一棵候选的树。
↓
1 2 3 4
|-----------
1 | 9 8 7 8
→ 2 |[5] 3 2 4
3 | 6 6 7 1
所以[2, 1]这个点(行:2,列:1)是搭建树屋的绝佳位置。
有时需要抛出异常。抛出异常时,应该始终附上一条有意义的错误消息,说明错误的来源。这样能让你的代码更易读,对调试也大有帮助。如果已知错误的来源会是某种特定类型,你可以选择抛出内置错误类型中的一种,但仍然要附上有意义的消息。
这道练习要求你在matrix不规则时,用 raise 语句“抛出”ValueError。只有既raise了这个exception,又附上消息,测试才会通过。
要抛出带消息的ValueError,就把消息写成exception类型的实参:
# if the matrix is irregular
raise ValueError("irregular matrix")