أثناء التكرار في بايثون. كيف يعمل ، أمثلة على الاستخدام

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

مفهوم الدورة

هناك حاجة إلى حلقة عندما يحتاج إجراء معين إلى القيام به عدة مرات. هذا بسيط للغاية ، لأن نطاق تطبيقات الدورات في الواقع أوسع بكثير. هناك نوعان رئيسيان من الحلقات في بايثون: for and while. الأكثر شعبية هو.

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

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

دورة لـ

حلقة For الخاصة بنا ليست عدادًا ، كما هو الحال في العديد من اللغات الأخرى. وتتمثل مهمتها في تعداد سلسلة معينة من القيم. ماذا يعني هذا؟ لنفترض أن لدينا قائمة بالعناصر. أولاً ، تأخذ الحلقة الأولى والثانية والثالثة وهكذا.

ميزة هذه الحلقة في Python هي أنك لست بحاجة إلى تحديد فهرس العنصر لمعرفة وقت الخروج من الحلقة. كل شيء سوف يتم تلقائيا.

>>> spisok = [10 ، 40 ، 20 ، 30]

>>> للعنصر في spisok:

... طباعة (عنصر + 2)

...

12

42

22

32

في مثالنا ، استخدمنا المتغير العنصر بعد الأمر. بشكل عام ، يمكن أن يكون الاسم أي شيء. على سبيل المثال ، التعيين الشائع هو i. ومع كل تكرار ، سيتم تخصيص كائن محدد لهذا المتغير من القائمة ، والذي أطلقنا عليه الكلمة المناسبة.

القائمة في حالتنا عبارة عن سلسلة من الأرقام 10,40,20,30،XNUMX،XNUMX،XNUMX. في كل تكرار ، تظهر القيمة المقابلة في المتغير. على سبيل المثال ، بمجرد أن تبدأ الحلقة ، المتغير العنصر يتم تعيين القيمة 10. في التكرار التالي ، يتحول العشرة إلى الرقم 40 ، وفي المرة الثالثة يتحول إلى الرقم 20 ، وفي النهاية ، في آخر تكرار للحلقة ، يتحول إلى 30.

إشارة نهاية الدورة هي نهاية العناصر في القائمة.

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

>>> spisok = [1,2,3,4,5،XNUMX،XNUMX،XNUMX،XNUMX]

أو استخدم الوظيفة لين () ، لتحديد طول القائمة. لكن في هذه الحالة ، من الأفضل استخدام حلقة في حين، لأنه لا توجد حاجة لاستخدام متغير.

إذا كنت بحاجة إلى تغيير تسلسل القيم في القائمة ، فقم بالتكرار For وهنا يأتي الإنقاذ. للقيام بذلك ، في كل تكرار ، يجب تعيين قيمة مناسبة لكل عنصر من عناصر القائمة.

حائط اللوب

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

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

إذا رسمنا دورة في حين بشكل مبسط ، يتم ذلك باستخدام مثل هذا المخطط.أثناء التكرار في بايثون. كيف يعمل ، أمثلة على الاستخدام

الفرع الرئيسي للبرنامج (الذي يمتد خارج الحلقة) موضح في هذا الشكل بمستطيلات زرقاء. يمثل الفيروز جسم الدورة. في المقابل ، المعين هو شرط يتم التحقق منه عند كل تكرار.

دورة في حين يمكن أن يؤدي إلى استثناءين:

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

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

بينما أمثلة التكرار

فيما يلي مثال على رمز يعالج خطأً في هذه الحالة.

n = input ("أدخل عددًا صحيحًا:") 

بينما اكتب (n)! = int:

    محاولة:

        ن = كثافة العمليات (ن)

    باستثناء ValueError:

        طباعة ("إدخال خاطئ!")

        n = input ("أدخل عددًا صحيحًا:") 

إذا كان n٪ 2 == 0:

    طباعة ("حتى")

آخر:

    طباعة ("فردي")

ضع في اعتبارك أن بايثون تستخدم النقطتين للإعلان عن تراكيب التعليمات البرمجية المعقدة.

في الكود أعلاه ، حددنا كشرط يجب علينا التحقق مما إذا كان الرقم عددًا صحيحًا. إذا كانت الإجابة بنعم ، فسيتم إرجاع خطأ. إذا لم يكن كذلك ، فهذا صحيح.

في الجزء الثاني من الكود ، حيث يتم استخدام عامل التشغيل if، استخدمنا عامل التشغيل٪ للعثور على الباقي بعد عملية القسمة. الخطوة التالية هي التحقق مما إذا كان الرقم زوجيًا. إذا لم يكن كذلك ، فسيكون الباقي واحدًا في هذه الحالة. وفقًا لذلك ، يكون الرقم فرديًا. 

بعبارات بسيطة ، يتحقق الكود أعلاه أولاً مما إذا كانت السلسلة التي أدخلها المستخدم عبارة عن رقم. إذا كانت الإجابة بنعم ، فسيتم إجراء فحص ثانٍ لمعرفة ما إذا كان هناك باقي القسمة على اثنين. لكن لن يتم تنفيذ الكتلة الثانية حتى تصبح القيمة التي أدخلها المستخدم رقمية.

