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

पाठ 2: व्हाइल लूप का उपयोग करना

इस पाठ में, आप बम्पर सेंसर और whileलूप का उपयोग करके एक प्रोजेक्ट बनाएंगे। इस मिनी-चैलेंज में, आपको इन कौशलों का उपयोग करके वॉल मेज़ के आरंभ से अक्षर 'A' तक पहुंचना होगा।

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

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

  • यह पहचानें कि नॉन-वेटिंग कमांड के मामले में प्रोजेक्ट तब भी जारी रहता है, भले ही कमांड का व्यवहार अभी पूरा न हुआ हो।
  • यह पहचानें कि प्रतीक्षा कमांड परियोजना में आगे बढ़ने से पहले व्यवहार को पूरा करता है।
  • यह पहचानें कि whileलूप बार-बार एक बूलियन स्थिति की जाँच करेगा, और जब तक स्थिति True रिपोर्ट नहीं करती तब तक अगले कमांड पर नहीं जाएगा।
  • पहचानें कि whileलूप का उपयोग नॉन-वेटिंग कमांड (जैसे ड्राइव) के साथ सेंसर की स्थिति की जांच करने के लिए किया जाता है।
  • यह पहचानें कि notकीवर्ड बूलियन स्थिति के मान को True से False या False से True में बदल देता है। 
  • पहचानें कि left_bumper.pressedऔर right_bumper.pressedकमांड एक whileमें True या False मान लौटाते हैं
  • एक ऐसा प्रोजेक्ट बनाने का तरीका बताएं जिसमें वीआर रोबोट तब तक आगे बढ़ता रहे जब तक बम्पर सेंसर को दबाया न जाए।

जबकि लूप

while लूप बूलियन शर्तों को स्वीकार करता है। जबकिलूप बार-बार बूलियन स्थिति की जाँच करते हैं और प्रोजेक्ट प्रवाह को नियंत्रित करते हैं। whileलूप तब तक चलता रहेगा जब तक कि शर्त& सत्य है। while लूप, कंडीशन के False होने पर लूप से बाहर निकल जाएगा और लूप के बाहर अगले कमांड पर चला जाएगा।

VEXcode VR पायथन टूलबॉक्स। while कमांड को लाल रंग में हाइलाइट किया गया है, और एक तीर कोडिंग इंटरफेस की ओर इशारा कर रहा है। कोड def main():, while condition:, wait(5, MSEC) पढ़ता है, while कमांड को टूलबॉक्स से कोडिंग इंटरफ़ेस में ड्रैग करने के बाद।

असल में, एकwhileलूप वीआर रोबोट को यह बता रहा है कि वह एक व्यवहार करना जारी रखे जबकिएक निश्चित शर्त पूरी हो रही है। इसका तर्क इस परिदृश्य के समान है:जबसूरज चमक रहा हो, तो बाहर जाकर खेलो।तुम क्या करोगे? "सूरज चमक रहा है" की स्थिति यह निर्धारित करती है कि आपको कहाँ होना चाहिए। जब सूरज चमक रहा हो, तो यह स्थिति सत्य है, इसलिए आप बाहर खेलने जा सकते हैं। जब सूरज डूब जाता है, तो वह स्थिति गलत हो जाती है, इसलिए आप वापस अंदर आ जाएंगे।

बाईं ओर एक कोड का उदाहरण दिया गया है जिसमें लिखा है: while sun is shining:, play outside. while स्टेटमेंट के बाद लिखा है अंदर आओ दाईं ओर एक लड़की धूप वाले दिन अपने घर के बाहर साइकिल चला रही है। नियमानुसार, वह सूरज डूबने तक बाहर खेलेगी और फिर अंदर चली जाएगी।

व्हाइल लूप और वॉल मेज़ समस्या

