पाठ 2: परियोजना का निर्माण और परीक्षण करें
परियोजना का निर्माण जारी रखना
-
अब if elseकथन की शर्त निर्धारित करने की आवश्यकता है। महलों का पता लगाने के लिए दूरी सेंसर का उपयोग करने के लिए, found_objectकमांड का उपयोग किया जा सकता है। शर्त में found_objectकमांड जोड़ें। अब आपका प्रोजेक्ट कुछ इस तरह दिखना चाहिए:
def main(): # क्या दूरी सेंसर किसी महल का पता लगाता है? यदि front_distance.found_object(): # दूरी सेंसर द्वारा क्रैश महल का पता लगाया गया पास अन्यथा: # दूरी सेंसर का उपयोग करके महल खोजने के लिए मुड़ें पास -
यदि दूरी सेंसर को कोई वस्तु मिल जाती है, तो वीआर रोबोट को महल को गिराने के लिए आगे बढ़ना चाहिए। if else कथन की 'if' शाखा में driveकमांड जोड़ें, और VR रोबोट को आगे बढ़ाने के लिए पैरामीटर सेट करें। (यह आदेश 'pass'को प्रतिस्थापित करेगा).
def main(): # क्या दूरी सेंसर किसी महल का पता लगाता है? यदि front_distance.found_object(): # दूरी सेंसर द्वारा क्रैश महल का पता लगाया गया drivetrain.drive(FORWARD) अन्यथा: # दूरी सेंसर का उपयोग करके महल खोजने के लिए मुड़ें पास -
जब found_object कमांड गलत रिपोर्ट करता है, तो 'else' शाखा चलेगी, इसलिए VR रोबोट को खेल के मैदान पर एक महल खोजने के लिए मुड़ना होगा। 'else' शाखा के अंदर turn कमांड जोड़ें, और VR रोबोट को दाईं ओर मोड़ने के लिए पैरामीटर सेट करें।
def main(): # क्या दूरी सेंसर किसी महल का पता लगाता है? यदि front_distance.found_object(): # दूरी सेंसर द्वारा क्रैश महल का पता लगाया गया drivetrain.drive(FORWARD) अन्यथा: # दूरी सेंसर का उपयोग करके महल खोजने के लिए मुड़ें drivetrain.turn(RIGHT)
आपकी जानकारी के लिए
if elseकथन की 'else' शाखा किसी प्रोजेक्ट में केवलif elseकथन के भाग के रूप में कार्य करती है। जबकि आपके पासifकथन अकेले हो सकता है, VEXcode VR पायथन में 'else' कथन नहीं है। 'else' शाखा तब चलाई जाती है जब 'if' शाखा की शर्त पूरी नहीं होती। बिना किसी परिभाषित शर्त ('यदि' शाखा) के, 'अन्यथा' शाखा कभी नहीं चलेगी। 
लूप जोड़ें और प्रोजेक्ट का परीक्षण करें
- परियोजना का परीक्षण करने से पहले, एक और कमांड जोड़ने की आवश्यकता है। If else कथन, कथन के बाहर अगले कमांड पर जाने से पहले केवल एक बार स्थिति की जांच करेंगे। यूनिट 7 में, वीआर रोबोट को डाउन आई सेंसर की स्थिति की बार-बार जांच करने का निर्देश देने के लिए परियोजना में एक अनंतwhile लूप जोड़ा गया था। यह सुनिश्चित करने के लिए कि दूरी सेंसर स्थिति की बार-बार जांच की जा रही है , एक अनंत while लूप खींचें या टाइप करें, फिरif elseकथन को अनंतwhile लूप के अंदर कॉपी करें। अब आपका प्रोजेक्ट कुछ इस तरह दिखना चाहिए:
-
लूप में कमांड को कॉपी और पेस्ट करते समय इंडेंटेशन का ध्यान रखें, ताकि प्रोजेक्ट चलने पर अपेक्षित रूप से काम करे।
def main(): while True: # क्या दूरी सेंसर किसी महल का पता लगाता है? यदि front_distance.found_object(): # दूरी सेंसर द्वारा क्रैश महल का पता लगाया गया drivetrain.drive(FORWARD) अन्यथा: # दूरी सेंसर का उपयोग करके महल खोजने के लिए मुड़ें drivetrain.turn(RIGHT) wait(5, MSEC)
-
- यदि प्लेग्राउंड विंडो पहले से खुली नहीं है तो उसे खोलें। सुनिश्चित करें किडायनेमिक कैसल क्रैशर प्लेग्राउंडखुलता है, और प्रोजेक्ट चलाएं।

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

