Ми плануємо збудувати будиночок на дереві в лісі неподалік від нашого дому, щоб спостерігати за сходом і заходом сонця.
Ми отримали дані від місцевої геодезичної компанії про висоту кожного дерева в кожній прямокутній ділянці карти. Нам потрібно проаналізувати кожну сітку на карті, щоб знайти гарні дерева для нашого будиночка на дереві.
Гарне дерево має бути одночасно:
Наше завдання - знайти потенційні дерева, на яких можна збудувати будиночок.
Компанія з даних надає дані у вигляді сіток, які показують висоти дерев. Рядки сітки відповідають напрямку схід-захід, а стовпці - напрямку північ-південь.
Придатним буде дерево, найбільше у своєму рядку і водночас найменше у своєму стовпці.
У сітці може взагалі не бути хороших дерев. Або може бути одне, або навіть кілька.
Ось сітка, у якій є рівно одне дерево-кандидат.
↓
1 2 3 4
|-----------
1 | 9 8 7 8
→ 2 |[5] 3 2 4
3 | 6 6 7 1
Отже, точка [2, 1] (рядок: 2, стовпець: 1) - чудове місце для будиночка на дереві.
Іноді виникає потреба порушити виняток. Коли ми це робимо, варто завжди додавати змістовне повідомлення про помилку, щоб указати, у чому джерело помилки. Це робить код зрозумілішим і суттєво допомагає під час налагодження. Якщо ми знаємо, що джерело помилки буде певного типу, можна вибрати й порушити один із вбудованих типів помилок, але змістовне повідомлення все одно варто додати.
У цій вправі використайте інструкцію raise, щоб «кинути» ValueError, якщо matrix має неправильну форму. Тести пройдуть лише тоді, коли ми і застосуємо raise до exception, і додамо до нього повідомлення.
Щоб порушити ValueError з повідомленням, запишіть повідомлення як аргумент до типу exception:
# if the matrix is irregular
raise ValueError("irregular matrix")
Зареєструйтеся на Exercism, щоб вивчати й опановувати Python, а також 17 концепцій146 вправ та справжнє наставництво від людей, і все це безкоштовно.