আপনি একটি সরকারি সংস্থার হয়ে কাজ করেন, যে সংস্থা একদল ব্যাংক ডাকাতের এনক্রিপ্টেড যোগাযোগ সংকেতের একটি ধারা আটক করেছে। সংকেতগুলোর মধ্যে রয়েছে অঙ্কের একটি দীর্ঘ ধারা। আপনার দলকে বিভিন্ন ডিজিটাল সিগন্যাল প্রসেসিং কৌশল ব্যবহার করে সংকেতগুলো বিশ্লেষণ করতে হবে এবং এমন কোনো প্যাটার্ন খুঁজে বের করতে হবে, যা কোনো ডাকাতির পরিকল্পনার ইঙ্গিত দিতে পারে।
আপনার কাজ হলো এনক্রিপ্টেড সিগন্যালে থাকা ডিজিটের দীর্ঘ ক্রমের মধ্যে প্যাটার্ন খোঁজা।
এখানে যে কৌশলটি ব্যবহার করবেন তার নাম হলো সবচেয়ে বড় সিরিজ গুণফল।
প্রথমে কয়েকটি পরিভাষা সংজ্ঞায়িত করি।
চলুন "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।কখনও কখনও এক্সেপশন রেইজ করা প্রয়োজন হয়। এটা করলে সবসময় একটি অর্থবহ এরর মেসেজ দেওয়া উচিত, যাতে বোঝা যায় এররের উৎসটি কী। এতে আপনার কোড আরও পাঠযোগ্য হয় এবং ডিবাগিংয়ে অনেক সাহায্য করে। যেসব ক্ষেত্রে আপনি জানেন এররের উৎসটি নির্দিষ্ট কোনো টাইপ হবে, সেখানে আপনি বিল্ট-ইন এরর টাইপগুলোর একটি রেইজ করা বেছে নিতে পারেন, তবে তবুও একটি অর্থবহ মেসেজ দিতে হবে।
এই নির্দিষ্ট অনুশীলনীতে যখন আপনার largest_product() ফাংশন অবৈধ ইনপুট পায়, তখন raise স্টেটমেন্ট ব্যবহার করে একটি ValueError "থ্রো" করা আবশ্যক। টেস্ট পাস হবে কেবল তখনই, যখন আপনি 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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।