Skip to main content

पाठ 2: While लूप का उपयोग करना

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

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

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

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

जबकि लूप्स

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

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

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

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

जबकि लूप्स और दीवार भूलभुलैया समस्या

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

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

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

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

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

drivetrain.drive_for(FORWARD, 200, MM)
drivetrain.turn_for(RIGHT, 90, DEGREES)

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

ड्राइवट्रेन.ड्राइव(आगे)
ड्राइवट्रेन.टर्न(दाएँ)

नॉट कीवर्ड

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

बाईं ओर उदाहरण कोड का एक टुकड़ा दिखाया गया है, जिसमें लिखा है, 'जब सूरज चमक नहीं रहा हो, तो अंदर आ जाओ।' इसके बाद 'while' कमांड के तहत 'play outside' कमांड का उपयोग किया जाता है। दाईं ओर रात के समय एक घर दिखाया गया है जहां चाँद निकला हुआ है। इस संहिता के अनुसार, जब तक सूरज नहीं चमक रहा हो, कोई भी बाहर नहीं खेलेगा और घर के अंदर ही रहेगा।

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

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

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

left_bumper.pressed() नहीं

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

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

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

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

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

     

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

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

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

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

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

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

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