Skip to main content

الدرس 4: استخدام الحلقات المتداخلة

في الدرس السابق، قمت بإنشاء مشروع لإرشاد روبوت الواقع الافتراضي للقيادة إلى جميع الأقراص الزرقاء الثلاثة في Disk Mover Playground والتقاطها ونقلها إلى الهدف الأزرق. في هذا الدرس، ستنشئ مشروعًا لالتقاط ونقل قرص واحد من كل لون إلى هدفه الملون المقابل في Disk Mover Playground باستخدام الحلقات المتداخلة!

منظر من أعلى لأسفل لملعب Disk Mover مع القرص الأول من كل لون في هدف اللون المطابق. يواجه روبوت الواقع الافتراضي الجدار الجانبي الأيمن على حافة الهدف الأخضر، في الزاوية اليمنى السفلى.

مخرجات التعلم

  • تحديد كيفية تداخل الحلقات.
  • وصف تدفق المشروع من خلال الحلقات المتداخلة.
  • اشرح سبب استخدام الحلقات المتداخلة في المشروع.

ما هي الحلقات المتداخلة ؟

في الوحدات والدروس السابقة في هذه الدورة، استخدمت حلقات من فئة التحكم مثل الحلقة لـ ، والحلقة بينما ، والحلقة اللانهائية بينما لتكرار السلوكيات. ويسمى وضع حلقة واحدة داخل حلقة أخرى "التعشيش". الحلقات المتداخلة مفيدة في المشاريع التي يكرر فيها روبوت الواقع الافتراضي نفس السلوكيات أكثر من مرة، مثل تحريك أقراص متعددة في الملعب. يمكن لحلقات التعشيش تنظيم المشروع وتكثيفه، لجعله أكثر سهولة في الفهم. يمكن أن يكون هذا مفيدًا لفهم سياق التعليمات البرمجية والغرض منها بشكل أفضل، بالإضافة إلى تسهيل تحديد الأخطاء واستكشاف أخطاء المشروع وإصلاحها. 

على سبيل المثال، لنقل الأقراص الزرقاء الثلاثة إلى الهدف الأزرق، يمكن استخدام حلقة لـ لتكرار عملية جمع القرص عدة مرات. يضع المشروع الموضح هنا مشروع الدرس 3 لنقل القرص الأزرق الأول إلى الهدف الأزرق داخل حلقة لـ ، مع تعيين المعلمة على 3. لاحظ كيف تم وضع الأقسام الأربعة للمشروع السابق ضمن حلقة لـ.

def main ():
    for repeat_count in range(3):
        #1. محرك الأقراص إلى القرص الأول
        في حين لاdown_eye.near_object (): drivetrain.drive
            (إلى الأمام)
            انتظر(5، مللي ثانية
        )drivetrain.stop ()

        # 2. التقط مغناطيس القرص.
        قم بتنشيط (تعزيز)

        رقم 3. القيادة إلى المرمى drivetrain.turn_to_heading
        (180 درجة)
        بينما front_distance.get_distance (MM) > 200: drivetrain.drive
            (للأمام)
            انتظر(5، مللي ثانية
        )drivetrain.stop ()

        # 4. إسقاط القرص في مغناطيس الهدف.
        تنشيط(إسقاط)

        drivetrain.drive_for(عكس، 100، مم) drivetrain.turn_to_heading
        (0، درجة)

    الانتظار(5، مللي ثانية)

عندما تقوم بـ "تضمين" الحلقات، تتحكم الحلقة الخارجية في عدد المرات التي يتم فيها تنفيذ الحلقة الداخلية.  في هذا المشروع، الحلقة لـ هي الحلقة الخارجية، وسوف تكرر السلوكيات الموجودة في الحلقة ثلاث مرات.

المشروع من الأعلى مع تسليط الضوء على حلقة FOR في مربع أحمر. المسافة البادئة تحت التعريف الرئيسي، فإن عدد التسطير السفلي المتكرر في النطاق (3) القولون هو بداية الحلقة، والأقسام الأربعة للمشروع هي المسافة البادئة تحت ذلك. محاذاة مع الأمر for loop في الجزء السفلي من المشروع هو أمر انتظار، يوضح أين تنتهي الحلقة.

