রহস্যময় Coinholt গ্রামে আপনি আপনার বেকারির কাউন্টারের পিছনে দাঁড়িয়ে আছেন, সদ্য তৈরি এক ব্যাচ পেস্ট্রি সাজাচ্ছেন। দরজা ক্যাঁচ করে খুলে যায়, আর ভিতরে ঢোকেন Denara, মানসম্পন্ন পণ্য চেনার তীক্ষ্ণ দৃষ্টিসম্পন্ন এক দক্ষ ব্যবসায়ী। দ্রুত একবেলা খাওয়ার পর সে কাউন্টারের ওপর দিয়ে আপনার দিকে একটি ঝিকমিকে মুদ্রা এগিয়ে দেয়, যার মান ১০০ ইউনিট।
আপনি হাসিমুখে মুদ্রাটি নিয়ে খাবারের মোট খরচের দিকে তাকান: ৮৮ ইউনিট। তার মানে আপনাকে খুচরা হিসেবে ১২ ইউনিট ফেরত দিতে হবে।
Denara প্রত্যাশাভরে হাত বাড়িয়ে দেয়। হাসিমুখে সে বলে, "আমাকে শুধু সবচেয়ে কম সংখ্যক মুদ্রা দিন। আমার থলি তো আগেই ভরা, আর পথে সেগুলো হারানোর ঝুঁকি নিতে চাই না।"
আপনি জানেন, আপনার হাতে কয়েকটি বিকল্প আছে। "খুচরার জন্য আমাদের কাছে Lumis (১০ ইউনিট মূল্যের), Viras (৫ ইউনিট মূল্যের) আর Zenth (২ ইউনিট মূল্যের) আছে।"
আপনি মনের মধ্যে দ্রুত সম্ভাবনাগুলো হিসাব করে ফেলেন:
"সবচেয়ে ভালো পছন্দ দুটি মুদ্রা: একটি Lumis আর একটি Zenth," বলে আপনি তাকে খুচরা দিয়ে দেন।
Denara হাসে, স্পষ্টই মুগ্ধ। "সবসময়ের মতোই আপনি ঠিক ধরেছেন।"
গ্রাহককে সবচেয়ে কম কয়টি মুদ্রা দিলে সেগুলোর মানের যোগফল সঠিক খুচরার পরিমাণের সমান হবে, তা নির্ধারণ করুন।
কখনও কখনও এক্সেপশন রেইজ করা প্রয়োজন হয়। আপনি যখন এটা করেন, তখন সবসময় একটি অর্থবহ এরর মেসেজ যোগ করা উচিত, যাতে বোঝা যায় এররের উৎসটা কী। এতে আপনার কোড আরও পাঠযোগ্য হয় এবং debugging-এ অনেক সাহায্য করে। যেসব ক্ষেত্রে আপনি জানেন যে এররের উৎস একটি নির্দিষ্ট টাইপ হবে, সেখানে আপনি বিল্ট-ইন এরর টাইপগুলোর একটি রেইজ করা বেছে নিতে পারেন, তবে তবুও একটি অর্থবহ মেসেজ যোগ করা উচিত।
এই নির্দিষ্ট অনুশীলনীতে আপনাকে raise স্টেটমেন্ট ব্যবহার করে একটি ValueError "থ্রো" করতে হবে, যখন প্রদত্ত কয়েন দিয়ে খুচরা করা সম্ভব হয় না। টেস্ট কেবল তখনই পাস করবে যখন আপনি exception raise করবেন এবং তার সাথে একটি মেসেজও যোগ করবেন।
একটি মেসেজসহ ValueError রেইজ করতে, মেসেজটি exception টাইপের আর্গুমেন্ট হিসেবে লিখুন:
# example when change cannot be made with the coins passed in
raise ValueError("can't make target with given coins")
Exercism-এ সাইন আপ করুন, Python ট্র্যাকের 17টি কনসেপ্ট146টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।