حلقة repeat-until
جزء من قسم Fundamentals في رحلة Lua على Coddy — الدرس 72 من 90.
تقدم لغة Lua نوعًا آخر من الحلقات يسمى حلقة repeat-until، والتي تتميز بخاصية فريدة تميزها عن حلقة while التي تعلمتها للتو. الفرق الجوهري هو أن حلقة repeat-until تنفذ كتلة الكود الخاصة بها مرة واحدة على الأقل دائمًا، بغض النظر عن الشرط.
تبدو الصيغة كما يلي:
repeat
-- الكود المراد تكراره
until conditionلاحظ أن الشرط يتم التحقق منه في النهاية، بعد أن يكون الكود قد تم تشغيله مرة واحدة بالفعل. تستمر الحلقة في التكرار حتى يصبح الشرط true - وهو عكس حلقة while التي تستمر طالما كان الشرط true.
إليك مثال عملي يحاكي رمي حجر نرد حتى تحصل على الرقم 6:
local roll = 0
repeat
roll = math.random(1, 6)
print("Rolled:", roll)
until roll == 6
print("Finally got a 6!")تضمن هذه الحلقة أنك ستقوم برمي النرد مرة واحدة على الأقل، وتستمر في الرمي حتى يصبح الشرط roll == 6 صحيحاً. هذا السلوك المتمثل في "التنفيذ أولاً، والتحقق لاحقاً" يجعل حلقات repeat-until مثالية للحالات التي تحتاج فيها إلى حدوث شيء ما مرة واحدة على الأقل قبل اتخاذ القرار بشأن الاستمرار.
التحدي
سهلأنت تقوم بإنشاء محاكاة بسيطة للتحقق من كلمة المرور.
- قم بإنشاء متغير يسمى
passwordوقم بتعيينه إلى سلسلة فارغة (""). - قم بإنشاء متغير آخر يسمى
correctPasswordوقم بتعيينه إلى"secure123". - قم بإنشاء جدول يسمى
attemptsيحتوي على محاولات كلمة المرور التالية بالترتيب:"password""123456""admin""secure123"
- قم بإنشاء متغير يسمى
indexوقم بتعيينه إلى1. ستستخدم هذا لتتبع المحاولة التي وصلت إليها حالياً. - استخدم حلقة
repeat-untilللقيام بما يلي:- قم بتعيين المحاولة الحالية إلى
passwordباستخدامattempts[index]— هذا يقرأ العنصر الموجود في الموضعindexمن الجدول - اطبع قيمة
passwordالحالية - قم بزيادة
indexبمقدار 1 (على سبيل المثالindex = index + 1) للانتقال إلى المحاولة التالية
- قم بتعيين المحاولة الحالية إلى
- يجب أن تتوقف الحلقة فقط عندما تساوي
passwordالقيمةcorrectPassword.
في كل مرة يتم فيها تشغيل الحلقة، فإنها تقرأ محاولة واحدة من الجدول، وتطبعها، ثم تنتقل إلى المحاولة التالية. تستمر الحلقة حتى يتم العثور على كلمة المرور الصحيحة.
ورقة مرجعية
تنفذ حلقة repeat-until الكود مرة واحدة على الأقل قبل التحقق من الشرط. وتستمر في التكرار حتى يصبح الشرط true.
الصيغة:
repeat
-- الكود المراد تكراره
until conditionمثال - رمي النرد حتى الحصول على الرقم 6:
local roll = 0
repeat
roll = math.random(1, 6)
print("Rolled:", roll)
until roll == 6
print("Finally got a 6!")الاختلافات الرئيسية عن حلقات while:
- تنفذ دائماً مرة واحدة على الأقل
- يتم التحقق من الشرط في النهاية
- تستمر حتى يصبح الشرط
true(عكسwhile)
جرّب بنفسك
-- تهيئة المتغيرات
local password = ""
local correctPassword = "secure123"
-- قائمة محاولات كلمة المرور
local attempts = {"password", "123456", "admin", "secure123"}
local index = 1
-- المهام المطلوبة:
-- استخدم حلقة repeat-until من أجل:
-- 1. تعيين المحاولة الحالية للمتغير `password`
-- 2. طباعة كلمة المرور التي تمت محاولتها
-- 3. الانتقال إلى المحاولة التالية
-- التوقف عندما تتطابق كلمة المرور مع correctPasswordيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Fundamentals
4المعاملات 2: العمليات العلائقية والمنطقية
معاملات التساويالمعاملات العلائقيةالمعامل 'and'المعامل 'or'المعامل 'not'التقييم قصير الدائرةقيم Truthy و Falsyمراجعة - المنطق البسيط10الجداول الجزء 1: نمط القائمة
ما هو الجدول؟إنشاء جدولالوصول إلى العناصر عبر الفهرستعديل العناصر عبر الفهرسمعامل الطول '#'table.insert()table.remove()ملخص - إدارة أعضاء الفريق13مشروع: متجر جرعات بسيط
إعداد المشروعإضافة جرعة2المتغيرات وأنواع البيانات
ما هو المتغير؟الأرقامالسلاسل النصيةالقيم المنطقيةالقيمة 'nil'الدالة type()قواعد التسميةمراجعة - ملف الشخصية5الإخراج الأساسي
طباعة القيم الحرفيةطباعة المتغيراتطباعة قيم متعددةدمج النصوص والمتغيراتدالة tostring()الإدخال (Input)التحويل (Cast)مراجعة - تقرير الحالةمراجعة - حتى 1208أساسيات معالجة النصوص
string.len()string.upper و string.lowerstring.sub()string.rep()string.find()مراجعة - تنسيق اسم المستخدم3المعاملات 1: العمليات الحسابية والدمج
المعاملات الحسابيةمعامل باقي القسمةمعامل الأسدمج النصوصأولوية المعاملاتملخص - حسابات بسيطة6مشروع: عرض إحصائيات الشخصية
رسالة ترحيبتعريف إحصائيات الشخصية9أساسيات الدوال
تعريف دالةاستدعاء دالةدوال مع معاملاتدوال بمعاملات متعددةجملة 'return'مراجعة - حاسبة المساحة12أساسيات الحلقات التكرارية
حلقة whileحلقة repeat-untilحلقة for الرقميةحلقة for مع خطوةجملة 'break'مراجعة - العد التنازلي