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

पाठ 2: प्रोजेक्ट बनाएं और उसका परीक्षण करें

परियोजना का निर्माण जारी है 

  • अब if elseस्टेटमेंट की स्थिति निर्धारित करने की आवश्यकता है। किलों का पता लगाने के लिए डिस्टेंस सेंसर का उपयोग करने के लिए, found_objectकमांड का उपयोग किया जा सकता है। शर्त में found_objectकमांड जोड़ें। अब आपका प्रोजेक्ट कुछ इस तरह दिखना चाहिए:

    def main():
    	# क्या दूरी सेंसर किसी किले का पता लगाता है?
    	
    	यदि front_distance.found_object():
    		# दूरी सेंसर द्वारा क्रैश कैसल का पता चला
    		पास
    		
    	अन्यथा:
    		# दूरी सेंसर का उपयोग करके कैसल खोजने के लिए मुड़ें
    		पास
  • यदि डिस्टेंस सेंसर को कोई वस्तु मिलती है, तो वीआर रोबोट को महल को गिराने के लिए आगे बढ़ना चाहिए। स्टेटमेंट 'if' में कमांड जोड़ें, और VR रोबोटआगे बढ़ाने के लिए पैरामीटर सेट करें। (यह कमांड 'पास' को प्रतिस्थापित करेगा)। 

    def main():
    	# क्या दूरी सेंसर किसी किले का पता लगाता है?
    	
    	यदि front_distance.found_object():
    		# डिस्टेंस सेंसर द्वारा क्रैश कैसल का पता चला
    		drivetrain.drive(FORWARD)
    		
    	अन्यथा:
    		# डिस्टेंस सेंसर का उपयोग करके कैसल खोजने के लिए मुड़ें
    		pass
  • जब found_object कमांड False रिपोर्ट करता है, तो 'else' शाखा चलेगी, इसलिए VR रोबोट को खेल के मैदान पर महल खोजने के लिए मुड़ना होगा। 'else' शाखा के अंदर turn कमांड जोड़ें, और VR रोबोट को दाईं ओर मोड़ने के लिए पैरामीटर सेट करें। 

    def main():
    	# क्या दूरी सेंसर किसी किले का पता लगाता है?
    	
    	if front_distance.found_object():
    		# डिस्टेंस सेंसर द्वारा क्रैश कैसल का पता चला
    		drivetrain.drive(FORWARD)
    		
    	else:
    		# डिस्टेंस सेंसर का उपयोग करके कैसल खोजने के लिए मुड़ें
    		drivetrain.turn(RIGHT)

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

if elseस्टेटमेंट की 'else' शाखा किसी प्रोजेक्ट में केवलif elseस्टेटमेंट के हिस्से के रूप में कार्य करती है। जबकि आपifस्टेटमेंट को अकेले रख सकते हैं, VEXcode VR Python में 'else' स्टेटमेंट नहीं है। 'इफ' ब्रांच की शर्त पूरी न होने पर 'एल्स' ब्रांच चलाई जाती है। बिना किसी परिभाषित शर्त ('if' शाखा) के, 'else' शाखा कभी नहीं चलेगी। पाइथन में सशर्त कथनों को प्रदर्शित करने वाले तीन कोड स्निपेट, जिनमें से प्रत्येक में एक शर्त के साथ एक if स्टेटमेंट और उसके बाद pass कीवर्ड शामिल है। पहले दो अंशों के ऊपर हरे रंग के सही का निशान है, जो सही उपयोग को दर्शाता है। पहले कोड स्निपेट में केवल एक if स्टेटमेंट है, जबकि दूसरे में एक if और एक else स्टेटमेंट दोनों हैं, जिनमें से प्रत्येक में pass कीवर्ड का उपयोग किया गया है। लाल क्रॉस से चिह्नित तीसरे अंश में केवल एक एल्स स्टेटमेंट है जिसमें पास लिखा है, जो गलत उपयोग को दर्शाता है, क्योंकि एक एल्स स्टेटमेंट एक इफ स्टेटमेंट के बाद आना चाहिए।

