Нас щойно найняли на посаду професора математики. Перший тиждень минув добре, але на другому тижні щось не так. Проблема в тому, що кожна відповідь, яку дають наші студенти, неправильна! На щастя, наші математичні навички допомогли нам зрозуміти, у чому річ: відповіді студентів справді правильні, але всі вони записані в системі з основою 2 (двійковій)! Дивовижно, але виявляється, що кожного тижня студенти використовують іншу основу. Щоб допомогти собі швидко перевіряти відповіді студентів, ми створимо інструмент для переведення між основами.
Перетворіть послідовність цифр в одній системі числення, що представляє число, на послідовність цифр в іншій системі числення, що представляє те саме число.
Спробуйте реалізувати перетворення самостійно. Не використовуйте щось інше, щоб виконати перетворення за вас.
У позиційній системі числення число з основою b можна розуміти як лінійну комбінацію степенів b.
Число 42, у системі з основою 10, означає:
(4 × 10¹) + (2 × 10⁰)
Число 101010, у системі з основою 2, означає:
(1 × 2⁵) + (0 × 2⁴) + (1 × 2³) + (0 × 2²) + (1 × 2¹) + (0 × 2⁰)
Число 1120, у системі з основою 3, означає:
(1 × 3³) + (1 × 3²) + (2 × 3¹) + (0 × 3⁰)
Так. Ці три числа вище позначають одне й те саме число. Вітаємо!
Іноді виникає потреба підняти виняток. Роблячи це, завжди варто додати змістовне повідомлення про помилку, яке вказує на її джерело. Це робить код зрозумілішим і суттєво допомагає під час налагодження. Якщо ми знаємо, що джерело помилки матиме певний тип, можна підняти один із вбудованих типів помилок, але все одно варто додати змістовне повідомлення.
У цій вправі потрібно використати інструкцію raise, щоб «викинути» ValueError для різних основ вхідних і вихідних даних. Тести пройдуть лише тоді, коли ми і зробимо raise для exception, і додамо до нього змістовне повідомлення.
Щоб підняти ValueError з повідомленням, запишіть повідомлення як аргумент типу exception:
# for input.
raise ValueError("input base must be >= 2")
# another example for input.
raise ValueError("all digits must satisfy 0 <= d < input base")
# or, for output.
raise ValueError("output base must be >= 2")
Зареєструйтеся на Exercism, щоб вивчати й опановувати Python, а також 17 концепцій146 вправ та справжнє наставництво від людей, і все це безкоштовно.