› كل الدروس
الدرس 6 من 12 28 دقيقة

Strings

فكّك الكلام وركّبه من تاني

الفكرة باختصار

string سلسلة حروف مرقّمة. تقدر توصل لأي حرف برقمه، وتقص أي جزء، وتغيّر شكله.

بعد الدرس ده هتعرف

  • توصل لأي حرف في string برقمه
  • تقص جزء من string بالتقطيع [a:b]
  • تستخدم string methods المهمة
  • تستخرج معلومة من string مش مرتّب
1

شوف الفكرة الأول

قبل أي code — افهم بيحصل إيه

2

الشرح

فكرة واحدة في كل خطوة

1

string عبارة عن حروف مرقّمة

كل حرف في string ليه رقم (اسمه index). و indexing بيبدأ من صفر مش واحد.

في كلمة "fever":
f رقمه 0 · e رقمه 1 · v رقمه 2 · e رقمه 3 · r رقمه 4

وفيه حيلة حلوة: الأرقام السالبة بتعد من الآخر. -1 هو آخر حرف دايمًا.

Python
1word = "fever"
2print(word[0])
3print(word[2])
4print(word[-1])
الناتج
f
v
r
2

طول string وكيف تلف عليه

len() بتدّيك عدد الحروف. وfor بتلف على الحروف واحد واحد.

Python
1word = "IT"
2print(len(word))
3for ch in word:
4 print(ch)
الناتج
2
I
T
3

التقطيع — خد جزء من string

text[start:end] بتدّيك من start لحد end — وend مش داخل (زي range بالظبط).

text[2:5] → الحروف 2 و 3 و 4
text[:3] → من الأول لحد 2
text[3:] → من 3 لآخر string
text[:] → string كله

Python
1code = "IT2026"
2print(code[0:2])
3print(code[2:])
4print(code[-2:])
الناتج
IT
2026
26
4

string methods اللي هتستخدمها كتير

.upper() حروف كبيرة · .lower() حروف صغيرة
.strip() يشيل المسافات من الطرفين
.replace(a, b) يبدّل
.count(x) يعدّ

نقطة مهمة جدًا: functions دي مش بتغيّر string الأصلي — بترجّع string جديد. strings في Python ثابتة. لو عايز تحتفظ بالنتيجة لازم تخزّنها.

Python
1name = " Ahmed Abdelrahman "
2clean = name.strip()
3print(f"[{clean}]")
4print(clean.upper())
5print(name)
الناتج
[Ahmed Abdelrahman]
AHMED ABDELRAHMAN
  Ahmed Abdelrahman  
5

التقسيم والتجميع

.split() بتقسم string لـ list. من غير value بتقسم عند المسافات، وتقدر تحدد علامة تانية زي ",".

.join() بتعمل العكس: بتجمّع list في string واحد.

Python
1line = "ahmed,90,IT"
2parts = line.split(",")
3print(parts)
4print(parts[1])
5print(" | ".join(parts))
الناتج
['ahmed', '90', 'IT']
90
ahmed | 90 | IT
6

البحث جوّه string

in بتقولك هل جزء موجود ولا لأ (بترجّع True/False).
.find() بتدّيك رقم أول ظهور، أو -1 لو مش موجود.
.startswith() و .endswith() للبداية والنهاية.

Python
1email = "student@borg.edu.eg"
2print("@" in email)
3print(email.find("@"))
4print(email.endswith(".eg"))
الناتج
True
7
True
7

نجمّع كل حاجة: استخراج معلومة

ده السيناريو الحقيقي: عندك سطر فيه معلومة، وعايز تطلّع جزء منه.

الخطوات: لاقي مكان العلامة → قُص بعدها → نضّف المسافات → حوّل لـ type الصح.

Python
1line = "Temp: 38.2 C"
2pos = line.find(":")
3piece = line[pos+1:-1]
4value = float(piece.strip())
5print(value)
6print(value > 37.5)
الناتج
38.2
True
8

التقطيع بخطوة — وقلب string

