8.4 تنسيق السلاسل النصية
أهداف التعلم
في نهاية هذا القسم، ينبغي أن تكون قادرًا على:
- تنسيق قالب سلسلة نصية باستخدام وسائط الإدخال.
- استخدام
format()لإنشاء تنسيقات رقمية بناءً على قالب معين.
مواصفات تنسيق السلاسل النصية
توفر بايثون صياغة استبدال السلاسل النصية لتنسيق السلاسل النصية باستخدام وسائط الإدخال. يشمل تنسيق السلسلة النصية (formatting string) تحديد قواعد النمط وتعديل السلسلة النصية وفقًا لمواصفات التنسيق. ومن أمثلة ذلك استخدام الأنماط لبناء قيم سلاسل نصية مختلفة، وتحديد قواعد لطول السلسلة النصية ومحاذاتها.
تنسيق السلاسل النصية باستخدام حقول الاستبدال
تُستخدم حقول الاستبدال (Replacement fields) لتعريف نمط لإنشاء قيم سلاسل نصية متعددة تتوافق مع تنسيق معين. يوضح المثال أدناه قيمتين لسلسلتين نصيتين تستخدمان نفس القالب لتقديم طلبات لأفراد مختلفين لأخذ دورات مختلفة.
مثال 8.5
قيم السلاسل النصية من نفس القالب
Dear John, I'd like to take a programming course with Prof. Potter.
Dear Kishwar, I'd like to take a math course with Prof. Robinson.
في المثال أعلاه، حقول الاستبدال هي: 1) اسم الفرد الذي يُقدم إليه الطلب، 2) عنوان الدورة، و 3) اسم المدرب. لإنشاء قالب، يمكن إضافة حقول الاستبدال باستخدام {} لإظهار مكان مخصص لإدخال المستخدم. يُستخدم التابع format() لتمرير المدخلات لحقول الاستبدال في قالب سلسلة نصية.
مثال 8.6
تنسيق قالب السلسلة النصية لطلبات التسجيل في الدورات
يُعرَّف قالب سلسلة نصية بحقول استبدال أدناه لإنشاء قيم سلاسل نصية بوسائط إدخال مختلفة. يُستخدم التابع format() لتمرير المدخلات إلى القالب بنفس الترتيب.
s = "Dear {}, I'd like to take a {} course with Prof. {}."
print(s)
print(s.format("John", "programming", "Potter"))
print(s.format("Kishwar", "math", "Robinson"))
مخرجات الشِفرة أعلاه هي:
Dear {}, I'd like to take a {} course with Prof. {}.
Dear John, I'd like to take a programming course with Prof. Potter.
Dear Kishwar, I'd like to take a math course with Prof. Robinson.
مفاهيم تطبيقية
قالب السلسلة النصية وتنسيقها
حقول الاستبدال المُسمَّاة
يمكن وسم حقول الاستبدال بعلامة، تُسمى حقول استبدال مُسمَّاة (named replacement fields)، لسهولة الوصول وقابلية قراءة الشِفرة. يوضح المثال أدناه كيف يمكن استخدام حقول الاستبدال المُسمَّاة في قوالب السلاسل النصية.
مثال 8.7
قالب طقس الموسم باستخدام حقول الاستبدال المُسمَّاة
الوسيط المُسمَّى للاستبدال هو طريقة ملائمة لتعيين علامات أسماء لحقول الاستبدال وتمرير القيم المرتبطة بحقول الاستبدال باستخدام الأسماء المقابلة (بدلاً من تمرير القيم بالترتيب).
s = "Weather in {season} is {temperature}."
print(s)
print(s.format(season = "summer", temperature = "hot"))
print(s.format(season = "winter", temperature = "cold"))
مخرجات الشِفرة أعلاه هي:
Weather in {season} is {temperature}.
Weather in summer is hot.
Weather in winter is cold.
الاستخدام المتعدد لوسيط مُسمَّى
نظرًا لأن حقول الاستبدال المُسمَّاة يُشار إليها بمفتاح اسم، يمكن أن يظهر حقل الاستبدال المُسمَّى ويُستخدم أكثر من مرة في القالب. كما أن الترتيب الموضعي ليس ضروريًا عند استخدام حقول الاستبدال المُسمَّاة.
s = "Weather in {season} is {temperature}; very very {temperature}."
print(s)
print(s.format(season = "summer", temperature = "hot"))
print(s.format(temperature = "cold", season = "winter"))
مخرجات الشِفرة أعلاه هي:
Weather in {season} is {temperature}; very very {temperature}.
Weather in summer is hot; very very hot.
Weather in winter is cold; very very cold.
مفاهيم تطبيقية
أمثلة على حقول الاستبدال المُسمَّاة
حقول الاستبدال المُرَقَّمة
يمكن للتابع format() الخاص بالسلاسل النصية في بايثون استخدام الترتيب الموضعي لمطابقة الوسائط المُرَقَّمة. تُسمى حقول الاستبدال التي تستخدم الترتيب الموضعي للوسائط حقول الاستبدال المُرَقَّمة (numbered replacement fields). يبدأ فهرسة الوسائط من 0. مثال: print("{1}{0}".format("Home", "Welcome")) تُخرج قيمة السلسلة النصية "Welcome Home". الوسيط الأول، "Home"، موجود في الفهرس 0، والوسيط الثاني، "Welcome"، موجود في الفهرس 1. استبدال هذه الوسائط بترتيب "{1}{0}" ينشئ السلسلة النصية "Welcome Home".
يمكن لحقول الاستبدال المُرَقَّمة استخدام قيم الوسائط لحقول استبدال متعددة باستخدام نفس فهرس الوسيط. يوضح المثال أدناه كيف يُستخدم وسيط واحد لأكثر من حقل استبدال مُرقَّم.
مثال 8.8
حقل استبدال مُرقَّم لبناء عبارة
تُستخدم حقول الاستبدال المُرَقَّمة في هذا المثال لبناء عبارات مثل "very very cold" أو "very hot".
template1 = "{0} {0} {1}"
template2 = "{0} {1}"
print(template1.format("very", "cold"))
print(template2.format("very", "hot"))
مخرجات الشِفرة أعلاه هي:
very very cold
very hot
تنسيق طول السلسلة النصية ومحاذاتها
قد يكون تنسيق طول السلسلة النصية ضروريًا لتوحيد نمط المخرجات عند إنشاء وطباعة قيم سلاسل نصية متعددة من نفس السياق. يوضح المثال أدناه حالة استخدام لتنسيق السلاسل النصية في طباعة جدول بأعمدة ذات طول أدنى ومحاذاة محددة.
مثال 8.9
جدول مُنسَّق لقائمة طلاب فصل
جدول مُنسَّق لقائمة طلاب فصل
Student Name Major Grade
----------------------------------------------
Manoj Sara Computer Science A-
Gabriel Wang Electrical Engineering A
Alex Narayanan Social Sciences A+
في المثال أعلاه، تم تنسيق الجدول إلى ثلاثة أعمدة. يشغل العمود الأول 15 حرفًا ومحاذاته لليسار. يستخدم العمود الثاني 25 حرفًا ومحاذاته للمنتصف، ويستخدم العمود الأخير حرفين ومحاذاته لليمين. تُستخدم مواصفات التحكم في تنسيق المحاذاة والطول لإنشاء الجدول المُنسَّق.
يُستخدم عرض الحقل (field width) في مواصفات تنسيق السلسلة النصية لتحديد الطول الأدنى للسلسلة النصية المعطاة. إذا كانت السلسلة النصية أقصر من الطول الأدنى المحدد، فسيتم حشو السلسلة النصية بأحرف مسافة. يتم تضمين عرض الحقل في حقل مواصفات التنسيق باستخدام عدد صحيح بعد نقطتين رأسيتين. مثال: {name:15} يحدد أن الطول الأدنى لقيم السلاسل النصية التي يتم تمريرها إلى حقل name هو 15.
نظرًا لأنه يمكن استخدام عرض الحقل لتحديد الطول الأدنى للسلسلة النصية، يمكن حشو السلسلة النصية بأحرف مسافة من اليمين أو اليسار أو كليهما لتكون محاذية لليسار أو لليمين أو في المنتصف، على التوالي. يتم تحديد نوع محاذاة النص (string alignment type) باستخدام الأحرف < أو > أو ^ بعد النقطتين الرأسيتين عند تحديد طول الحقل. مثال: {name:^20} يحدد حقل استبدال مُسمَّى بطول أدنى يبلغ 20 حرفًا ومحاذاته للمنتصف.
| نوع المحاذاة | الرمز | مثال | المخرجات |
|---|---|---|---|
| محاذاة لليسار |
|
|
|
| محاذاة لليمين |
|
|
|
| توسيط | ^ |
|
|
مفاهيم تطبيقية
تحديد عرض الحقل والمحاذاة
تنسيق الأرقام
يمكن استخدام التابع format() لتنسيق القيم الرقمية. يمكن حشو القيم الرقمية للحصول على طول أدنى معين، ودقة، وحرف إشارة. تتبع صياغة تعديل القيم الرقمية البنية {[index]:[width][.precision][type]}. في الصياغة المعطاة،
- يشير حقل
indexإلى فهرس الوسيط. - يشير حقل
widthإلى الطول الأدنى للسلسلة النصية. - يشير حقل
precisionإلى دقة الفاصلة العائمة (floating-point precision) للرقم المعطى. - يوضح حقل
typeنوع الإدخال الذي يتم تمريره إلى التابعformat(). يتم تعريف مدخلات الفاصلة العائمة والعشرية بواسطة"f"و"d"على التوالي. كما يتم تعريف قيم السلاسل النصية بواسطة"s".
يلخص الجدول أدناه خيارات التنسيق لتعديل القيم الرقمية.
| مثال | المخرجات | الشرح |
|---|---|---|
|
|
تُظهر مواصفات التنسيق |
|
|
تُظهر مواصفات التنسيق |
|
|
تُظهر مواصفات التنسيق |
|
|
تُعرّف مواصفات التنسيق |
|
|
تُظهر مواصفات التنسيق |
مفاهيم تطبيقية
أمثلة على تنسيق القيم الرقمية
جرّب بنفسك
تنسيق قائمة من الأرقام
بالنظر إلى قائمة من الأرقام (ذات فاصلة عائمة أو صحيحة)، اطبع الأرقام بدقة خانتين عشريتين وعلى الأقل ستة أحرف.
Input: [12.5, 2]
Prints: 012.50
002:00