الحلقات الداخلية هي تلك الحلقات الموجودة داخل الحلقة الخارجية. في هذا المثال، كل من الحلقات بينما (للقيادة إلى القرص وإلى الهدف) هي "حلقات داخلية" يتم تنفيذها في كل مرة يتحرك فيها المشروع عبر الحلقة لـ .نفس المشروع من الأعلى، مع إبراز كل حلقة من الحلقات الداخلية في مربع أحمر. يحتوي قسما التعليق الأول والثالث من المشروع على حلقات أثناء استخدام المستشعرات الموجودة على الروبوت للقيادة حتى يتم اكتشاف قرص، ثم حتى يتم اكتشاف الجدار.

لمعلوماتك

تعد المسافة البادئة مهمة في مشاريع VEXcode VR Python. يمكنك استخدام خطوط المؤشر الرمادية في مساحة العمل كوسيلة مساعدة بصرية عند تداخل الحلقات، للتأكد من أن مشروعك يعمل على النحو المنشود. يشير كل سطر إلى بداية ونهاية الحلقة.

نفس المشروع من الأعلى مع الخطوط التوجيهية الموضحة في المربعات الحمراء، والتي توضح محاذاة المسافة البادئة لكل حلقة من الحلقات الداخلية فيما يتعلق ببقية المشروع. يمتد خط الحلقة FOR مباشرة إلى أمر الانتظار النهائي. ويمتد كل خط من خطوط حلقة while إلى أوامر الإيقاف.

تدفق مشروع حلقة متداخلة 

في هذا المثال، في كل مرة يتم فيها تكرار الحلقة لـ ، يتم التقاط قرص أزرق وإعادته إلى الهدف الأزرق. 

بعد التكرار الأول، يتم إرجاع القرص الأزرق الأول إلى الهدف الأزرق ويتم تشغيل روبوت الواقع الافتراضي ليكون جاهزًا لجمع القرص الثاني.

صورة جنبًا إلى جنب للمشروع من الأعلى موضحة في مساحة العمل إلى اليسار، ونافذة الملعب الموضحة إلى اليمين. يحتوي المشروع على سهم برتقالي يلتف من أمر for loop حول المشروع بأكمله، مما يوضح التكرار الأول لـ for loop. في الملعب، يوجد أول قرص أزرق في المرمى الأزرق، ويتم وضع روبوت الواقع الافتراضي في مواجهة الأقراص الزرقاء المتبقية، في الواجهة الأمامية للمرمى، مما يشير إلى موضع الروبوت بعد التكرار الأول.

بعد التكرار الثاني، يتم جمع القرص الأزرق الثاني وتحويل روبوت الواقع الافتراضي ليكون جاهزًا لجمع القرص الثالث.

صورة جنبًا إلى جنب للمشروع من الأعلى موضحة في مساحة العمل إلى اليسار، ونافذة الملعب الموضحة إلى اليمين. يحتوي المشروع على سهم برتقالي يلتف من أمر for loop حول المشروع بأكمله، مما يوضح التكرار الثاني لـ for loop. في الملعب، يوجد قرصان أزرقان في المرمى الأزرق، ويتم وضع روبوت الواقع الافتراضي في مواجهة القرص الأزرق المتبقي، في الواجهة الأمامية للمرمى، مما يشير إلى موضع الروبوت بعد التكرار الثاني.

بعد التكرار الثالث، يتم جمع القرص الأزرق الثالث، ويتوقف روبوت الواقع الافتراضي عن الحركة. لقد أكملت الحلقة لـ نطاقها الآن، وبالتالي تم الانتهاء من المشروع. 

صورة جنبًا إلى جنب للمشروع من الأعلى موضحة في مساحة العمل إلى اليسار، ونافذة الملعب الموضحة إلى اليمين. يحتوي المشروع على سهم برتقالي يلتف من أمر for loop حول المشروع بأكمله، مما يوضح التكرار الثالث لـ for loop. في الملعب، تقع جميع الأقراص الزرقاء الثلاثة في المرمى الأزرق، ويتم وضع روبوت الواقع الافتراضي بعيدًا عن المرمى خارج صندوق المرمى مباشرة، مما يشير إلى موضع الروبوت بعد التكرار النهائي.

 

قم باختيار الزر التالي لمواصلة بقية هذا الدرس.