بناء وتجميع النصوص داخل الحلقات
قبل أن ننظر إلى مزيد من الحلقات، نحتاج إلى تعلم فكرة أخرى بسرعة. انظر إلى هذا البرنامج:
hello = 'Hello'
print(hello)
hello = hello + '!'
print(hello)
ماذا تتوقع أن يفعل السطر hello = hello + '!'؟ شغّل البرنامج لتعرف.
لا يهتم بايثون بوجود hello على جانبي علامة =؛ فهو يتصرف بالطريقة نفسها التي سيتصرف بها لو كان الاسمان مختلفين. أولًا يحسب hello + '!'، وكانت قيمة hello في تلك اللحظة هي 'Hello'، فيصبح الحساب 'Hello' + '!' والنتيجة 'Hello!'، ثم تصبح هذه النتيجة القيمة الجديدة للمتغير hello.
إذا كان ذلك يساعدك على الفهم، فيمكنك تصور السطر وكأنه خطوتان:
temp = hello + '!'
hello = temp
أو هكذا:
temp = hello
hello = temp + '!'
هذه الفكرة مفيدة جدًا داخل الحلقات. جرّب البرنامج التالي:
name = 'World'
line = '-'
for char in name:
line = line + char
print(line)
خذ وقتك وتأكد أنك تفهم هذا البرنامج جيدًا. ما يحدث يشبه الآتي:
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')
...
التفاصيل هنا مهمة. ماذا يحدث إذا بدّلت ترتيب آخر سطرين وشغّلت البرنامج بهذه الصورة بدلًا من السابقة؟
name = 'World'
line = '-'
for char in name:
print(line)
line = line + char
لا يُضاف آخر محرف في name إلى line إلا في نهاية دورة الحلقة، أي بعد أن يكون print(line) قد نُفذ للمرة الأخيرة. لذلك لا يُطبع ذلك المحرف ولا الاسم الكامل في أسفل المثلث. إذا كان الأمر غير واضح، جرّب وضع print(line) قبل line = line + char وبعدها معًا.
لنتخلص الآن من محارف - التي تظهر في الناتج. ربما تستطيع تخمين الطريقة بالفعل.
النص الفارغ(Empty string) هو نص لا يحتوي على أي محارف إطلاقًا. ويُكتب زوجًا من علامات الاقتباس من دون شيء بينهما: ''. يمكنك التفكير فيه كأنه الصفر بالنسبة إلى النصوص؛ فإضافته إلى نص آخر تعيد النص الآخر كما هو، بالطريقة نفسها التي تجعل 0 + 5 تساوي 5.
جرّب هذا في الطرفية:
'' + '' + ''
لا تخلط بين النص الفارغ '' وبين ' '؛ فالثاني نص غير فارغ يحتوي على محرف واحد هو المسافة.
عدّل الآن البرنامج الأصلي للتخلص من الشرطات في الناتج، بحيث يطبع عند name = 'World' ما يلي:
W
Wo
Wor
Worl
World
تأكد أولًا أنك لا تعمل على النسخة المعطلة من البرنامج السابق في هذه الصفحة.
أي أن
line = line + charيجب أن تسبقprint(line).بعد ذلك لا تحتاج إلا إلى تغيير صغير جدًا.
نريد التخلص من
-. احذفها ببساطة.استخدم نصًا فارغًا!
النتيجة جميلة، أليس كذلك؟
نمط البدء بقيمة فارغة ثم بنائها تدريجيًا داخل حلقة for شائع جدًا، وستستخدمه كثيرًا. من أمثلة القيم الفارغة التي نبدأ بها: '' للنص الفارغ، و0 للأعداد، و[] للقائمة الفارغة التي ستتعرف عليها قريبًا.