एक लूप जोड़ें और प्रोजेक्ट का परीक्षण करें।

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

      def main():
      
      	while True:
      		# क्या दूरी सेंसर किसी महल का पता लगाता है?
      	
      		if front_distance.found_object():
      			# डिस्टेंस सेंसर द्वारा क्रैश कैसल का पता चला
      			drivetrain.drive(FORWARD)
      		
      		else:
      			# डिस्टेंस सेंसर का उपयोग करके कैसल खोजने के लिए मुड़ें
      			drivetrain.turn(RIGHT)
      		
      		wait(5, MSEC)
  • यदि प्लेग्राउंड विंडो पहले से खुली नहीं है तो उसे खोलें। सुनिश्चित करें किडायनेमिक कैसल क्रैशर प्लेग्राउंडखुलता है, और प्रोजेक्ट चलाएँ। डायनामिक कैसल क्रैशर प्लेग्राउंड का ऊपर से लिया गया दृश्य दिखाता है कि केवल कुछ ही किले गिराए गए हैं। वीआर रोबोट खेल के मैदान में घूमने के बाद उसके ऊपरी दाएं कोने में है।
  • एक बार जब वीआर रोबोट कम से कम दो महल गिरा दे, तो प्लेग्राउंड को पुनः लोड करें और डायनामिक कैसल क्रैशर प्लेग्राउंड के किसी अन्य लेआउट पर प्रोजेक्ट चलाएं। प्लेग्राउंड इंटरफेस के साथ डायनामिक कैसल क्रैशर का ऊपर से लिया गया दृश्य। प्लेग्राउंड इंटरफेस के निचले बाएं कोने में स्थित रीसेट बटन को लाल रंग के बॉक्स से हाइलाइट किया गया है।
  • प्रोजेक्ट के रन पर, वीआर रोबोट तब तक घूमेगा जब तक कि डिस्टेंस सेंसर द्वारा एक महल पता नहीं चल जाता, फिर उस इमारत को गिराने के लिए उसकी ओर बढ़ेगा।डायनामिक कैसल क्रैशर प्लेग्राउंड का एक तिरछा दृश्य जिसमें वीआर रोबोट एक महल के टुकड़े को लाल सीमा रेखा के पार धकेलते हुए प्लेग्राउंड के किनारे से बाहर गिराता हुआ दिखाई दे रहा है।
  • प्रोजेक्ट के चलने के दौरान, वीआर रोबोट महल के एक टुकड़े को किनारे तक धकेल सकता है और वह प्लेग्राउंड से गिर सकता है। ऐसा इसलिए है क्योंकि found_objectकमांड अभी भी रिपोर्ट कर रहा है कि वीआर रोबोट के सामने एक ऑब्जेक्ट है। जब यह कमांड ट्रू रिपोर्ट करता है, तो वीआर रोबोट आगे बढ़ता है, जिसके परिणामस्वरूप वीआर रोबोट खेल के मैदान से गिर जाता है।

इफ एल्स स्टेटमेंट के साथ प्रोजेक्ट फ्लो

if else स्टेटमेंट का उपयोग इसलिए किया जाता है ताकि VR रोबोट निर्णय ले सके। यदि बूलियन शर्त सत्य है, तो 'if' शाखा के अंदर के कमांड चलेंगे। यदि बूलियन शर्त गलत है, तो 'else' शाखा के अंदर के कमांड चलेंगे।

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

  • ध्यान दें कि डिस्टेंस सेंसर का डेटा भी डैशबोर्ड में दिखाया जाता है। किसी वस्तु का पता चलने पर, दूरी का मान प्रदर्शित किया जाएगा।

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

  • ध्यान दें कि डैशबोर्ड में डिस्टेंस सेंसर का मान > 3000 मिमी के रूप में दिखाया गया है। डिस्टेंस सेंसर 3000 मिलीमीटर (मिमी) की सीमा के भीतर वस्तुओं का पता लगा सकता है, इसलिए जब किसी वस्तु का पता नहीं चलता है, तो मान को (>) 3000 मिमी से अधिक के रूप में रिपोर्ट किया जाता है। 

क्योंकि if else कथन एक अनंत while लूप के अंदर है, प्रोजेक्ट बारबार ifwhile लूप कीकी जाँच करनेलिए लूप के शीर्ष पर वापस चला यह चक्र अनंत काल तक चलता रहेगा, जिससे वीआर रोबोट को प्रति सेकंड सैकड़ों बार if elseस्थिति की जाँच करने का निर्देश मिलता रहेगा।This is the project's code snippet surrounded by an orange arrow that begins and ends on the while True: statement at the top of the code snippet. There is a note on the arrow that says Loops continuously, showing that anything nested in the while True loop will repeat forever.

  • ध्यान दें कि if elseस्टेटमेंट के अंदर ड्राइव और टर्न कमांड गैर-प्रतीक्षा कमांड हैं। नॉन-वेटिंग कमांड्स चलते समय प्रोजेक्ट के प्रवाह को नहीं रोकते हैं।  एक गैर-प्रतीक्षा व्यवहार जो if else कथन में निष्पादित होता है (जैसे 'यदि वस्तु का पता चलता है तो आगे बढ़ें') स्थिति की जाँच होने तक जारी रहेगा, और केवल तभी बदलेगा जब स्थिति बदलेगी।

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

if elseस्टेटमेंट का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि शर्त की जाँच करते समय प्रोजेक्ट में केवल एक ही शाखा चलाई जाए। किसी भी समय केवल एक ही स्थिति या शर्त सत्य हो सकती है। इससे परियोजना अधिक कुशल हो जाती है।

