এক সন্ধ্যায় হঠাৎ আপনার হাতে পড়ে গেল একটি পুরোনো নোটবুক, রহস্যময় আঁকিবুঁকিতে ভরা, যেন কেউ এক নেশায় কোনো একটি ভাবনার পেছনে ছুটে চলছিল। একটি পাতায় স্পষ্ট হয়ে উঠল একটি প্রশ্ন: প্রতিটি সংখ্যা কি নিজের পথ খুঁজে ১-এ পৌঁছাতে পারে? প্রশ্নটি জড়িয়ে ছিল কোলাটজ অনুমান নামের একটি ধাঁধার সঙ্গে, যা কয়েক দশক ধরে চিন্তাবিদদের হতবাক করে রেখেছে।
নিয়মগুলো ছিল আপাতদৃষ্টিতে সহজ। যেকোনো একটি ধনাত্মক ইন্টিজার বেছে নিন।
এরপর ফলাফলটি নিয়ে একই ধাপগুলো আবার করুন, এভাবে অনির্দিষ্টকাল চলতে থাকুক।
কৌতূহলী হয়ে আপনি পরীক্ষা করার জন্য ১২ নম্বরটি বেছে নিয়ে যাত্রা শুরু করলেন:
১২ ➜ ৬ ➜ ৩ ➜ ১০ ➜ ৫ ➜ ১৬ ➜ ৮ ➜ ৪ ➜ ২ ➜ ১
দ্বিতীয় সংখ্যা (৬) থেকে গুনতে শুরু করলে ১-এ পৌঁছাতে লেগেছিল ৯টি ধাপ, আর নিয়মগুলো প্রতিবার পুনরাবৃত্তি হওয়ার সঙ্গে সঙ্গে সংখ্যাটি বদলাতেই থাকল। শুরুতে ক্রমটি অনুমানযোগ্য মনে হচ্ছিল না, এদিক-ওদিক, ওপর-নিচ, সর্বত্র লাফিয়ে চলছিল। তবুও অনুমানটি দাবি করে, শুরুর সংখ্যা যা-ই হোক, শেষে আমরা সবসময় ১-এ পৌঁছাব।
এটা ছিল মুগ্ধকর, আবার একইসঙ্গে রহস্যজনক। কেন এটা সবসময় কাজ করে বলে মনে হয়? হতে পারে এমন কোনো সংখ্যা আছে, যেখানে প্রক্রিয়াটি ভেঙে পড়ে, চিরকালের জন্য লুপ করে ঘোরে, বা অসীমের দিকে পালিয়ে যায়? নোটবুকটি ইঙ্গিত দিচ্ছিল, এটি সমাধান করলে হয়তো গভীর কোনো কিছু প্রকাশ পাবে, আর এর রহস্য উন্মোচন করতে পারলেই আপনার জন্য অপেক্ষা করছে খ্যাতি, ভাগ্য আর ইতিহাসে এক স্থান।
একটি ধনাত্মক ইন্টিজার দেওয়া হলে, Collatz Conjecture-এর নিয়ম অনুসারে 1-এ পৌঁছাতে যতগুলো ধাপ লাগে, সেই সংখ্যাটি রিটার্ন করুন।
কখনও কখনও এক্সেপশন রেইজ করা প্রয়োজন হয়। এমন করলে আপনি সবসময় একটি অর্থবহ এরর মেসেজ দেবেন, যাতে বোঝা যায় এররের উৎসটি কী। এতে আপনার কোড আরও পাঠযোগ্য হয় এবং debug করতে অনেক সাহায্য মেলে। যে পরিস্থিতিতে আপনি জানেন এররের উৎসটি একটি নির্দিষ্ট টাইপ হবে, সেখানে আপনি বিল্ট-ইন এরর টাইপগুলোর একটি রেইজ করা বেছে নিতে পারেন, তবে তবুও একটি অর্থবহ মেসেজ দিতে হবে।
Collatz Conjecture কেবল কঠোরভাবে ধনাত্মক ইন্টিজার নিয়েই কাজ করে, তাই এই অনুশীলনীতে আশা করা হয় যে আপনি raise স্টেটমেন্ট ব্যবহার করবেন এবং প্রদত্ত মান শূন্য বা ঋণাত্মক ইন্টিজার হলে আপনার সমাধানে একটি ValueError "থ্রো" করবেন। testগুলো কেবল তখনই পাস করবে যদি আপনি exception টি raise করেন এবং তার সাথে একটি মেসেজও দেন।
মেসেজসহ একটি ValueError রেইজ করতে, মেসেজটি exception টাইপের আর্গুমেন্ট হিসেবে লিখুন:
# example when argument is zero or a negative integer
raise ValueError("Only positive integers are allowed")
Exercism-এ সাইন আপ করুন, Python ট্র্যাকের 17টি কনসেপ্ট146টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।