Menu
العربية
جرّب في Playground

السلاسل النصية في بايثون: f-strings والتقطيع والدوال

تعلّم التعامل مع النصوص في بايثون: إنشاء السلاسل، استخدام f-strings، التقطيع (slicing)، وأهم الدوال مثل split و join و replace و strip.

النصوص في بايثون مع دوال جاهزة

السلاسل النصية في بايثون هي ببساطة سلسلة من الحروف، وستتعامل معها أكثر من أي نوع آخر من البيانات. فكل اسم، وعنوان، ورسالة، ورابط URL، ومسار ملف، وحتى الاستجابات القادمة من الـ API، كلها في النهاية نصوص.

لإنشاء سلسلة نصية، ضعها بين علامات اقتباس — مفردة، أو مزدوجة، أو ثلاثية:

main.py
Output
Click Run to see the output here.

علامات الاقتباس المفردة والمزدوجة متبادلة، فاستخدم ما يجنّبك تهريب الأحرف. مثلاً "don't" تبدو نظيفة، بينما 'don\'t' تحتاج إلى شرطة مائلة عكسية.

السلاسل النصية في بايثون غير قابلة للتعديل (immutable). بمجرد إنشاء السلسلة، لا يمكنك تغيير أي حرف فيها مباشرةً. كل عملية تبدو وكأنها تعدّل السلسلة هي في الحقيقة تُرجع سلسلة جديدة. لهذا السبب ستكتب text = text.upper() بدلاً من text.upper() فقط — فبدون إعادة الإسناد، ستضيع السلسلة الجديدة التي كُتبت بأحرف كبيرة.

دمج النصوص في بايثون وتكرارها

هناك معاملان يقومان بمعظم عمليات دمج النصوص التي ستحتاجها:

main.py
Output
Click Run to see the output here.

+ يقوم بدمج النصوص، و * يُكرّر السلسلة النصية. كلا العمليتين تُرجع سلسلة جديدة.

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

f-string بايثون: الطريقة الأكثر استخداماً للتنسيق

ضع حرف f قبل علامة الاقتباس الافتتاحية، وستتحول السلسلة إلى قالب جاهز. أي تعبير تضعه بين {...} سيُستبدل بقيمته مباشرة:

main.py
Output
Click Run to see the output here.

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

كما تدعم f-string في بايثون محددات التنسيق بعد النقطتين :، وذلك للتحكم في تنسيق الأرقام والحشو والمحاذاة:

main.py
Output
Click Run to see the output here.

مواصفات التنسيق هذه هي نفسها التي يعتمدها str.format()، ويستحق إلقاء نظرة سريعة عليها بعد أن تتقن الأساسيات. لست بحاجة إليها في أول يوم من كتابة الكود.

التقطيع (Slicing): اختر جزءًا من النص

السلاسل النصية في بايثون قابلة للفهرسة مثل أي تسلسل آخر. كل حرف له موقع يبدأ من الصفر، ويمكنك انتقاء حرف واحد أو نطاق كامل من الأحرف:

main.py
Output
Click Run to see the output here.

النمط [start:stop:step] تلاقيه في القوائم وباقي التسلسلات كمان، فخلّيك تعطيه بضع دقائق من وقتك عشان تفهمه كويس، راح توفّر عليك كتير لاحقاً.

في نقطتين لازم ننتبه لهم:

  • المؤشر stop مستثنى من النتيجة: word[0:2] يرجّع الحرفين اللي مؤشراتهم 0 و 1، مش 2.
  • المؤشرات السالبة تبدأ العدّ من النهاية: -1 هو آخر حرف، و -2 الحرف اللي قبله، وهكذا.

عكس نص بايثون بخطوة واحدة

السلاسل النصية في بايثون ما عندها دالة .reverse() لأنها غير قابلة للتعديل (immutable)، لكن التقطيع (slicing) مع خطوة -1 يخلّص المهمة بسطر واحد:

main.py
Output
Click Run to see the output here.

word[::-1] تعني: "من البداية إلى النهاية، بخطوة عكسية مقدارها 1". الناتج سلسلة نصية جديدة تمامًا، أما الأصلية فتبقى كما هي دون أي تغيير. وإذا أردت المرور على الأحرف بترتيب معكوس دون إنشاء سلسلة جديدة في الذاكرة، فاستخدم reversed(word) التي تُرجع مُكرِّرًا كسولًا (lazy iterator).

كيفية معرفة طول السلسلة في بايثون

الدالة len(text) تُرجع عدد الأحرف داخل النص:

main.py
Output
Click Run to see the output here.

لاحظ أن len تحسب نقاط يونيكود (code points) وليس البايتات. فمثلاً len("café") تساوي 4 وليس 5، رغم أن ترميز UTF-8 يستهلك عدداً أكبر من البايتات — وهذا هو السلوك المطلوب في أغلب الحالات.

كيفية التحقق من احتواء نص على كلمة معينة في بايثون

المعامل in هو الطريقة المثالية لهذا الغرض، وقراءته تبدو وكأنها جملة إنجليزية عادية:

main.py
Output
Click Run to see the output here.