بمعنى ، سيتم تنفيذ الحلقة بشكل منتظم حتى حدوث الشرط. في هذه الحالة ، يعمل مثل هذا. 

أي يمكنك الانتقال من العكس: تكرار إجراء معين حتى يصبح الحدث خاطئًا.

تحليل الكود

الآن دعنا نرى بمزيد من التفصيل كيف يعمل هذا الرمز. للقيام بذلك ، سنقوم بتحليله خطوة بخطوة.

  1. أولاً ، يقوم المستخدم بإدخال سلسلة يقبلها المتغير n. 
  2. باستخدام الحلقة في حين يتم فحص نوع هذا المتغير. في الإدخال الأول ، لا يساوي مادبا. لذلك ، نتيجة للاختبار ، وجد أن هذا الشرط صحيح. لذلك ، يتم إدخال جسم الحلقة.
  3. بمساعدة عامل التشغيل محاولة نحن نحاول تحويل سلسلة إلى رقم. إذا تم ذلك ، فلن يحدث خطأ. وفقًا لذلك ، ليست هناك حاجة لمعالجتها. لذلك ، يعود المترجم إلى بداية الحلقة ، ووفقًا لنتائج الفحص ، اتضح أنه أصبح عددًا صحيحًا. لننتقل إلى الخطوة 7
  4. إذا كان التحويل غير ناجح ، فسيتم طرح ValueError. في هذه الحالة ، يتم إرسال تدفق البرنامج إلى معالج ما عدا.
  5. يقوم المستخدم بإدخال قيمة جديدة ، يتم تعيينها إلى المتغير n.
  6. يعود المترجم الفوري إلى الخطوة 2 ويتحقق مرة أخرى. إذا كانت قيمة عدد صحيح ، فانتقل إلى الخطوة 7. إذا لم يكن الأمر كذلك ، تتم محاولة التحويل مرة أخرى وفقًا للخطوة 3.
  7. بمساعدة عامل التشغيل if تحديد ما إذا كان هناك باقٍ بعد قسمة رقم على 2. 
  8. إذا لم يكن الأمر كذلك ، فسيتم إرجاع النص "زوجي".
  9. إذا لم يكن الأمر كذلك ، فسيتم إرجاع النص "فردي".

فكر الآن في مثل هذا المثال. حاول تحديد عدد المرات التي ستمر فيها هذه الدورة؟

المجموع = 100 

I = 0

بينما أنا <5:

    ن = int (المدخلات ())

    المجموع = المجموع - ن

    أنا = أنا + 1 

طباعة ("المتبقي" ، الإجمالي)

الإجابة الصحيحة هي 5. مبدئيًا ، قيمة المتغير i - صفر. يتحقق المترجم مما إذا كان المتغير متساويًا i 4 أو أقل. إذا كانت الإجابة بنعم ، فسيتم إرجاع القيمة. صحيح، ويتم تنفيذ الحلقة وفقًا لذلك. يتم زيادة القيمة بمقدار واحد.

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

هذه القيمة أيضًا أقل من خمسة. ثم يتم تنفيذ الحلقة للمرة الثالثة ، تضاف إلى المتغير i 1 ويتم تعيين القيمة 3. هذا مرة أخرى أقل من خمسة. وهكذا يتعلق الأمر بالتكرار السادس للحلقة ، حيث قيمة المتغير i يساوي 5 (بعد كل شيء ، كان في الأصل صفرًا ، بقدر ما نتذكر). وفقًا لذلك ، لا يجتاز هذا الشرط الاختبار ، ويتم إنهاء الحلقة تلقائيًا ويتم الانتقال إلى الخطوة التالية ، التي تقع خارجها (أو إنهاء البرنامج ، إذا لم يتم توفير الخطوات التالية).

يمكن أن تحدث الدورة أيضًا في الاتجاه المعاكس. فيما يلي مثال على رمز حيث يُطرح ، مع كل تكرار لاحق ، واحد من القيمة الحالية للمتغير. 

المجموع = 100 

بينما المجموع> 0:

    ن = int (المدخلات ())

    المجموع = المجموع - ن 

طباعة ("المورد مستنفد")

حاول أن تخمن ما يفعله هذا البرنامج! تخيل ذلك في متغير مجموع يتم تخزين المعلومات حول مورد البرنامج. في كل مرة يتحقق المترجم الفوري من وجود المورد. إذا لم يكن الأمر كذلك ، فسيتم عرض النص "استنفاد الموارد" ويغلق البرنامج. ومع كل تكرار للحلقة ، يتناقص المورد بالعدد الذي يحدده المستخدم.

والآن الواجب المنزلي. حاول تغيير الكود أعلاه بحيث لا يصبح المتغير سلبيًا فعليًا. 

4 تعليقات

اترك تعليق