أنت تعمل لدى وكالة حكومية اعترضت مجموعة من إشارات اتصال مشفّرة صادرة عن مجموعة من لصوص البنوك. تحتوي هذه الإشارات على تسلسل طويل من الأرقام. ويحتاج فريقك إلى استخدام تقنيات متنوعة في معالجة الإشارات الرقمية لتحليل الإشارات وتحديد أي أنماط قد تدل على التخطيط لعملية سطو.
مهمتك هي البحث عن أنماط في التسلسل الطويل من الأرقام في الإشارة المشفَّرة.
التقنية التي ستستخدمها هنا تُسمّى أكبر حاصل ضرب لمتتالية.
لنعرّف بعض المصطلحات أولًا.
لنتبع مثالًا، مع المُدخل "63915".
3، فستكون هناك ثلاث متتاليات ممكنة:
"639""391""915""639" هو 162 (6 × 3 × 9 = 162)"391" هو 27 (3 × 9 × 1 = 27)"915" هو 45 (9 × 1 × 5 = 45)"63915" يأتي من المتتالية "639".
إذن الجواب هو 162.أحيانًا تحتاج إلى رفع استثناء. وعندما تفعل ذلك، ينبغي أن تُضمّن دائمًا رسالة خطأ ذات معنى توضّح مصدر الخطأ. فذلك يجعل الكود أكثر وضوحًا ويساعد كثيرًا في تصحيح الأخطاء. وإذا كنت تعرف أن مصدر الخطأ سيكون من نوع معيّن، يمكنك أن تختار رفع أحد أنواع الأخطاء المدمجة، لكن ينبغي مع ذلك أن تُضمّن رسالة ذات معنى.
يتطلب هذا التمرين تحديدًا أن تستخدم عبارة raise لكي «تُطلق» ValueError عندما تتلقى دالتك largest_product() مُدخلات غير صالحة. ولن تنجح الاختبارات إلا إذا استخدمت raise مع exception وضمّنت معه رسالة. ولا تتردد في إعادة استخدام الكود الذي كتبته في تمرين 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")
سجّل في Exercism لتتعلّم وتتقن Python عبر 17 مفهومًا146 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.