للمقارنات التي لا تُفرّق بين الأحرف الكبيرة والصغيرة، وحِّد الطرفين أولًا:

main.py
Output
Click Run to see the output here.

إذا كنت تحتاج إلى موقع النص الفرعي وليس مجرد إجابة بنعم أو لا، استخدم .find() — فهي تُرجع رقم الفهرس، أو -1 إذا لم يكن النص الفرعي موجودًا.

أشهر دوال السلاسل النصية في بايثون

السلاسل النصية في بايثون تمتلك عشرات الدوال، لكن هذه المجموعة هي التي ستستخدمها بشكل شبه يومي:

main.py
Output
Click Run to see the output here.

التقسيم والدمج:

main.py
Output
Click Run to see the output here.

.split(separator) يحوّل السلسلة النصية إلى قائمة، و separator.join(list_of_strings) يعيد لصقها من جديد. هاتان الدالتان تتولّيان نصيبًا كبيرًا من معالجة النصوص في المشاريع الحقيقية.

وإليك ثنائيًا مفيدًا آخر:

main.py
Output
Click Run to see the output here.

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

كيف تتحقق من محتوى السلسلة النصية

هناك عدة دوال تُرجع قيمة منطقية (True أو False)، وهي مفيدة داخل جمل if:

main.py
Output
Click Run to see the output here.

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

تهريب الرموز الخاصة في السلاسل النصية

بعض الرموز تحتاج إلى خط مائل عكسي (\) حتى تظهر داخل السلسلة النصية:

main.py
Output
Click Run to see the output here.

إذا كنت تتعامل مع مسارات ويندوز أو التعابير النمطية (regex)، فإن السلاسل النصية الخام (raw strings) توفّر عليك الكثير من الصداع. ضع حرف r قبل علامة الاقتباس، وستتوقف الشرطة المائلة العكسية عن العمل كرمز هروب:

main.py
Output
Click Run to see the output here.

النصوص في كل مكان، فلتُبقِها قابلة للقراءة

ثلاث عادات تمنع الكود المليء بالسلاسل النصية في بايثون من التحوّل إلى فوضى:

  1. استخدم f-string للدمج بين القيم. لا تُسلسِل أنواعًا مختلفة باستخدام +.
  2. أعِد الإسناد عند "التعديل". اكتب text = text.strip() بدلًا من text.strip() وحدها.
  3. اعتمد على .split() و .join() قبل أن تكتب حلقات يدوية لتقسيم النصوص أو تجميعها. فهي أسرع وأوضح، والخطأ فيها أصعب.

في الدرس التالي: شرح موسّع لـ f-string في بايثون — أداة التنسيق التي مرّت عليك بضع مرات بالفعل، إلى جانب مواصفات تنسيق الأرقام والتواريخ التي تستحق الإتقان.

الأسئلة الشائعة

ما هي الـ f-string في بايثون؟

الـ f-string هي سلسلة نصية يُكتب قبلها الحرف f، وأي شيء تضعه بين {...} داخلها يُستبدل تلقائياً بقيمة التعبير البرمجي. مثال: f"Hello, {name}!" يضع قيمة المتغير name الحالية داخل النص أثناء التشغيل.

كيف أعكس نصاً في بايثون؟

استخدم التقطيع (slicing) بخطوة -1 هكذا: reversed_text = original[::-1]. هذا يُرجع سلسلة جديدة تحتوي على نفس الحروف لكن بترتيب معكوس. السلسلة الأصلية تبقى كما هي لأن السلاسل في بايثون غير قابلة للتعديل (immutable).

كيف أقسّم سلسلة نصية في بايثون؟

استدعِ الدالة .split() على السلسلة. بدون أي معامل، تُقسّم عند أي فراغ: "a b c".split() تُرجع ['a', 'b', 'c']. ويمكنك تمرير فاصل محدد: "a,b,c".split(",") تُرجع ['a', 'b', 'c'].

هل السلاسل النصية في بايثون قابلة للتعديل؟

لا، السلاسل في بايثون غير قابلة للتعديل (immutable) — بمجرد إنشاء السلسلة لا يمكنك تغيير أي حرف فيها مباشرة. كل دالة تبدو وكأنها "تعدّل" السلسلة هي في الحقيقة تُرجع سلسلة جديدة. لهذا ترى دائماً نمطاً مثل text = text.strip() حيث نعيد إسناد النتيجة إلى نفس المتغير.

كيف أدمج سلسلتين نصيتين في بايثون؟

استخدم العلامة + لدمج سلسلتين: "hello" + " " + "world". ولإدخال قيمة متغير داخل جملة، يُفضَّل استخدام f-string هكذا: f"Hello, {name}". أما إذا أردت دمج عناصر كثيرة من قائمة، فاستخدم separator.join(pieces) — فهي أسرع وأوضح من سلسلة + متتالية.

كيف أعرف طول سلسلة نصية في بايثون؟

استخدم الدالة المدمجة len(text)، وهي تُرجع عدد الحروف (Unicode code points)، لذا فإن len("café") يساوي 4. إذا أردت الطول بالبايت، حوّل السلسلة أولاً: len(text.encode("utf-8")).

تعلّم البرمجة مع Coddy

ابدأ الآن