cb
codebamin
الفصل 7 · التعامل المتقدم مع النصوص (Strings)

تنسيق النصوص المباشر (f-strings)

حتى الآن كنا ندمج النصوص باستخدام الجمع +، مثل:

__copyable__ name = "Alice" friend = 'Bob' meal = "lunch" print(name + " went to " + meal + " with " + friend + '.')

لكن هذه الطريقة تصبح مرهقة كلما زادت الأجزاء. يمكن كتابة الشيء نفسه بصورة أوضح باستخدام f-string. استبدل السطر الأخير بـ:

print(f"{name} went to {meal} with {friend}.")

تأكد من كتابة الحرف f قبل علامة الاقتباس.

صيغة الـf-string تبدأ بالحرف f قبل السلسلة النصية. وداخل النص يمكنك وضع تعبيرات بايثون بين الأقواس المعقوفة {}؛ يقوم بايثون بتقييم كل تعبير ثم يحوّل نتيجته إلى نص ويضعها في مكانها.

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

جرّب البرنامج التالي:

__copyable__ __program_indented__

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

أصلح كل عمليات الدمج في البرنامج باستخدام f-string واحدة، بحيث يُبنى النص المطلوب بوضوح ويعمل مهما كانت قيمة age.

لا يلزم أن تحتوي الأقواس المعقوفة داخل f-string على اسم متغير فقط؛ يمكن أن تضع داخلها أي تعبير صالح في بايثون، وسيتم تقييمه أولًا ثم إدراج النتيجة في النص.

جرّب:

f"2 3 + 4 is equal to {2 3 + 4}"

لاحظ أن الجزء خارج الأقواس يبقى نصًا كما كتبته، بينما الجزء داخل {} يُحسب.

تذكّر أنك تستطيع استخدام علامات الاقتباس المزدوجة عندما يحتوي النص على فاصلة عليا، وأن صيغة f-string هي مجرد طريقة لكتابة السلسلة في الكود؛ بعد تقييمها لا يبقى الحرف f أو الأقواس المعقوفة في القيمة النهائية.

البرنامج التالي مكسور:

__copyable__

people = ["Alice", "Bob", "Charlie"]
print('There are' + people.length() + 'people waiting, the first one's name is' + people.1 + '.')

أصلحه بطريقة عامة بحيث يطبع:

There are 3 people waiting, the first one's name is Alice.

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

ممتاز!

من الآن فصاعدًا، استخدم f-strings لبناء النصوص عندما تكون مناسبة بدل الاعتماد على + في كل مرة؛ فهي غالبًا أوضح وأسهل قراءة.

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