- परियोजना के प्रत्येक रन पर, वीआर रोबोट तब तक घूमता रहेगा जब तक कि दूरी सेंसर द्वारा किसी महल का पता नहीं लग जाता, फिर वह उस इमारत की ओर बढ़ेगा और उसे गिरा देगा।

- परियोजना के दौरान, वीआर रोबोट महल के किसी टुकड़े को किनारे तक धकेल सकता है और उसे खेल के मैदान से नीचे गिरा सकता है। ऐसा इसलिए है क्योंकि found_objectकमांड अभी भी रिपोर्ट कर रहा है कि VR रोबोट के सामने एक ऑब्जेक्ट है। जब यह आदेश सत्य बताता है, तो वीआर रोबोट आगे बढ़ता है, जिससे वीआर रोबोट खेल के मैदान से नीचे गिर जाता है।
यदि अन्यथा कथन के साथ परियोजना प्रवाह
if else कथन का उपयोग इसलिए किया जाता है ताकि VR रोबोट निर्णय ले सके। यदि बूलियन शर्त सत्य है, तो 'if' शाखा के अंदर के आदेश चलेंगे। यदि बूलियन स्थिति गलत है, तो 'else' शाखा के अंदर के आदेश चलेंगे।
उदाहरण के लिए, डायनेमिक कैसल क्रैशर प्लेग्राउंड के इस पुनरावृत्ति में, जब प्रोजेक्ट शुरू होता है तो डिस्टेंस सेंसर एक ऑब्जेक्ट का पता लगाता है -found_objectकमांड की स्थिति True रिपोर्ट करती है। अब परियोजना की 'if'शाखा चलेगी, और VR रोबोट आगे बढ़ेगा। VR रोबोट परियोजना की 'else' शाखा को छोड़ देगा।
- ध्यान दें कि दूरी सेंसर डेटा भी डैशबोर्ड में रिपोर्ट किया गया है। जब किसी वस्तु का पता लगाया जाएगा, तो दूरी का मान प्रदर्शित किया जाएगा।
हालाँकि, डायनामिक कैसल क्रैशर प्लेग्राउंड के इस पुनरावृत्ति में, जब प्रोजेक्ट शुरू किया जाता है तो डिस्टेंस सेंसर किसी ऑब्जेक्ट का पता नहीं लगाता है -found_object कमांड की स्थिति गलत रिपोर्ट करती है। अब VR रोबोट परियोजना की 'if' शाखा को छोड़ देगा, और परियोजना की 'else' शाखा चलेगी, इसलिए VR रोबोट दाईं ओर मुड़ जाएगा।
- ध्यान दें कि डैशबोर्ड में दूरी सेंसर का मान > 3000 मिमी बताया गया है। दूरी सेंसर 3000 मिलीमीटर (मिमी) सीमा के भीतर वस्तुओं का पता लगा सकता है, इसलिए जब किसी वस्तु का पता नहीं चलता है, तो मान (>) 3000 मिमी से अधिक के रूप में रिपोर्ट किया जाता है।
क्योंकि if else कथन अनंत while लूप के अंदर है, इसलिए प्रोजेक्ट if else कथन की स्थिति को बार-बार जांचने के लिए अनंतwhile लूप के शीर्ष पर वापस लूप करता है। यह लूप हमेशा के लिए जारी रहेगा, और वीआर रोबोट को निर्देश देगा कि वह if elseस्थिति को प्रति सेकंड सैकड़ों बार जांचे।
- ध्यान दें कि if elseकथन के अंदर drive और turn कमांड गैर-प्रतीक्षा कमांड हैं। गैर-प्रतीक्षा आदेश किसी परियोजना के प्रवाह को तब तक नहीं रोकते जब तक वह चल रही हो। एक गैर-प्रतीक्षा व्यवहार जो if else कथन में निष्पादित होता है (जैसे कि 'यदि ऑब्जेक्ट का पता चला है तो आगे बढ़ें') स्थिति की जाँच होने तक जारी रहेगा, और केवल तभी बदलेगा जब स्थिति बदलेगी।
आपकी जानकारी के लिए
if elseकथन का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि शर्त की जाँच होने पर परियोजना में केवल एक शाखा ही चले। किसी भी समय केवल एक ही उदाहरण या स्थिति सत्य हो सकती है। इससे परियोजना अधिक कुशल हो जाती है।

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

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