التقطيع ليه جزء تالت: الخطوة. text[start:end:step].

[::2] → خد حرف وسيب حرف
[::-1] → اقرا من الآخر للأول (قلب string)
[1:6:2] → من 1 لحد قبل 6، بخطوة 2

الحتة اللي بتعجب الناس: [::-1] بتقلب أي string في 6 حروف.

Python
1code = "abcdef"
2print(code[::2])
3print(code[::-1])
4print(code[1:5:2])
الناتج
ace
fedcba
bd
9

التنسيق — جداول نضيفة بـ f-string

جوّه {} تقدر تحط نقطتين وبعدها تعليمات شكل:

{name:<8} → حاذي لليسار في 8 خانات
{n:>5} → حاذي لليمين في 5 خانات
{x:.2f} → خانتين عشريتين
{r:.1%} → نسبة مئوية

دي اللي بتخلّي تقاريرك تبان مرتّبة بدل ما تبقى سطور مبعثرة.

Python
1rows = [("Abdelrahman", 92), ("Mona", 7)]
2for name, g in rows:
3 print(f"{name:<12}|{g:>5}")
4print(f"{0.856:.1%}")
الناتج
Abdelrahman |   92
Mona        |    7
85.6%
10

افحص شكل string قبل ما تستخدمه

قبل ما تحوّل string لرقم، اسأل: هو أصلاً أرقام؟

.isdigit() كله أرقام؟ · .isalpha() كله حروف؟ · .isspace() كله مسافات؟
.startswith() / .endswith() بيبدأ/بينتهي بكده؟

الفحص ده بيوفّر عليك errors ValueError وبيخلّي program بتاعك يتعامل مع بيانات وحشة من غير ما يقع.

Python
1values = ["25", "five", "7"]
2total = 0
3for v in values:
4 if v.isdigit():
5 total += int(v)
6 else:
7 print(f"skipped: {v}")
8print("Sum:", total)
الناتج
skipped: five
Sum: 32
3

وده كمان شوفه متحرك

الفكرة دي أسهل ما تتشاف من ما تتقرا

4

أمثلة محلولة

شوف إزاي بنفكّر قبل ما نكتب

مثال 1

الحروف الأولى من الاسم

المطلوب: من "Ahmed Hassan Abdelrahman" اطبع الاختصار A.H.A.

نفكّر إزاي؟

  1. 1الأسماء مفصولة بمسافات → .split()
  2. 2أول حرف في كل جزء هو part[0]
  3. 3أجمّعهم في string وأضيف نقطة بعد كل واحد
مثال 2

اسم file وامتداده

المطلوب: من "report_2026.pdf" اطبع الاسم والامتداد كل واحد لوحده.

نفكّر إزاي؟

  1. 1النقطة هي الفاصل — ألاقي مكانها
  2. 2الاسم = من الأول لحد النقطة
  3. 3الامتداد = بعد النقطة لآخر string
مثال 3

نضّف مدخلات المستخدم

المطلوب: جالك " AHMED@Borg.Edu.EG ". نضّفه ووحّد شكله.

نفكّر إزاي؟

  1. 1المسافات في الطرفين → .strip()
  2. 2توحيد الحالة → .lower()
  3. 3كل function بترجّع string جديد → أخزّن النتيجة في كل خطوة
مثال 4

عدّ الكلمات والحروف

المطلوب: عندك جملة. اطبع عدد حروفها، عدد كلماتها، وكام مرة فيها حرف معيّن.

نفكّر إزاي؟

  1. 1len() على string = عدد الحروف بالمسافات
  2. 2.split() بتدّي list كلمات، و len() عليها = عدد الكلمات
  3. 3.count() بتعدّ تكرار أي جزء
مثال 5

اقلب string

المطلوب: اقلب كلمة، وشوف هي متشابهة من الاتجاهين (palindrome) ولا لأ.

نفكّر إزاي؟

  1. 1التقطيع بخطوة سالبة [::-1] بيقلب string
  2. 2المقارنة بين الأصلي والمقلوب بتجاوب على السؤال
  3. 3المقارنة نفسها value بتاعتها True/False
