मुख्य सामग्री पर जाएं

पाठ 4: नेस्टेड लूप का उपयोग करना

पिछले पाठ में, आपने वीआर रोबोट को निर्देश देने के लिए एक प्रोजेक्ट बनाया था कि वह डिस्क मूवर प्लेग्राउंड में मौजूद तीनों नीली डिस्क को उठाकर नीले लक्ष्य तक ले जाए। इस पाठ में, आप नेस्टेड लूप का उपयोग करके डिस्क मूवर प्लेग्राउंड में प्रत्येक रंग की एक डिस्क को उठाकर उसके संबंधित रंगीन लक्ष्य में ले जाने के लिए एक प्रोजेक्ट बनाएंगे!

डिस्क मूवर प्लेग्राउंड का ऊपर से लिया गया दृश्य जिसमें प्रत्येक रंग की पहली डिस्क मिलान वाले रंग के लक्ष्य में दिखाई दे रही है। वीआर रोबोट हरे गोल के किनारे पर, निचले दाहिने कोने में, दाहिनी ओर की दीवार की ओर मुंह किए खड़ा है।

सीखने के परिणाम

  • लूप को नेस्ट करने का तरीका पहचानें।
  • नेस्टेड लूप के माध्यम से किसी प्रोजेक्ट के प्रवाह का वर्णन करें।
  • बताइए कि किसी प्रोजेक्ट में नेस्टेड लूप का उपयोग क्यों किया जाएगा।

नेस्टेड लूप क्या होते हैं?

इस पाठ्यक्रम की पिछली इकाइयों और पाठों में, आपने व्यवहारों को दोहराने के लिए नियंत्रण श्रेणी से लूप का उपयोग किया है, जैसे कि फ़ॉर लूप, व्हाइल लूप, और अनंत व्हाइललूप। एक लूप के अंदर दूसरा लूप रखने को 'नेस्टिंग' कहते हैं। नेस्टेड लूप उन परियोजनाओं में सहायक होते हैं जहां एक वीआर रोबोट एक ही व्यवहार को एक से अधिक बार दोहराता है, जैसे कि प्लेग्राउंड पर कई डिस्क को स्थानांतरित करना। नेस्टिंग लूप किसी प्रोजेक्ट को व्यवस्थित और संक्षिप्त कर सकते हैं, जिससे उसे समझना आसान हो जाता है। इससे कोड के संदर्भ और उद्देश्य को बेहतर ढंग से समझने में मदद मिल सकती है, साथ ही त्रुटियों की पहचान करना और किसी प्रोजेक्ट में आने वाली समस्याओं का निवारण करना भी आसान हो जाता है। 

उदाहरण के लिए, तीनों नीली डिस्क को नीले लक्ष्य तक ले जाने के लिए, एकलूप का उपयोग डिस्क को कई बार इकट्ठा करने की प्रक्रिया को दोहराने के लिए किया जा सकता है। यहां प्रदर्शित प्रोजेक्ट, पहले नीले डिस्क को नीले लक्ष्य तक ले जाने के लिए पाठ 3 के प्रोजेक्ट को लूप के अंदर रखता है, जिसमें पैरामीटर 3 पर सेट है। ध्यान दें कि पिछले प्रोजेक्ट के चार खंड for लूप के भीतर कैसे इंडेंट किए गए हैं।

def main():
    for repeat_count in range(3):
        #1. पहली डिस्क
        पर ड्राइव करें जबकि डाउन_आई.नियर_ऑब्जेक्ट() नहीं है:
            ड्राइवट्रेन.ड्राइव(फॉरवर्ड)
            प्रतीक्षा करें(5, एमएसईसी)
        ड्राइवट्रेन.स्टॉप()

        # 2. डिस्क उठाएँ
        मैग्नेट.एनर्जाइज़ (बूस्ट)

        # 3. लक्ष्य की ओर ड्राइव करें
        ड्राइवट्रेन.टर्न_टू_हेडिंग(180, डिग्री)
        जबकि फ्रंट_डिस्टेंस.गेट_डिस्टेंस(एमएम) > 200:
            ड्राइवट्रेन.ड्राइव(फॉरवर्ड)
            प्रतीक्षा करें(5, एमएसईसी)
        ड्राइवट्रेन.स्टॉप()

        # 4. डिस्क को लक्ष्य में गिराएँ
        magnet.energize(DROP)

        drivetrain.drive_for(REVERSE, 100, MM)
        drivetrain.turn_to_heading(0, DEGREES)

    wait(5, MSEC)

जब आप लूप को 'नेस्ट' करते हैं, तो बाहरी लूप यह नियंत्रित करता है कि आंतरिक लूप कितनी बार निष्पादित होगा।  इस प्रोजेक्ट में,वाला लूप बाहरी लूप है, और यह लूप में होने वाले व्यवहारों को तीन बार दोहराएगा।

ऊपर दिए गए प्रोजेक्ट में फॉर लूप को लाल बॉक्स में हाइलाइट किया गया है। मुख्य परिभाषा के नीचे इंडेंट किया गया, रेंज (3) कॉलन में दोहराव अंडरस्कोर गणना के लिए लूप की शुरुआत है, और परियोजना के चार खंड उसके नीचे इंडेंट किए गए हैं। प्रोजेक्ट के निचले भाग में मौजूद फॉर लूप कमांड के साथ ही एक वेट कमांड भी है, जो यह दर्शाता है कि लूप कहाँ समाप्त होता है।

