حلقة repeat-until
جزء من قسم الأساسيات في رحلة 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) -- يرمي رقماً بين 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.
في كل مرة يتم فيها تشغيل الحلقة، فإنها تقرأ محاولة واحدة من الجدول، وتطبعها، ثم تنتقل إلى المحاولة التالية. تستمر الحلقة في العمل حتى يتم العثور على كلمة المرور الصحيحة.
جرّب بنفسك
-- تهيئة المتغيرات
local password = ""
local correctPassword = "secure123"
-- قائمة بمحاولات كلمة المرور
local attempts = {"password", "123456", "admin", "secure123"}
local index = 1
-- TODO:
-- استخدم حلقة repeat-until لـ:
-- 1. تعيين المحاولة الحالية لـ `password`
-- 2. طباعة كلمة المرور التي تمت محاولتها
-- 3. الانتقال إلى المحاولة التالية
-- التوقف عندما تتطابق password مع correctPasswordيتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس الأساسيات
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'مراجعة - العد التنازلي