مثال 6

استخرج value من سطر سجل

المطلوب: من السطر "TEMP:38.9:ROOM12" اطبع الدرجة كرقم وقول هي سخونية ولا لأ.

نفكّر إزاي؟

  1. 1السطر مقسّم بعلامة : → .split(":")
  2. 2الجزء اللي في النص هو value → item رقم 1
  3. 3لازم float() عشان أقارن
5

ورقة مراجعة

ارجعلها وإنت بتحل — مش محتاج تحفظها

string methods
الحاجةمعناهامثالالناتج
s[i]الحرف رقم i (من صفر)"fever"[0]f
s[-1]آخر حرف"fever"[-1]r
s[a:b]من a لحد قبل b"IT2026"[2:4]20
s[::-1]string مقلوب"abc"[::-1]cba
len(s)عدد الحروفlen("IT")2
.upper() / .lower()كبيرة / صغيرة"it".upper()IT
.strip()يشيل مسافات الطرفين" a ".strip()a
.split(x)يقسّم لـ list"a,b".split(",")['a', 'b']
x.join(xs)يجمّع list في string"-".join(["a","b"])a-b
.replace(a, b)يبدّل"2026".replace("0","9")2926
.find(x)مكان أول ظهور أو -1"abc".find("b")1
.count(x)عدد مرات التكرار"aaa".count("a")3
x in sهل موجود؟"@" in "a@b"True
.startswith(x)بيبدأ بكده؟"ALERT:1".startswith("A")True
6

مُفكِّك strings

شوفه بيشتغل سطر سطر

شغّل code خطوة خطوة

تابع كل variable وهو بيتكوّن. لاحظ إن `line` الأصلي ما اتغيّرش ولا مرة — كل function بترجّع string جديد.

1line = " Abdelrahman Hassan , 88 , IT "◂
2clean = line.strip()
3parts = clean.split(",")
4name = parts[0].strip()
5grade = int(parts[1].strip())
6dept = parts[2].strip()
7print(f"{name} ({dept}) → {grade}")
8print(f"Initials: {name[0]}.{name.split()[1][0]}.")
الذاكرة
line' Abdelrahman Hassan , 88 , IT '
الناتج على الشاشة
لسه ما اتطبعش حاجة…
1

حطّينا ' Abdelrahman Hassan , 88 , IT ' جوّه line

خطوة 19 خطوات
Python الحقيقيCPython 3.14

المحاكاة فوق بتشرحلك خطوة خطوة. دوس هنا عشان تشغّل نفس code على Python حقيقي وتتأكد بنفسك.
أول مرة هيحمّل ~11 ميجا — بعد كده بيبقى فوري.

7

غلطات بتحصل كتير

شوفها هنا بدل ما تضيّع ساعة فيها

غلط
word = "fever"
word[0] = "F"
صح
word = "fever"
word = "F" + word[1:]

strings ثابتة في Python — مينفعش تغيّر حرف. اعمل string جديد بدالها.

غلط
name = "  Abdelrahman  "
name.strip()
print(name)
صح
name = "  Abdelrahman  "
name = name.strip()
print(name)

.strip() بترجّع string جديد ومش بتغيّر الأصلي. لازم تخزّن النتيجة.

غلط
word = "IT"
print(word[2])
صح
word = "IT"
print(word[1])

indexing بيبدأ من صفر. آخر حرف في كلمة من حرفين رقمه 1 مش 2.

8

مسائل سريعة

فكّر الأول — بعدين اكشف

1

إيه الناتج؟

1print("borg"[1])
2

إيه الناتج؟

1print("borg"[-2])
3

إيه الناتج؟

1print("2026"[1:3])
4

إيه الناتج؟

1print(len(" IT "))
5

إيه value s في الآخر؟

1s = "Abdelrahman"
2s.upper()
3print(s)
6

إيه الناتج؟

1print("a,b,,c".split(","))
7

إيه الناتج؟

1print("abc".find("z"))
8

ليه ده بيطلّع error؟

