पाठ 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' शाखा कभी नहीं चलेगी। 
एक लूप जोड़ें और प्रोजेक्ट का परीक्षण करें।
- प्रोजेक्ट का परीक्षण करने से पहले, एक और कमांड जोड़ने की आवश्यकता है। इफ एल्स स्टेटमेंट केवल एक बार ही शर्त की जांच करेंगे और फिर स्टेटमेंट के बाहर अगले कमांड पर चले जाएंगे। यूनिट 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 रोबोट आगे बढ़ेगा। वीआर रोबोट प्रोजेक्ट की 'एल्स' शाखा को छोड़ देगा।
- ध्यान दें कि डिस्टेंस सेंसर का डेटा भी डैशबोर्ड में दिखाया जाता है। किसी वस्तु का पता चलने पर, दूरी का मान प्रदर्शित किया जाएगा।
हालाँकि, डायनेमिक कैसल क्रैशर प्लेग्राउंड के इस संस्करण में, जब प्रोजेक्ट शुरू होता है तो डिस्टेंस सेंसर किसी ऑब्जेक्ट का पता नहीं लगाता है -फाउंड_ऑब्जेक्ट कमांड की स्थिति गलत रिपोर्ट करती है। अब वीआर रोबोट प्रोजेक्ट की 'इफ' शाखा को छोड़ देगा और प्रोजेक्ट की 'एल्स' शाखा चलेगी, इसलिए वीआर रोबोट दाईं ओर मुड़ेगा।
- ध्यान दें कि डैशबोर्ड में डिस्टेंस सेंसर का मान > 3000 मिमी के रूप में दिखाया गया है। डिस्टेंस सेंसर 3000 मिलीमीटर (मिमी) की सीमा के भीतर वस्तुओं का पता लगा सकता है, इसलिए जब किसी वस्तु का पता नहीं चलता है, तो मान को (>) 3000 मिमी से अधिक के रूप में रिपोर्ट किया जाता है।
क्योंकि if else कथन एक अनंत while लूप के अंदर है, प्रोजेक्ट बारबार ifwhile लूप कीकी जाँच करनेलिए लूप के शीर्ष पर वापस चला यह चक्र अनंत काल तक चलता रहेगा, जिससे वीआर रोबोट को प्रति सेकंड सैकड़ों बार if elseस्थिति की जाँच करने का निर्देश मिलता रहेगा।
- ध्यान दें कि if elseस्टेटमेंट के अंदर ड्राइव और टर्न कमांड गैर-प्रतीक्षा कमांड हैं। नॉन-वेटिंग कमांड्स चलते समय प्रोजेक्ट के प्रवाह को नहीं रोकते हैं। एक गैर-प्रतीक्षा व्यवहार जो if else कथन में निष्पादित होता है (जैसे 'यदि वस्तु का पता चलता है तो आगे बढ़ें') स्थिति की जाँच होने तक जारी रहेगा, और केवल तभी बदलेगा जब स्थिति बदलेगी।
आपकी जानकारी के लिए
if elseस्टेटमेंट का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि शर्त की जाँच करते समय प्रोजेक्ट में केवल एक ही शाखा चलाई जाए। किसी भी समय केवल एक ही स्थिति या शर्त सत्य हो सकती है। इससे परियोजना अधिक कुशल हो जाती है।

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

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