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

पाठ 2: तुलना ऑपरेटरों का उपयोग करना

इस पाठ में, आप तुलना ऑपरेटरों के बारे में जानेंगे और दूरी सेंसर से प्राप्त डेटा के साथ एक प्रोजेक्ट में उनका उपयोग करना सीखेंगे। फिर आप एक प्रोजेक्ट बनाएंगे जो वीआर रोबोट को डिस्टेंस सेंसर का उपयोग करके अक्षर 'ए' तक ले जाएगा, जिसमें जबकि लूप और ग्रेटर देन (>) ऑपरेटर का उपयोग किया जाएगा। इस मिनी-चैलेंज में, आपको इन कौशलों का उपयोग करके वॉल मेज़ के आरंभ से संख्या '1' तक पहुंचना होगा।

वॉल मेज़ प्लेग्राउंड का ऊपर से लिया गया दृश्य, जिसमें वीआर रोबोट प्लेग्राउंड के निचले केंद्र में शुरुआती स्थान पर स्थित है। अक्षर 'ए' रोबोट के ठीक बाईं ओर स्थित है, जो एक छोटी दीवार से अलग है। रोबोट से दाहिनी ओर कोने में नंबर 1 स्थित है, जो एक ऊर्ध्वाधर और एक क्षैतिज दीवार द्वारा अलग किया गया है।

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

  • पहचानें कि ग्रेटर देन (>), लेस देन (<), और इक्वल टू (==) तुलना ऑपरेटर हैं जो दो मानों की तुलना करते हैं, जिन्हें ऑपरेंड के रूप में जाना जाता है।  
  • पहचानें कि ग्रेटर देन (>) ऑपरेटर दो मानों की तुलना करता है और यदि बायां मान दाएं मान से बड़ा है तो ट्रू रिपोर्ट करता है।
  • पहचानें कि लेस देन (<) ऑपरेटर दो मानों की तुलना करता है और यदि बायां मान दाएं मान से कम है तो ट्रू रिपोर्ट करता है।
  • पहचानें कि ग्रेटर देन (>) या लेस देन (<) ऑपरेटर व्हाइललूप में शर्त के रूप में उपयोग किए जाने पर ट्रू या फॉल्स मान रिपोर्ट करते हैं।
  • एक ऐसा प्रोजेक्ट बनाने का तरीका बताएं जिसमें एक वीआर रोबोट तब तक आगे बढ़ता रहे जब तक कि डिस्टेंस सेंसर का मान एक निश्चित राशि से कम न हो जाए।

तुलना ऑपरेटर

लेस देन (<), ग्रेटर देन (>), और इक्वल टू (==) ऑपरेटर दो मानों की तुलना करते हैं, जिन्हें ऑपरेंड भी कहा जाता है। ऑपरेटर के बाईं ओर का मान पहला ऑपरेंड है, और दाईं ओर का मान दूसरा ऑपरेंड है। ऑपरेटर बूलियन मानों की रिपोर्ट करते हैं और तुलना सही होने पर ट्रू मान लौटाते हैं, और तुलना सही होने पर) फॉल्स मान लौटाते हैं।

  • इन उदाहरणों में लेस देन (<) ऑपरेटर का उपयोग करते हुए, जब कथन संख्यात्मक रूप से सही होता है, तो यह ट्रू रिपोर्ट करेगा।कम ऑपरेटरों की पंक्तियों के लिए - शीर्ष पंक्ति में 25 से 50 कम लिखा है और इसे 'गलत रिपोर्ट करता है' के रूप में लेबल किया गया है। सबसे नीचे वाली पंक्ति में 50 से 25 कम लिखा है और इसे 'सही रिपोर्ट' के रूप में चिह्नित किया गया है।
  • इसी प्रकार, ग्रेटर देन (>) ऑपरेटर का उपयोग करने वाले इन उदाहरणों में, संख्यात्मक रूप से सही कथन ट्रू रिपोर्ट करेगा।ग्रेटर दैन ऑपरेटरों की पंक्तियों के लिए - शीर्ष पंक्ति में लिखा है 50 ग्रेटर दैन 25 और इसे 'रिपोर्ट्स ट्रू' के रूप में लेबल किया गया है। सबसे नीचे वाली पंक्ति में 25, 50 से अधिक लिखा है और इसे 'गलत रिपोर्ट' के रूप में चिह्नित किया गया है।
  • बराबर (==) ऑपरेटर तब True रिपोर्ट करता है जब दोनों मान बिल्कुल समान होते हैं, और False रिपोर्ट करता है जब वे समान नहीं होते हैं।बराबर ऑपरेटरों की पंक्तियों के लिए - शीर्ष पंक्ति में 50 = = 50 लिखा है और इसे 'सही रिपोर्ट करता है' के रूप में लेबल किया गया है। सबसे नीचे वाली पंक्ति में 25 = = 50 लिखा है और इसे 'गलत रिपोर्ट करता है' के रूप में लेबल किया गया है।
    • ध्यान दें कि दोहरे बराबर का चिह्न "बराबर" दर्शाता है और दो मानों की तुलना करता है। एक अकेला बराबर का चिह्न एक असाइनमेंट ऑपरेटर है जो किसी वेरिएबल को मान असाइन करता है।

तुलना ऑपरेटर दशमलव, पूर्णांक या संख्यात्मक रिपोर्टिंग कमांड की तुलना कर सकते हैं।

दूरी सेंसर डेटा के साथ तुलना ऑपरेटरों का उपयोग करना

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

डिस्टेंस सेंसर से प्राप्त डेटा का उपयोग तुलना ऑपरेटर में एक मान के रूप में किया जा सकता है।

front_distance.get_distance(MM) > 50

