شما برای یک سازمان دولتی کار میکنید که مجموعهای از سیگنالهای ارتباطی رمزنگاریشده را از یک گروه سارق بانک رهگیری کرده است. این سیگنالها دنبالهای طولانی از رقمها را در خود دارند. تیم شما باید با استفاده از تکنیکهای مختلف پردازش سیگنال دیجیتال، این سیگنالها را تحلیل کند و الگوهایی را شناسایی کند که ممکن است نشاندهندهی برنامهریزی یک سرقت باشند.
وظیفهی شما این است که در دنبالهی طولانی ارقام سیگنال رمزنگاریشده به دنبال الگوها بگردید.
تکنیکی که قرار است اینجا از آن استفاده کنید، «بزرگترین حاصلضرب سری» نامیده میشود.
بیایید ابتدا چند اصطلاح را تعریف کنیم.
بیایید یک مثال را با ورودی "63915" بررسی کنیم.
3 کار میکنید، سه سری ممکن وجود خواهد داشت:
"639""391""915""639" برابر با ۱۶۲ است (6 × 3 × 9 = 162)"391" برابر با ۲۷ است (3 × 9 × 1 = 27)"915" برابر با ۴۵ است (9 × 1 × 5 = 45)"63915" از سری "639" میآید.
بنابراین پاسخ ۱۶۲ است.گاهی لازم است استثنا ایجاد کنید. وقتی این کار را میکنید، باید همیشه یک پیام خطای معنادار بگنجانید تا نشان دهید منشأ خطا چیست. این کار code شما را خواناتر میکند و بهطور چشمگیری به debug کمک میکند. در موقعیتهایی که میدانید منشأ خطا نوع مشخصی خواهد بود، میتوانید یکی از انواع خطای توکار را ایجاد کنید، اما باز هم باید پیامی معنادار همراه آن بگنجانید.
این تمرین بهطور خاص لازم میداند که هر وقت تابع largest_product() ورودی نامعتبر دریافت میکند، از دستور raise استفاده کنید تا یک ValueError را «پرتاب» کنید. testها فقط زمانی قبول میشوند که هم exception را raise کنید و هم پیامی همراه آن بگنجانید. با خیال راحت از کدتان در تمرین series دوباره استفاده کنید!
برای اینکه یک ValueError همراه با پیام raise کنید، پیام را بهعنوان آرگومان به نوع 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")