المسارات
/
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() مُدخلات غير صالحة. ولن تنجح الاختبارات إلا إذا استخدمت 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")
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Python Exercism

مستعد لبدء أكبر جداء لمتتالية أرقام؟

سجّل في Exercism لتتعلّم وتتقن Python عبر 17 مفهومًا146 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.