cb
codebamin
الفصل 4 · حلقات التكرار (For Loops)

بناء وتجميع النصوص داخل الحلقات

قبل أن ننظر إلى مزيد من الحلقات، نحتاج إلى تعلم فكرة أخرى بسرعة. انظر إلى هذا البرنامج:

__program_indented__

ماذا تتوقع أن يفعل السطر hello = hello + '!'؟ شغّل البرنامج لتعرف.

لا يهتم بايثون بوجود hello على جانبي علامة =؛ فهو يتصرف بالطريقة نفسها التي سيتصرف بها لو كان الاسمان مختلفين. أولًا يحسب hello + '!'، وكانت قيمة hello في تلك اللحظة هي 'Hello'، فيصبح الحساب 'Hello' + '!' والنتيجة 'Hello!'، ثم تصبح هذه النتيجة القيمة الجديدة للمتغير hello.

إذا كان ذلك يساعدك على الفهم، فيمكنك تصور السطر وكأنه خطوتان:

temp = hello + '!' hello = temp

أو هكذا:

temp = hello hello = temp + '!'

هذه الفكرة مفيدة جدًا داخل الحلقات. جرّب البرنامج التالي:

__program_indented__

خذ وقتك وتأكد أنك تفهم هذا البرنامج جيدًا. ما يحدث يشبه الآتي:

line = '-'

char = 'W' line = line + char = '-' + 'W' = '-W' print('-W')

char = 'o' line = line + char = '-W' + 'o' = '-Wo' print('-Wo')

char = 'r' line = line + char = '-Wo' + 'r' = '-Wor' print('-Wor')

...

التفاصيل هنا مهمة. ماذا يحدث إذا بدّلت ترتيب آخر سطرين وشغّلت البرنامج بهذه الصورة بدلًا من السابقة؟

__program_indented__

لا يُضاف آخر محرف في name إلى line إلا في نهاية دورة الحلقة، أي بعد أن يكون print(line) قد نُفذ للمرة الأخيرة. لذلك لا يُطبع ذلك المحرف ولا الاسم الكامل في أسفل المثلث. إذا كان الأمر غير واضح، جرّب وضع print(line) قبل line = line + char وبعدها معًا.

لنتخلص الآن من محارف - التي تظهر في الناتج. ربما تستطيع تخمين الطريقة بالفعل.

النص الفارغ (Empty string) هو نص لا يحتوي على أي محارف إطلاقًا. ويُكتب زوجًا من علامات الاقتباس من دون شيء بينهما: ''. يمكنك التفكير فيه كأنه الصفر بالنسبة إلى النصوص؛ فإضافته إلى نص آخر تعيد النص الآخر كما هو، بالطريقة نفسها التي تجعل 0 + 5 تساوي 5.

جرّب هذا في الطرفية:

'' + '' + ''

لا تخلط بين النص الفارغ '' وبين ' '؛ فالثاني نص غير فارغ يحتوي على محرف واحد هو المسافة.

عدّل الآن البرنامج الأصلي للتخلص من الشرطات في الناتج، بحيث يطبع عند name = 'World' ما يلي:

__no_auto_translate__ W Wo Wor Worl World

النتيجة جميلة، أليس كذلك؟

نمط البدء بقيمة فارغة ثم بنائها تدريجيًا داخل حلقة for شائع جدًا، وستستخدمه كثيرًا. من أمثلة القيم الفارغة التي نبدأ بها: '' للنص الفارغ، و0 للأعداد، و[] للقائمة الفارغة التي ستتعرف عليها قريبًا.

solution.py
1
2
3
4
5
6
7
8
9
10
الطرفية (shell)
>>>