वॉल मेज़ में मौजूद वीआर रोबोट के मामले में भी यही तर्क लागू होता है। जबकिबम्पर सेंसर दबाया नहीं गया है, वीआर रोबोट को आगे बढ़ते रहना चाहिए। जब इसे दबाया जाए, तो यह रुक जाना चाहिए या घूम जाना चाहिए। whileलूप का उपयोग गैर-प्रतीक्षा कमांड के साथ संयोजन में, जैसे कि ड्राइव, हम वीआर रोबोट को ठीक ऐसा करने के लिए कोड कर सकते हैं। हालाँकि, बम्पर सेंसर कमांड बम्पर सेंसर के दबाए जाने की स्थिति का उपयोग करते हैं (left_bumper.pressedया right_bumper.pressed)बम्पर सेंसर दबाए जाने पर VR रोबोट को चलाने के लिए कोड करने के लिए, हमेंनहींऑपरेटरउपयोगकी आवश्यकता

def main():
	while not condition:
		wait (5, MSEC)

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

नॉन-वेटिंग और वेटिंग कमांड यह निर्धारित करते हैं कि अगला कमांड कब किसी व्यवहार को शुरू करेगा। प्रतीक्षा कर रहे कमांड, जैसे ड्राइव_फॉरऔर टर्न_फॉर, प्रोजेक्ट में अगले कमांड पर जाने से पहले अपने व्यवहार को पूरा करते हैं। नॉन-वेटिंग कमांड, जैसे कि ड्राइवऔर टर्न, प्रोजेक्ट में अगले कमांड पर जाना जारी रखते हैं, भले ही नॉन-वेटिंग कमांड का व्यवहार पूरा न हुआ हो।

प्रतीक्षा आदेश

ड्राइवट्रेन.ड्राइव_फॉर(फॉरवर्ड, 200, एमएम)
ड्राइवट्रेन.टर्न_फॉर(राइट, 90, डिग्री)

बिना प्रतीक्षा वाले आदेश

ड्राइवट्रेन.ड्राइव(फॉरवर्ड)
ड्राइवट्रेन.टर्न(राइट)

नॉट कीवर्ड

नॉटकीवर्ड का उपयोग आमतौर परव्हाइललूप के साथ किया जाएगा, ताकि लूप के अंदर के कमांड तब तक निष्पादित हों जब तक कि शर्त False न हो जाए। 'सूरज चमक रहा है' वाले उदाहरण का उपयोग करते हुए, वही प्रभावऑपरेटर का उपयोग करके प्राप्त किया जा सकता है, न किऑपरेटर का। जब तक सूरजहै, अंदर आ जाओ।

बाईं ओर उदाहरण कोड का एक अंश दिखाया गया है, जो पढ़ता है: while not sun is shining:, come inside. while कमांड के बाद बाहर प्ले करें। दाईं ओर की तस्वीर में रात के समय एक घर दिखाया गया है, जब चंद्रमा दिखाई दे रहा है। इस नियम के अनुसार, जब तक सूरज नहीं निकल रहा होता, कोई भी बाहर नहीं खेलेगा और घर के अंदर ही रहेगा।

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

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

नॉट कीवर्ड एक लॉजिकल ऑपरेटर है जो बूलियन के मान को उलट देता है। किसी कमांड के आगे कीवर्डnotलगाने से, जो बूलियन मान लौटाता है, True को False में और False को True में बदल देगा। उदाहरण के लिए, मान लीजिए कि वीआर रोबोट पर बायां बम्पर सेंसर दबाया गया है, और left_bumper.pressedकमांड ट्रू लौटाता है। notकीवर्ड बूलियन मान को उलट देगा, और इस अभिव्यक्ति को False लौटाएगा।

left_bumper.pressed() नहीं

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

def main():
	while not left_bumper.pressed():
		drivetrain.drive(FORWARD)
		wait(5, MSEC)
	drivetrain.stop()

व्हाइल लूप और बम्पर सेंसर के साथ एक प्रोजेक्ट बनाना