1w = "fever"
2w[0] = "F"
9

جرّب بنفسك

اكتب code — ده الجزء اللي بيعلّم فعلاً

جرّب بنفسك

عندك إيميل "omar.hassan@borg.edu.eg". اطبع اسم المستخدم (اللي قبل @) بحروف كبيرة.

شغّل code خطوة خطوة
1email = "omar.hassan@borg.edu.eg"◂
2# write here
3
الذاكرة
email'omar.hassan@borg.edu.eg'
الناتج على الشاشة
لسه ما اتطبعش حاجة…
1

حطّينا 'omar.hassan@borg.edu.eg' جوّه email

خطوة 1خطوتين
Python الحقيقيCPython 3.14

المحاكاة فوق بتشرحلك خطوة خطوة. دوس هنا عشان تشغّل نفس code على Python حقيقي وتتأكد بنفسك.
أول مرة هيحمّل ~11 ميجا — بعد كده بيبقى فوري.

تمرين إضافي 2
جرّب بنفسك

عندك رقم موبايل "01012345678". اطبعه بالشكل 010-1234-5678 باستخدام التقطيع.

شغّل code خطوة خطوة
1phone = "01012345678"◂
2# write here
3
الذاكرة
phone'01012345678'
الناتج على الشاشة
لسه ما اتطبعش حاجة…
1

حطّينا '01012345678' جوّه phone

خطوة 1خطوتين
Python الحقيقيCPython 3.14

المحاكاة فوق بتشرحلك خطوة خطوة. دوس هنا عشان تشغّل نفس code على Python حقيقي وتتأكد بنفسك.
أول مرة هيحمّل ~11 ميجا — بعد كده بيبقى فوري.

تمرين إضافي 3
جرّب بنفسك

عدّ كام حرف متحرّك (a, e, i, o, u) في الكلمة "programming".

شغّل code خطوة خطوة
1word = "programming"◂
2count = 0
3# write here
4
الذاكرة
word'programming'
الناتج على الشاشة
لسه ما اتطبعش حاجة…
1

حطّينا 'programming' جوّه word

خطوة 13 خطوات
Python الحقيقيCPython 3.14

المحاكاة فوق بتشرحلك خطوة خطوة. دوس هنا عشان تشغّل نفس code على Python حقيقي وتتأكد بنفسك.
أول مرة هيحمّل ~11 ميجا — بعد كده بيبقى فوري.

تمرين إضافي 4
جرّب بنفسك

من الإيميل "mona.ali@borg.edu.eg" اطبع اسم المستخدم والدومين، وكمان الاسم الأول بحرف كبير في أوله.

شغّل code خطوة خطوة
1email = "mona.ali@borg.edu.eg"◂
2# write here
3
الذاكرة
email'mona.ali@borg.edu.eg'
الناتج على الشاشة
لسه ما اتطبعش حاجة…
1

حطّينا 'mona.ali@borg.edu.eg' جوّه email

خطوة 1خطوتين
Python الحقيقيCPython 3.14

المحاكاة فوق بتشرحلك خطوة خطوة. دوس هنا عشان تشغّل نفس code على Python حقيقي وتتأكد بنفسك.
أول مرة هيحمّل ~11 ميجا — بعد كده بيبقى فوري.

10

اختبر نفسك

كل إجابة معاها السبب

1

إيه الناتج؟

1print("borg"[-2])
2

إيه الناتج؟

1print("abc".find("z"))
3

إيه الناتج؟

1print("abc"[::-1])
4

إيه اللي هيتطبع؟

1w = "python"
2print(w[1])
5

إيه ناتج التقطيع ده؟

1print("IT2026"[2:4])
6

بعد السطرين دول، name value بتاعتها إيه؟

1name = " Abdelrahman "
2name.strip()
7

عايز آخر حرف في string مش عارف طوله. إيه أسهل طريقة؟

خلصت الدرس؟

علّم عليه عشان تعرف إنت وصلت لفين لما ترجع تاني.

الدرس اللي بعده: Files ←