उदाहरण के लिए, अगर हम चाहते हैं कि वीआर रोबोट किसी वस्तु, जैसे दीवार, की ओर बढ़े और वस्तु के करीब पहुँचने पर रुक जाए, तो हम तुलना ऑपरेटर और गेट _डिस्टेंस फ़ंक्शन का उपयोग करके ऐसा कर सकते हैं। संक्षेप में, हम वीआर रोबोट से तब तक ड्राइव करने के लिए कह रहे हैं जब तक रोबोट और वस्तु के बीच की दूरी एक निश्चित सीमा से अधिक हो, जैसे कि 50 मिलीमीटर (मिमी)।वॉल मेज़ प्लेग्राउंड के निचले केंद्र का एक क्लोज-अप दृश्य, जिसमें वीआर रोबोट शुरुआती वर्ग पर मौजूद है। रोबोट के सामने से लगभग 50 मिमी की दूरी तक एक हरा तीर आगे बढ़ता है, जो यह दर्शाता है कि 50 मिमी से अधिक की दूरी को सही माना जाता है। हरे तीर के आगे से दीवार तक एक लाल तीर फैला हुआ है, जो यह दर्शाता है कि 50 मिमी से अधिक की दूरी को गलत बताया गया है।

जबकि दूरी सेंसर बताता है कि यह 50 मिलीमीटर () सेआगेहै, या मानसेअधिक है, वीआर रोबोट स्वतंत्र>ड्राइव कर सकता है। जब दूरी सेंसर रिपोर्ट करता है कि यह 50 मिलीमीटर (मिमी) सेहै, या मानसेनहीं हैवीआर रोबोट>दीवार से टकराने से पहले रुकना या मुड़ना होगा। 

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

किस तुलना ऑपरेटर का उपयोग करना है, यह चुनना शैलीगत पसंद हो सकती है। ऊपर दिए गए उदाहरण में ग्रेटर देन (>) ऑपरेटर का उपयोग प्रोजेक्ट को यथासंभव स्पष्ट और पठनीय बनाने के लिए किया गया था। जब वीआर रोबोट 50 मिलीमीटर से अधिक दूरी पर हो, तो आगे बढ़ें। आप ऑपरेटर में मानों के क्रम को उलट कर और लेस देन (<) ऑपरेटर का उपयोग करके भी यही लक्ष्य प्राप्त कर सकते हैं।

जबकि 50 > फ्रंट_डिस्टेंस.गेट_डिस्टेंस(एमएम):

यहां, वीआर रोबोट तब चलेगा जब दूरी सेंसर द्वारा रिपोर्ट किए गए मान से 50 मिलीमीटर अधिक होगा। वीआर रोबोट भी वैसा ही व्यवहार करेगा, हालांकि, परियोजना थोड़ी कम स्पष्ट और पठनीय है। 

आपके द्वारा उपयोग किए जा रहे सेंसर डेटा के आधार पर, बराबर (==) ऑपरेटर वीआर रोबोट को आपके इच्छित प्रदर्शन के अनुसार प्रदर्शन नहीं करा सकता है। उदाहरण के लिए, यदि लक्ष्य वीआर रोबोट को किसी वस्तु से 50 मिलीमीटर दूर रोकना है, तो आप बराबर (==) ऑपरेटर का उपयोग करने के बारे में सोच सकते हैं।

जबकि front_distance.get_distance(MM) == 50:

हालांकि, उदाहरण के लिए वॉल मेज़ में, डिस्टेंस सेंसर के साथ इक्वल टू (==) ऑपरेटर का उपयोग करने के लिए सेंसर से इतनी सटीक रीडिंग की आवश्यकता होगी, जो कि ठीक50 मिलीमीटर हो, कि वीआर रोबोट की गति के कारण वास्तविक समय में उस स्तर की सटीकता प्राप्त करना लगभग असंभव हो जाएगा। इस प्रकार, वीआर रोबोट संभवतः सीमा से आगे बढ़ता रहेगा क्योंकि चाहे वह 100 मिलीमीटर या 25 मिलीमीटर का मान बता रहा हो, इनमें से कोई भी ,50 मिमीके बराबर नहीं है, इसलिए ऑपरेटर कभी भी इसे सत्य के रूप में रिपोर्ट नहीं करता है। 

तुलना संचालक और दीवार भूलभुलैया समस्या

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

def main():
    while front_distance.get_distance(MM) > 50:
        drivetrain.drive(FORWARD)
        wait(5, MSEC)
    drivetrain.stop()

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

वीडियो फाइल

यह छवि ऊपर दिए गए प्रोजेक्ट के प्रवाह को स्पष्ट करती है:

  • जब तक डिस्टेंस सेंसर दीवार से 50 मिलीमीटर (मिमी) से अधिक दूरी पर रहता है, ऑपरेटर ट्रू रिपोर्ट करता है और जबकि लूप में बना रहता है।
  • जब यह दीवार से 50 मिलीमीटर (मिमी) से कम होता है, तो ऑपरेटर गलत रिपोर्ट करता है, औरजबकिलूप से बाहर निकल जाता है।

ऊपर दिए गए प्रोजेक्ट में while लूप का प्रोजेक्ट फ्लो डायग्राम। जब दीवार से दूरी 50 मिमी से अधिक होगी और यह स्थिति सही साबित होगी, तो while लूप चलता रहेगा, जिससे रोबोट आगे की ओर बढ़ने लगेगा। जब दीवार से दूरी 50 से अधिक नहीं होती है, तो स्थिति गलत बताई जाती है, और प्रोजेक्ट while लूप से बाहर निकल जाता है, जिससे रोबोट चलना बंद कर देता है।

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