العمليات على النصوص في بايثون: قِسْ، قُصّ، ابحث، وقسّم
تعلّم قياس طول النص بـ len، وقصّ أجزائه بالفهرس والتقطيع، والبحث فيه بـ count و in، وتحويل حروفه بـ upper، وتقسيمه إلى قائمة بـ split.
كتب صديقك اسمه في لعبتكم المفضّلة بحروف صغيرة، وأنت تريده بحروف كبيرة. ورسالة طويلة وصلتك، وتريد أن تعرف كم مرة ذُكرت فيها كلمة “مباراة”. هل تعدّ بيدك؟ في هذا الدرس ستتعلّم كيف تجعل بايثون تقيس النص، وتقصّه، وتبحث فيه، وتقسّمه في لحظة.
🎯 ماذا ستتعلم؟
بنهاية هذا الدرس ستكون قادرًا على:
- معرفة عدد حروف أي نص بـ
len(). - الوصول إلى حرف معيّن أو قصّ جزء من النص بالفهرس والتقطيع.
- عدّ الكلمات والبحث عنها بـ
count()وindex()وin. - تحويل الحروف الإنجليزية إلى كبيرة أو صغيرة بـ
upper()وlower(). - تقسيم جملة إلى قائمة من الكلمات بـ
split().
🧰 ماذا تحتاج قبل أن تبدأ؟
يجب أن تعرف ما هو المتغيّر وكيف تحفظ فيه نصًا، وهذا شرحناه في المتغيّرات وأنواع البيانات في بايثون. وستفيدك معرفة القوائم والفهرس من درس القوائم في بايثون، لأن النص يشبه القائمة كثيرًا. كل الأمثلة تعمل في مترجم بايثون في المتصفح بدون تثبيت.
الفكرة ببساطة
تخيّل أن النص شريط ورقي طويل، وكل حرف مكتوب في مربّع صغير على هذا الشريط. المسافة بين الكلمتين مربّع أيضًا، لكنه فارغ.
بما أن الحروف في مربّعات مرتّبة، تستطيع أن تعدّ المربّعات، وتقصّ قطعة من الشريط، وتبحث عن مربّع فيه حرف معيّن. وهذا بالضبط ما تفعله العمليات على النصوص (string operations) في بايثون.
النص في بايثون اسمه السلسلة النصية (string)، ويُكتب بين علامتي تنصيص " " أو ' '. وكما أن للقائمة فهرسًا يبدأ من صفر، فللنص فهرس يبدأ من صفر أيضًا.
الخطوة 1: كم حرفًا في النص؟
الدالة len() التي استخدمتها مع القوائم تعمل مع النصوص أيضًا. تعطيك عدد المربّعات على الشريط، أي عدد الحروف. لاحظ أن المسافات وعلامات الترقيم تُحسب معها.
message = "Hello world!"
print(len(message))
12
الكلمة الأولى فيها 5 حروف، والثانية 5 حروف، والمسافة بينهما 1، وعلامة التعجب 1. المجموع 12. وتعمل الدالة نفسها مع النص العربي:
name = "نورة"
print(len(name))
4
الخطوة 2: حرف واحد بالفهرس
لكل حرف رقم مكان يسمّى الفهرس (index)، ويبدأ العدّ من صفر، تمامًا كما في القوائم. لقراءة حرف، اكتب اسم المتغيّر ثم الفهرس بين قوسين مربّعين.
سنستخدم كلمات إنجليزية في أمثلة الفهرس، لأن حروفها تُكتب من اليسار إلى اليمين، فيسهل عليك عدّ المربّعات على الشاشة.
word = "python"
print(word[0])
print(word[1])
print(word[5])
p
y
n
الحرف الأول p فهرسه 0، والثاني y فهرسه 1، والأخير n فهرسه 5 لأن الكلمة فيها 6 حروف. والفهرس السالب يعدّ من النهاية، فـ word[-1] يعطيك الحرف الأخير مباشرة:
word = "python"
print(word[-1])
print(word[-2])
n
o
الخطوة 3: قصّ جزء من النص (التقطيع)
ماذا لو أردت أكثر من حرف؟ اكتب فهرسين بينهما نقطتان [start:stop]. هذا يسمّى التقطيع (slicing). القطعة تبدأ من start وتنتهي قبل stop، أي أن حرف stop نفسه لا يدخل.
word = "python"
print(word[0:3])
print(word[3:6])
pyt
hon
في word[0:3] أخذنا الحروف ذات الفهارس 0 و 1 و 2 فقط. وهناك اختصار جميل: إن تركت الرقم الأول تبدأ القطعة من أول النص، وإن تركت الثاني تستمر حتى آخره.
word = "python"
print(word[:2])
print(word[2:])
print(word[-3:])
py
thon
hon
اقرأ word[-3:] هكذا: “من الحرف الثالث من النهاية إلى آخر النص”. ويمكنك وضع الفهرس السالب في أي مكان من التقطيع، فـ word[:-2] يحذف آخر حرفين. هذه الطريقة مفيدة جدًا لمعرفة امتداد ملف مثل .jpg.
🚀 للمتقدمين: يمكنك إضافة رقم ثالث هو الخطوة
[start:stop:step]. فـword[::2]يأخذ حرفًا ويترك حرفًا ويعطيكpto. والأجمل أنword[::-1]يعكس النص كاملًا ويعطيكnohtyp. جرّبها مع اسمك بالإنجليزية.
الخطوة 4: العدّ والبحث
لتعرف كم مرة يتكرّر حرف أو كلمة، استخدم count(). ولتعرف مكان أول ظهور لها، استخدم index().
message = "Hello world!"
print(message.count("l"))
print(message.index("o"))
3
4
حرف l يظهر 3 مرات، وأول o يقع في الفهرس 4. لاحظ أن index() تعطيك أول ظهور فقط، حتى لو تكرّر الحرف بعد ذلك.
وتعمل الطريقتان مع الكلمات الكاملة أيضًا، وبالعربية. هنا نعدّ كلمة “كرة” في جملة:
sentence = "أحب كرة القدم وكرة السلة"
print(sentence.count("كرة"))
print(sentence.index("القدم"))
2
8
وأحيانًا لا تريد الرقم، بل تريد فقط أن تعرف: هل الكلمة موجودة أم لا؟ الكلمة in تجيبك بـ True أو False:
sentence = "أحب كرة القدم وكرة السلة"
print("السلة" in sentence)
print("التنس" in sentence)
True
False
الخطوة 5: حروف كبيرة وصغيرة
في الإنجليزية توجد حروف كبيرة وصغيرة. الطريقة upper() تعطيك نسخة بحروف كبيرة، و lower() نسخة بحروف صغيرة. هذا مفيد عندما يكتب اللاعب اسمه بأي شكل وتريد توحيده.
team = "Falcons"
print(team.upper())
print(team.lower())
print(team)
FALCONS
falcons
Falcons
انتبه للسطر الأخير: المتغيّر team لم يتغيّر. الطريقتان تصنعان نصًا جديدًا ولا تلمسان الأصل. الحروف العربية ليس فيها كبير وصغير، لذلك لا تؤثر فيها هاتان الطريقتان.
وهناك طريقتان تسألان عن بداية النص ونهايته: startswith() و endswith(). وتجيبان بـ True أو False:
file_name = "homework.pdf"
print(file_name.startswith("home"))
print(file_name.endswith(".pdf"))
print(file_name.endswith(".png"))
True
True
False
الخطوة 6: تقسيم النص إلى قائمة
عندك جملة فيها أسماء موادّ مفصولة بمسافات، وتريد كل مادة في عنصر مستقل. الطريقة split() تقصّ الشريط عند كل مسافة، وتعطيك قائمة (list) بالقطع.
subjects = "رياضيات علوم عربي إنجليزي"
subject_list = subjects.split(" ")
print(subject_list)
print(len(subject_list))
print(subject_list[0])
['رياضيات', 'علوم', 'عربي', 'إنجليزي']
4
رياضيات
ما بين القوسين هو الفاصل الذي تقصّ عنده. يمكنك القصّ عند الفاصلة أو أي علامة أخرى:
scores = "10,25,40"
parts = scores.split(",")
print(parts)
['10', '25', '40']
لاحظ أن العناصر الناتجة نصوص وليست أرقامًا، لأنها قُصّت من نص. لو أردت جمعها، حوّلها أولًا بـ int() كما تعلّمت في درس المتغيّرات.
⚠️ أخطاء شائعة
الأخطاء طبيعية جدًا في البداية، وكل مبرمج مرّ بها. إليك ثلاثة تقابلها كثيرًا مع النصوص:
1. محاولة تغيير حرف داخل النص
❌ هذا الكود يتوقف بخطأ
word = "python"
word[0] = "j"
TypeError: 'str' object does not support item assignment
النص في بايثون لا يتغيّر بعد إنشائه. الحل أن تبني نصًا جديدًا من القطع التي تريدها:
# ✅ نبني نصًا جديدًا بدل تغيير القديم
word = "python"
new_word = "j" + word[1:]
print(new_word)
jython
2. البحث بـ index() عن شيء غير موجود
❌ هذا الكود يتوقف بخطأ
sentence = "أحب كرة القدم"
print(sentence.index("السلة"))
ValueError: substring not found
الرسالة تعني “النص الفرعي غير موجود”. تأكد أولًا بـ in أو count()، فهما لا يوقفان البرنامج أبدًا:
# ✅ نسأل أولًا قبل أن نطلب المكان
sentence = "أحب كرة القدم"
print("السلة" in sentence)
print(sentence.count("السلة"))
False
0
3. الظن أن upper() تغيّر المتغيّر نفسه
❌ الكود يعمل، لكن النتيجة ليست ما تريد
name = "sara"
name.upper()
print(name)
sara
الطريقة أعادت نصًا جديدًا، لكنك لم تحفظه في أي مكان. احفظ النتيجة في المتغيّر:
# ✅ نحفظ النص الجديد
name = "sara"
name = name.upper()
print(name)
SARA
🧪 جرّب بنفسك
التحدي 1: بطاقة اسمك
احفظ اسمك بالإنجليزية في متغيّر، ثم اطبع عدد حروفه، وأول حرف فيه، وآخر حرف فيه، ثم اطبعه كاملًا بحروف كبيرة.
# غيّر الاسم إلى اسمك ثم أكمل الطباعة
my_name = "salem"
print(my_name)
salem
💡 اضغط لرؤية الحل
my_name = "salem"
print(len(my_name))
print(my_name[0])
print(my_name[-1])
print(my_name.upper())
5
s
m
SALEM
التحدي 2: نوع الملف
عندك اسم ملف صورة. اطبع آخر ثلاثة حروف منه لتعرف امتداده، ثم اطبع الاسم بدون الامتداد والنقطة، ثم تحقق هل ينتهي بـ .jpg.
file_name = "trip_photo.jpg"
# اطبع: jpg ثم trip_photo ثم True
print(file_name)
trip_photo.jpg
💡 اضغط لرؤية الحل
file_name = "trip_photo.jpg"
print(file_name[-3:])
print(file_name[:-4])
print(file_name.endswith(".jpg"))
jpg
trip_photo
True
التحدي 3: عدّ الكلمات
عندك جملة من رسالة صديقك. قسّمها إلى كلمات، واطبع عدد الكلمات، وآخر كلمة فيها، وكم مرة ذُكرت كلمة “مباراة”.
message = "غدًا مباراة الفريق في المدرسة وبعدها مباراة الحي"
# قسّم الجملة ثم اطبع العدد وآخر كلمة وعدد مرات مباراة
print(message)
غدًا مباراة الفريق في المدرسة وبعدها مباراة الحي
💡 اضغط لرؤية الحل
message = "غدًا مباراة الفريق في المدرسة وبعدها مباراة الحي"
words = message.split(" ")
print(len(words))
print(words[-1])
print(message.count("مباراة"))
8
الحي
2
✅ اختبر نفسك
-
ماذا يطبع
print("python"[1])؟- أ) p
- ب) y
- ج) t
-
ماذا يطبع
print("banana".count("a"))؟- أ) 2
- ب) 3
- ج) 6
-
صح أم خطأ:
name.upper()تغيّر المتغيّرnameنفسه إلى حروف كبيرة.
💡 اضغط لرؤية الإجابات
- ب) y، لأن الفهرس 1 هو الحرف الثاني.
- ب) 3، لأن حرف a يتكرّر ثلاث مرات في الكلمة.
- خطأ. الطريقة تعيد نصًا جديدًا، ولا يتغيّر
nameإلا إذا حفظت النتيجة فيه.
📝 الخلاصة
- النص شريط من الحروف، و
len()تعطيك عدد حروفه مع المسافات. - الفهرس يبدأ من 0، والتقطيع
[start:stop]يقصّ قطعة تنتهي قبلstop. count()تعدّ، وindex()تعطي مكان أول ظهور، وinتجيب بصح أو خطأ.upper()وlower()تصنعان نصًا جديدًا ولا تغيّران الأصل.split()تقسّم النص عند الفاصل الذي تختاره وتعيد قائمة.
⏭️ الخطوة التالية
صرت الآن تتحكم في النصوص كما تشاء: تقيسها، وتقصّها، وتبحث فيها. جرّب أن تكتب جملة طويلة في مترجم بايثون، وتقسّمها، وتطبع كل كلمة بحروف كبيرة. وفي الدرس القادم ستتعلّم كيف يتخذ برنامجك قرارًا بنفسه مع الشروط في بايثون، مثل: هل الكلمة موجودة؟ إذًا اطبع رسالة.