पाइथन प्रोजेक्ट कोड जिसमें if और else स्टेटमेंट को इंगित करने वाले तीर लगे हैं। तीरों के शीर्ष पर लिखा है "दूरी सेंसर की स्थिति की जाँच करता है" ताकि दूरी.found_object if स्टेटमेंट द्वारा स्थिति की जाँच दिखाई जा सके। यदि ऑब्जेक्ट का पता चलता है, तो if स्टेटमेंट के अंतर्गत कमांड निष्पादित होगी, लेकिन यदि ऑब्जेक्ट का पता नहीं चलता है, तो else स्टेटमेंट के अंतर्गत कमांड निष्पादित होगी।

वर्तमान परियोजना की तुलना इकाई 7 में बनाई गई परियोजना से करें।  यूनिट 7 प्रोजेक्ट में चार if कथनों का उपयोग किया गया है।

यूनिट 7 के प्रोजेक्ट कोड में, while True स्टेटमेंट से शुरू और खत्म होने वाले पूरे कोड के चारों ओर एक बड़ा नारंगी तीर बना हुआ है। नारंगी तीर पर एक नोट में लिखा है कि अनंत while लूप में निहित if स्टेटमेंट की बार-बार जांच की जाती है। while True स्टेटमेंट के अंदर हरे तीर प्रोजेक्ट के प्रवाह को दर्शाते हैं, जो अलग-अलग if स्टेटमेंट से शुरू होता है, जिसमें यह बताया जाता है कि क्या कोई निश्चित रंग दिखाई देता है और उसके अनुसार क्या व्यवहार किया जाना चाहिए, चाहे वह कोई व्यवहार करना हो या अगले if स्टेटमेंट पर जाना हो, और अंत तक जब तक कि सब कुछ एक बार फिर से लूप में न आ जाए।

जब किसी प्रोजेक्ट को कई if स्टेटमेंट के साथ चलाया जाता है, तो यह संभव हो सकता है कि कई शर्तें True (या False) रिपोर्ट करें क्योंकि प्रोजेक्ट अनंत while लूप में कमांड के माध्यम से चलता है। इस तरह के टकराव के कारण परियोजना रुक सकती है या धीमी गति से चल सकती है। 

दूसरे शब्दों में, किसी प्रोजेक्ट में कई ifस्टेटमेंट होना एक ऐसी सड़क पर यात्रा करने जैसा है जिसमें कई निकास रैंप हों। आप जहां जाना चाहते हैं, उसके आधार पर आपको अलग-अलग जगहों पर मुड़ना होगा। उदाहरण के लिए,स्कूल जा रहे होते, तो आप बाएँ मुड़ते; यदि दुकान जा रहे होते, आप दाएँ मुड़ते। लेकिन अगर आप स्कूल या दुकान नहीं जा रहे होते तो क्या होता? दोनों ही स्थितियों में 'गलत' रिपोर्ट आएगी, और आप सीधे रास्ते पर चलते रहेंगे। या फिर अगर आप स्कूल और दुकान दोनों जगह जा रहे हों तो क्या होगा? दोनों स्थितियां सही रिपोर्ट करेंगी, लेकिन आप एक ही समय में दो स्थानों पर मुड़ नहीं सकते। एक आरेख जिसमें एक धूसर रंग का टी-आकार का चौराहा दिखाया गया है, जिस पर तीन दिशात्मक तीर हैं - एक बाईं ओर, एक सीधे ऊपर और एक दाईं ओर। चौराहे के केंद्र में एक वीआर रोबोट है। आरेख के दाईं ओर कोड प्रारूप में दो सशर्त कथन हैं: यदि स्कूल जा रहे हैं: बाएं मुड़ें और यदि दुकान जा रहे हैं: दाएं मुड़ें। इफ स्टेटमेंट काले और नीले रंग के टेक्स्ट में लिखे गए हैं, जिसमें इफ स्टेटमेंट नीले रंग में है और दिशा-निर्देश भी नीले रंग में हैं।

 

सादृश्य को जारी रखने के लिए, एक यदि अन्यथाकथन सड़क पर एक चौराहे पर यात्रा करने जैसा है - यह आपको निर्णय लेने के लिए मजबूर करता है। यदिआप स्कूल जा रहे हैं, तो बाएँ मुड़ें; अन्यथादाएँ मुड़ें। आप कहीं भी जा रहे हों, आपको या तो बाएं मुड़ना होगा या दाएं। if elseस्टेटमेंट का उपयोग करने से ऊपर बताए गए बग से बचा जा सकता है, क्योंकि यह आपको निर्णय लेने के लिए बाध्य करेगा, क्योंकि किसी भी समय केवल एक ही शर्त सत्य हो सकती है।A diagram showing a gray Y-shaped intersection with two directional paths - one leading left and one leading right. In the center of the intersection is the VR Robot. Above the diagram is code showing conditional statements in code format: if going to school: Turn left and else: Turn right. The if and else statements are written in black and blue text, with if and else in blue and the directional instructions in lighter blue.

प्रश्न

पाठ की प्रश्नोत्तरी तक पहुँचने के लिए कृपया नीचे दिए गए लिंक का चयन करें।

गूगल डॉक / .docx / .pdf