बॉलिंग

बॉलिंग

मध्यम

निर्देश

बॉलिंग के खेल का स्कोर बनाइए।

बॉलिंग एक खेल है जिसमें खिलाड़ी एक भारी गेंद लुढ़काकर त्रिभुज के आकार में सजी पिन गिराते हैं। बॉलिंग के खेल का स्कोर दर्ज रखने के लिए कोड लिखिए।

बॉलिंग का स्कोर

एक खेल में 10 फ्रेम होते हैं। हर फ्रेम में एक या दो बार गेंद फेंकी जाती है, और फ्रेम शुरू होते समय 10 पिन खड़ी रहती हैं। फ्रेम का स्कोर निकालने के लिए तीन स्थितियाँ होती हैं।

  • ओपन फ्रेम वह है जिसमें उस फ्रेम का स्कोर 10 से कम दर्ज होता है। इस मामले में फ्रेम का स्कोर गिराई गई पिन की संख्या के बराबर होता है।

  • स्पेयर वह फ्रेम है जिसमें दूसरी बार गेंद फेंकने पर सभी दस पिन गिर जाती हैं। स्पेयर का कुल मान 10 और अगली बार गेंद फेंकने पर गिराई गई पिन की संख्या के जोड़ के बराबर होता है।

  • स्ट्राइक वह फ्रेम है जिसमें पहली बार गेंद फेंकने पर सभी दस पिन गिर जाती हैं। स्ट्राइक का कुल मान 10 और अगली दो बार गेंद फेंकने पर गिराई गई पिन की संख्या के जोड़ के बराबर होता है। अगर किसी स्ट्राइक के ठीक बाद दूसरा स्ट्राइक हो जाए, तो एक और गेंद फेंके जाने तक पहले स्ट्राइक का मान तय नहीं हो पाता।

यहाँ तीन फ्रेम का एक उदाहरण है:

फ्रेम 1 फ्रेम 2 फ्रेम 3
X (स्ट्राइक) 5/ (स्पेयर) 9 0 (ओपन फ्रेम)

फ्रेम 1 का स्कोर (10 + 5 + 5) = 20 है।

फ्रेम 2 का स्कोर (5 + 5 + 9) = 19 है।

फ्रेम 3 का स्कोर (9 + 0) = 9 है।

यानी इस समय तक का कुल जोड़ 48 है।

खेल का दसवाँ फ्रेम एक खास मामला है। अगर कोई खिलाड़ी स्पेयर या स्ट्राइक करता है, तो उसे क्रमशः एक या दो फिल बॉल मिलती हैं। फिल बॉल दसवें फ्रेम का कुल स्कोर निकालने के लिए ही होती हैं। फिल बॉल पर स्ट्राइक या स्पेयर होने से खिलाड़ी को और फिल बॉल नहीं मिलतीं। दसवें फ्रेम का कुल मान गिराई गई कुल पिन की संख्या के बराबर होता है।

X1/ (स्ट्राइक और स्पेयर) वाले दसवें फ्रेम का कुल मान 20 होता है।

XXX (तीन स्ट्राइक) वाले दसवें फ्रेम का कुल मान 30 होता है।

आवश्यकताएँ

बॉलिंग के खेल के स्कोर का हिसाब रखने के लिए कोड लिखिए। इस कोड में दो काम होने चाहिए:

  • जब भी खिलाड़ी गेंद फेंकता है, हर बार roll(pins : int) को कॉल किया जाता है। इसका आर्गुमेंट बताता है कि कितनी पिन गिरीं।
  • score() : int को खेल के बिलकुल अंत में ही कॉल किया जाता है। यह उस खेल का कुल स्कोर लौटाता है।

एक्सेप्शन संदेश

कभी-कभी एक्सेप्शन उठाना ज़रूरी होता है। ऐसा करते समय आपको हमेशा एक अर्थपूर्ण एरर संदेश शामिल करना चाहिए, जो बताए कि एरर का स्रोत क्या है। इससे आपका कोड पढ़ने में ज़्यादा आसान होता है और डीबगिंग में काफी मदद मिलती है। जिन स्थितियों में आप जानते हैं कि एरर का स्रोत एक निश्चित टाइप का होगा, वहाँ आप अंतर्निहित एरर टाइपों में से एक उठाना चुन सकते हैं, लेकिन फिर भी एक अर्थपूर्ण संदेश शामिल करना चाहिए।

इस विशेष अभ्यास में जब स्कोरिंग या खेल के नियमों का पालन नहीं होता, तब एरर "फेंकने" के लिए आपको raise स्टेटमेंट का उपयोग करना होगा। टेस्ट तभी पास होंगे जब आप exception को raise करेंगे और उसके साथ एक संदेश भी शामिल करेंगे।

संदेश के साथ ValueError उठाने के लिए, संदेश को exception टाइप के आर्गुमेंट के रूप में लिखिए:

# example when a bonus is attempted with an open frame
raise IndexError("cannot throw bonus with an open tenth frame")

# example when fill balls are invalid
raise ValueError("invalid fill balls")
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
Python Exercism

बॉलिंग शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और Python को 17 कॉन्सेप्ट146 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।