Minesweeper एक लोकप्रिय गेम है। इसमें खिलाड़ी को संख्यात्मक संकेतों की मदद से बम ढूँढने होते हैं। ये संकेत बताते हैं कि किसी खाने के ठीक आसपास (आड़े, खड़े या तिरछे) कितने बम हैं।
आपको एक तैयार माइनस्वीपर बोर्ड के खाली खानों में माइनों की संख्या भरनी है।
बोर्ड एक आयत होता है, जो ऐसे खानों से बना है जो या तो खाली (' ') होते हैं या माइन ('*')।
हर खाली खाने के लिए यह गिनिए कि उसके आसपास आड़ी, खड़ी और तिरछी दिशाओं में कितने माइन हैं। अगर खाली खाने के आसपास कोई माइन नहीं है, तो उसे खाली ही छोड़ दीजिए। वरना उसकी जगह उसके आसपास के माइनों की संख्या लिख दीजिए।
उदाहरण के लिए, आपको 5 x 4 का ऐसा बोर्ड मिल सकता है (यहाँ खाली जगहों को स्क्रीन पर दिखाने के लिए '·' अक्षर से दर्शाया गया है):
·*·*·
··*··
··*··
·····
आपके कोड को इसे इस तरह बदलना चाहिए:
1*3*1
13*31
·2*2·
·111·
कभी-कभी एक्सेप्शन उठाना ज़रूरी हो जाता है। ऐसा करते समय आपको हमेशा एक अर्थपूर्ण एरर संदेश शामिल करना चाहिए, जिससे पता चले कि एरर का स्रोत क्या है। इससे आपका कोड पढ़ने में आसान हो जाता है और डीबग करने में काफी मदद मिलती है। जिन स्थितियों में आप जानते हैं कि एरर का स्रोत एक तय तरह का होगा, वहाँ आप बिल्ट-इन एरर टाइप में से कोई एक उठा सकते हैं, लेकिन फिर भी अर्थपूर्ण संदेश शामिल करना चाहिए।
इस अभ्यास में आपको raise स्टेटमेंट का उपयोग करके ValueError को "फेंकना" होता है, तब जब board() फंक्शन को गलत फॉर्मैट का इनपुट मिलता है। टेस्ट तभी पास होंगे जब आपके कोड में raise भी हो और exception के साथ एक संदेश भी हो।
किसी संदेश के साथ ValueError उठाने के लिए, संदेश को exception टाइप के आर्गुमेंट के रूप में लिखिए:
# when the board receives malformed input
raise ValueError("The board is invalid with current input.")
Exercism पर साइन अप कीजिए और Python को 17 कॉन्सेप्ट146 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।
हम नेस्टेड for लूप, बाउंड जाँच आसान बनाने के लिए min/max का चतुर उपयोग, फंक्शनल पाइपलाइन और द्वि-आयामी मैट्रिक्स देखेंगे।