Треки
/
Python
Python
/
Вправи
/
Найбільший добуток у послідовності
Найбільший добуток у послідовності

Найбільший добуток у послідовності

Середня

Вступ

Ми працюємо в державній установі, яка перехопила серію зашифрованих сигналів звʼязку від групи банківських грабіжників. Сигнали містять довгу послідовність цифр. Нашій команді потрібно застосувати різні методи цифрового оброблення сигналів, щоб проаналізувати ці сигнали і виявити закономірності, які можуть указувати на підготовку пограбування.

Вказівки

Наше завдання - шукати закономірності в довгій послідовності цифр зашифрованого сигналу.

Техніка, яку ми тут застосуємо, називається найбільшим добутком серії.

Спершу визначмо кілька термінів.

  • вхідні дані: послідовність цифр, яку потрібно проаналізувати
  • серія: послідовність сусідніх цифр (тих, що стоять поруч одна з одною), яка міститься у вхідних даних
  • довжина: скільки цифр має кожна серія
  • добуток: те, що ми отримуємо, коли перемножуємо числа

Розгляньмо приклад із вхідними даними "63915".

  • Щоб утворити серію, беремо сусідні цифри з початкових вхідних даних.
  • Якщо ми працюємо з довжиною 3, можливих серій буде три:
    • "639"
    • "391"
    • "915"
  • Далі потрібно обчислити добуток кожної серії:
    • Добуток серії "639" дорівнює 162 (6 × 3 × 9 = 162)
    • Добуток серії "391" дорівнює 27 (3 × 9 × 1 = 27)
    • Добуток серії "915" дорівнює 45 (9 × 1 × 5 = 45)
  • 162 більше і за 27, і за 45, тож найбільший добуток серії для "63915" дає серія "639". Отже, відповідь - 162.

Повідомлення про винятки

Іноді потрібно викликати виняток. Роблячи це, варто завжди додавати змістовне повідомлення про помилку, яке вказує на джерело помилки. Це робить наш код зрозумілішим і значно спрощує налагодження. У ситуаціях, коли відомо, що джерело помилки матиме певний тип, можна викликати один із вбудованих типів помилок, але все одно варто додати змістовне повідомлення.

Ця вправа вимагає, щоб ми використали інструкцію raise і «кинули» ValueError, коли наша функція largest_product() отримує некоректні вхідні дані. Тести пройдуть лише тоді, коли ми і викличемо exception через raise, і додамо до нього повідомлення. Можна сміливо повторно використати код із вправи series!

Щоб викликати ValueError із повідомленням, передайте повідомлення як аргумент типу exception:

# span of numbers is longer than number series
raise ValueError("span must not exceed string length")

# span of number is negative
raise ValueError("span must not be negative")

# series includes non-number input
raise ValueError("digits input must only contain digits")
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Python Exercism

Час розпочати Найбільший добуток у послідовності?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Python, а також 17 концепцій146 вправ та справжнє наставництво від людей, і все це безкоштовно.