शतरंज के बोर्ड पर दो रानियों की स्थिति दी गई है। बताइए कि वे ऐसी जगहों पर रखी हैं या नहीं कि एक-दूसरे पर हमला कर सकें।
शतरंज के खेल में एक रानी उन मोहरों पर हमला कर सकती है जो उसी पंक्ति, स्तंभ या विकर्ण पर हों।
शतरंज के बोर्ड को 8 गुणा 8 के ऐरे के रूप में दर्शाया जा सकता है।
अगर आपको बताया जाए कि सफेद रानी c5 पर है (शून्य से गिनती शुरू करने पर स्तंभ 2, पंक्ति 3) और काली रानी f2 पर है (शून्य से गिनती शुरू करने पर स्तंभ 5, पंक्ति 6), तो आप जान जाते हैं कि बोर्ड कुछ इस तरह दिखता है:
आप यह भी बता सकते हैं कि क्या ये रानियाँ एक-दूसरे पर हमला कर सकती हैं। इस स्थिति में जवाब हाँ होगा, क्योंकि दोनों रानियाँ एक ही विकर्ण पर हैं।
शतरंज के बोर्ड की यह तस्वीर habere-et-dispertire ने LaTeX और Ulrike Fischer के chessboard package की मदद से बनाई है।
कभी-कभी एक्सेप्शन उठाना ज़रूरी हो जाता है। ऐसा करते समय आपको हमेशा एक अर्थपूर्ण एरर संदेश देना चाहिए, जिससे पता चले कि एरर का स्रोत क्या है। इससे आपका कोड पढ़ने में आसान हो जाता है और डीबगिंग में काफी मदद मिलती है। जिन स्थितियों में आप जानते हैं कि एरर का स्रोत एक निश्चित टाइप का ही होगा, वहाँ आप पहले से मौजूद एरर टाइपों में से कोई एक उठाना चुन सकते हैं, लेकिन संदेश फिर भी अर्थपूर्ण होना चाहिए।
इस अभ्यास में यह ज़रूरी है कि आप raise स्टेटमेंट का इस्तेमाल करके ValueErrors "उठाएँ", अगर Queen कंस्ट्रक्टर को ऋणात्मक संख्याएँ दी जाएँ, या ऐसी संख्याएँ जो कोई मान्य पंक्ति या स्तंभ न हों। टेस्ट तभी पास होंगे जब आप exception को raise करें और उसके साथ एक संदेश भी दें। अगर can_attack() मेथड को दी गई दोनों रानियाँ एक ही जगह पर हों, तो आपको भी ValueError raise करना चाहिए।
संदेश के साथ ValueError उठाने के लिए, संदेश को exception टाइप के आर्गुमेंट के रूप में लिखिए:
# if the row parameter is negative
raise ValueError("row not positive")
# if the row parameter is not on the defined board
raise ValueError("row not on board")
# if the column parameter is negative
raise ValueError("column not positive")
# if the column parameter is not on the defined board
raise ValueError("column not on board")
# if both the queens are on the same location
raise ValueError("Invalid queen position: both queens in the same square")
Exercism पर साइन अप कीजिए और Python को 17 कॉन्सेप्ट146 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।