कोइनहोल्ट के रहस्यमय गाँव में आप अपनी बेकरी के काउंटर के पीछे खड़े हैं और पेस्ट्रियों की एक ताज़ा खेप सजा रहे हैं। दरवाज़ा चरमराकर खुलता है, और अंदर डेनारा आती है, जो गुणवत्ता वाले सामान की परख रखने वाली एक कुशल व्यापारी है। जल्दी से खाना खा लेने के बाद वह काउंटर पर एक चमकता सिक्का सरका देती है, जिसकी वैल्यू 100 इकाई है।
आप मुस्कुराते हुए सिक्का लेते हैं और खाने की कुल कीमत पर नज़र डालते हैं: 88 इकाई। इसका मतलब है कि आपको 12 इकाई का बाकी लौटाना है।
डेनारा उम्मीद भरी नज़र से अपना हाथ आगे बढ़ाती है। "मुझे बस सबसे कम सिक्के दीजिए," वह मुस्कुराते हुए कहती है। "मेरी थैली पहले से भरी हुई है, और मैं रास्ते में उन्हें खो देने का जोखिम नहीं लेना चाहती।"
आप जानते हैं कि आपके पास कुछ विकल्प हैं। "बाकी के लिए हमारे पास लुमिस (10 इकाई मूल्य का), विरास (5 इकाई मूल्य का), और ज़ेंथ (2 इकाई मूल्य का) उपलब्ध हैं।"
आप मन ही मन जल्दी से संभावनाएँ निकालते हैं:
"सबसे अच्छा विकल्प दो सिक्के हैं: एक लुमिस और एक ज़ेंथ," आप कहते हैं और उसे बाकी सौंप देते हैं।
डेनारा मुस्कुराती है, साफ़ तौर पर प्रभावित। "हमेशा की तरह, आपने बिल्कुल सही किया।"
ग्राहक को दिए जाने वाले सिक्कों की सबसे कम संख्या तय कीजिए, जिनके मूल्यों का जोड़ बाकी राशि के बराबर हो।
कभी-कभी एक एक्सेप्शन उठाना ज़रूरी हो जाता है। ऐसा करते समय आपको हमेशा एक अर्थपूर्ण एरर संदेश भी देना चाहिए, जिससे पता चले कि एरर कहाँ से आई है। इससे आपका कोड पढ़ने में आसान रहता है और गलतियाँ ढूँढने में काफी मदद मिलती है। जब आपको पता हो कि एरर किसी खास टाइप की ही होगी, तो आप अंतर्निहित एरर टाइप में से कोई एक उठा सकते हैं, लेकिन तब भी अर्थपूर्ण संदेश देना न भूलें।
इस अभ्यास में आपको यह करना है: जब दिए गए सिक्कों से चेंज नहीं बनाया जा सकता, तब raise स्टेटमेंट की मदद से ValueError को "फेंकना" है। टेस्ट तभी पास होंगे जब आप raise का उपयोग करके exception उठाएँ और उसके साथ एक संदेश भी दें।
संदेश के साथ 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 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।