प्रोजेक्ट का नाम दें और उसे सेव करें

  • एक नया टेक्स्ट प्रोजेक्ट खोलें और संकेत मिलने परवॉल मेज़ प्लेग्राउंडका चयन करें। वॉल मेज़ प्लेग्राउंड के चयन टाइल के निचले भाग पर वॉल मेज़ लिखा होता है और ऊपर भूलभुलैया दिखाई देती है।
  • परियोजना का नाम दें यूनिट4पाठ2.VEXcode VR टूलबार। टूलबार के बीच में प्रोजेक्ट का नाम यूनिट 4 लेसन 2 लिखा हुआ है और इसे लाल बॉक्स से हाइलाइट किया गया है।

     

  • नए टेक्स्ट प्रोजेक्ट के हिस्से के रूप में स्वचालित रूप से पॉप्युलेट होने वाले ड्राइवट्रेन कमांड को बदलने के लिए whileकमांड को वर्कस्पेस में ड्रैग करें या टाइप करें। ध्यान दें कि लूप के अंदर wait कमांड है। प्रतीक्षाकमांड को न हटाएं, यह सुनिश्चित करेगा कि वीआर रोबोट परियोजना को सही ढंग से निष्पादित करे। आपका प्रोजेक्ट कुछ इस तरह दिखना चाहिए:

    def main():
    	while condition:
    		wait(5, MSEC)
  • नहींऑपरेटर टाइप करें 'while' के बादwhileकमांड में। अब आपका प्रोजेक्ट कुछ इस तरह दिखना चाहिए:

    def main():
    	while not condition:
    		wait(5, MSEC)
  • while लूप की 'condition' में left_bumper.pressedकमांड को ड्रैग या टाइप करें लूप के अंदर के कमांड तब तक निष्पादित होंगे जब तक कि शर्त सत्य नहीं है, यानी जब तक कि बायां बम्पर सेंसरपर दबा हुआ हो, न किपर। अब आपका प्रोजेक्ट कुछ इस तरह दिखना चाहिए:

    def main():
    	while not left_bumper.pressed():
    		wait(5, MSEC)
  • whileलूप के अंदर, ड्राइव कमांड को ड्रैग करें या टाइप करें। सुनिश्चित करें किड्राइवकमांड औरवेटकमांडव्हाइललूप के भीतर सही ढंग से इंडेंट किए गए हैं, ताकि लूप इच्छानुसार चले। आप इन दिशासूचक रेखाओं का उपयोग दृश्य सहायता के रूप में कर सकते हैं। अब आपका प्रोजेक्ट कुछ इस तरह दिखना चाहिए:

    def main():
    	while not left_bumper.pressed():
    		drivetrain.drive(FORWARD)
    		wait(5, MSEC)
  • लूप के बाहर स्टॉप कमांड को ड्रैग करें या टाइप करें जबकि। सुनिश्चित करें किस्टॉपकमांडजबकिलूप के साथ संरेखित है, और इंडेंटेड नहीं है, ताकि यह इच्छानुसार लूप के बाहर चले। आप इन दिशासूचक रेखाओं का उपयोग दृश्य सहायता के रूप में कर सकते हैं।  अब आपका प्रोजेक्ट कुछ इस तरह दिखना चाहिए:

    def main():
    	while not left_bumper.pressed():
    		drivetrain.drive(FORWARD)
    		wait(5, MSEC)
    	drivetrain.stop()
  • यदि प्लेग्राउंड विंडो पहले से खुली नहीं है तो उसे खोलें सुनिश्चित करें किवॉल मेज़ प्लेग्राउंडखुलता है। 
  • प्रोजेक्ट चलाएँ।
  • वीआर रोबोट को वॉल मेज़ के शुरुआती बिंदु से चलते हुए देखें और जब बम्पर सेंसर दीवार से दब जाए तो उसे रुकते हुए देखें।
  • ड्राइव कमांड वीआर रोबोट को आगे बढ़ते रहने की अनुमति देता है, जबकि लेफ्ट बम्पर प्रेस्ड कमांड के साथ बम्पर सेंसर की स्थिति की जांच करता है। एक बार जब left_bumper.pressedकमांड True के रूप में रिपोर्ट करता है, तो VR रोबोट लूप के बाहर अगले कमांड पर चला जाएगा और ड्राइविंग बंद कर देगा।

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