भीतरी लूप वे लूप होते हैं जो बाहरी लूप के भीतर समाहित होते हैं। इस उदाहरण में,whileलूप (डिस्क और लक्ष्य तक ड्राइव करने के लिए) में से प्रत्येकआंतरिक लूप' है जो हर बार प्रोजेक्टके माध्यम से आगे बढ़ने पर निष्पादितहैऊपर दिए गए प्रोजेक्ट की ही तरह, इसमें प्रत्येक आंतरिक while लूप को लाल बॉक्स में हाइलाइट किया गया है। प्रोजेक्ट के पहले और तीसरे कमेंट सेक्शन में रोबोट पर लगे सेंसर का उपयोग करके डिस्क का पता चलने तक और फिर दीवार का पता चलने तक ड्राइव करने के लिए while लूप शामिल हैं।

आपकी जानकारी के लिए

VEXcode VR Python प्रोजेक्ट्स में इंडेंटेशन महत्वपूर्ण है। लूप को नेस्ट करते समय, आप वर्कस्पेस में मौजूद ग्रे इंडिकेटर लाइनों का उपयोग एक दृश्य सहायता के रूप में कर सकते हैं, ताकि यह सुनिश्चित हो सके कि आपका प्रोजेक्ट इच्छानुसार काम कर रहा है। प्रत्येक पंक्ति एक लूप की शुरुआत और अंत को दर्शाती है।

ऊपर दिखाए गए प्रोजेक्ट में, मार्गदर्शक रेखाओं को लाल बॉक्स में हाइलाइट किया गया है, जो प्रोजेक्ट के बाकी हिस्सों के संबंध में प्रत्येक आंतरिक लूप के इंडेंटेशन संरेखण को दर्शाता है। फॉर लूप की पंक्ति सीधे अंतिम वेट कमांड तक जाती है। और while लूप की प्रत्येक पंक्ति स्टॉप कमांड तक विस्तारित होती है।

नेस्टेड लूप प्रोजेक्ट का प्रवाह 

इस उदाहरण में, हर बार जबलूप चलता है, तो एक नीली डिस्क उठाई जाती है और नीले लक्ष्य पर वापस कर दी जाती है। 

पहले चरण के बाद, पहली नीली डिस्क को नीले लक्ष्य पर वापस कर दिया जाता है और वीआर रोबोट को दूसरी डिस्क को इकट्ठा करने के लिए तैयार कर दिया जाता है।

कार्यक्षेत्र में बाईं ओर ऊपर से दिखाई गई परियोजना की छवि और दाईं ओर दिखाई गई प्लेग्राउंड विंडो की छवि साथ-साथ दिखाई गई है। इस प्रोजेक्ट में फॉर लूप कमांड से लेकर पूरे प्रोजेक्ट के चारों ओर एक नारंगी तीर लिपटा हुआ है, जो फॉर लूप के पहले चरण को दर्शाता है। प्लेग्राउंड पर, पहली नीली डिस्क नीले गोल में है, और वीआर रोबोट शेष नीली डिस्क की ओर मुंह करके गोल के सामने वाले छोर पर स्थित है, जो पहले चरण के बाद रोबोट की स्थिति को दर्शाता है।

दूसरे चरण के बाद, दूसरी नीली डिस्क एकत्र कर ली जाती है और वीआर रोबोट को तीसरी डिस्क एकत्र करने के लिए तैयार कर दिया जाता है।

कार्यक्षेत्र में बाईं ओर ऊपर से दिखाई गई परियोजना की छवि और दाईं ओर दिखाई गई प्लेग्राउंड विंडो की छवि साथ-साथ दिखाई गई है। इस प्रोजेक्ट में फॉर लूप कमांड से लेकर पूरे प्रोजेक्ट के चारों ओर एक नारंगी तीर लिपटा हुआ है, जो फॉर लूप के दूसरे चरण को दर्शाता है। प्लेग्राउंड पर, नीले गोल में 2 नीली डिस्क हैं, और वीआर रोबोट शेष नीली डिस्क की ओर मुंह करके गोल के सामने वाले छोर पर स्थित है, जो दूसरे चरण के बाद रोबोट की स्थिति को दर्शाता है।

तीसरे चरण के बाद, तीसरी नीली डिस्क एकत्र कर ली जाती है, और वीआर रोबोट चलना बंद कर देता है। से तक चलने वाला लूप अब अपनी सीमा पूरी कर चुका है, इसलिए परियोजना पूरी हो गई है। 

कार्यक्षेत्र में बाईं ओर ऊपर से दिखाई गई परियोजना की छवि और दाईं ओर दिखाई गई प्लेग्राउंड विंडो की छवि साथ-साथ दिखाई गई है। इस प्रोजेक्ट में फॉर लूप कमांड से लेकर पूरे प्रोजेक्ट के चारों ओर एक नारंगी तीर लिपटा हुआ है, जो फॉर लूप के तीसरे चरण को दर्शाता है। प्लेग्राउंड पर, तीनों नीली डिस्क नीले गोल के अंदर हैं, और वीआर रोबोट गोल बॉक्स के ठीक बाहर गोल से दूर की ओर मुंह करके स्थित है, जो अंतिम पुनरावृति के बाद रोबोट की स्थिति को दर्शाता है।

 

इस पाठ के शेष भाग को जारी रखने के लिए अगला बटन चुनें।