التعامل مع النصوص — الفهرسة، التقطيع، ونصوص التنسيق (f-strings)
استخراج أجزاء من النصوص، وتنظيفها، وتعديلها، وبناء رسائل واضحة باستخدام f-strings — مع قاعدة أن النصوص غير قابلة للتعديل المباشر في مكانها.
- 1المشكلة
- 2الفهم
- 3أمثلة محلولة
- 4التوقع
- 5التطبيق
- 6التحدي
المشكلة التي نقوم بحلها
وصلك اسم مستخدم من نموذج تسجيل: " Rafi Ahmed ". مسافات زائدة في الطرفين، والمطلوب استخراج الاسم الأول فقط مع رسالة ترحيبية — "Welcome, Rafi!".
معالجة النصوص وتعديلها واستخراج أجزاء منها هي واحدة من أكثر المهام تكراراً في البرمجة: أسماء المستخدمين، عناوين البريد الإلكتروني، المعرفات، ومخرجات الـ API جميعها بيانات نصية.
وسيتضح لك اليوم مبدأ أساسي يوفر ساعات من الحيرة: في بايثون، النصوص غير قابلة للتعديل المباشر في مكانها (Strings are immutable). كتابة name.upper() لا تجعل المتغير name بحروف كبيرة من تلقاء نفسه. معرفة هذا المبدأ وكيفية التعامل معه هي أهم ما ستتعلمه في هذه المهمة.
بنهاية هذه المهمة ستكون قادراً على
- الوصول إلى أي حرف عبر موقعه (Index) من البداية أو النهاية
- قص جزء محدد من النص باستخدام التقطيع (Slicing)
- تنظيف النصوص وتعديلها عبر دوال
stripوupperوlowerوreplaceوsplit - فهم سبب ضرورة حفظ نتيجة أي دالة نصية داخل متغير
- بناء نصوص منسقة واضحة باستخدام نصوص التنسيق (f-strings)
المتطلبات المسبقة: المتغيرات والأنواع.
علامات التنصيص في بايثون
علامات التنصيص المفردة 'Rafi' والمزدوجة "Rafi" متطابقتان تماماً في بايثون. ووجودهما معاً يفيد لتجنب أخطاء وجود علامات تنصيص داخل النص نفسه:
print("It's working")
print('She said "yes"')It's working
She said "yes"وعلامات التنصيص الثلاثية (""") تُستخدم لكتابة نصوص تمتد لعدة أسطر:
note = """Dear customer,
Your order is confirmed.
Thank you."""
print(note)Dear customer,
Your order is confirmed.
Thank you.مثال تطبيقي متكامل
account.py:
# Turn a raw form entry into a clean display name and a login id
raw_input_name = " Rafi Ahmed "
domain = "example.com"
clean = raw_input_name.strip()
parts = clean.split(" ")
first_name = parts[0]
last_name = parts[-1]
login_id = f"{first_name.lower()}.{last_name.lower()}"
email = f"{login_id}@{domain}"
initials = f"{first_name[0]}{last_name[0]}"
print(f"Display name : {clean}")
print(f"Login id : {login_id}")
print(f"Email : {email}")
print(f"Initials : {initials}")
print(f"Name length : {len(clean)} characters")Display name : Rafi Ahmed
Login id : rafi.ahmed
Email : rafi.ahmed@example.com
Initials : RA
Name length : 10 charactersلماذا استخدمنا parts[-1]؟ لأن الاسم قد يتكون من كلمتين أو ثلاث، وأخذ الجزء الأخير من الخلف عبر المؤشر السلبي يضمن نجاح الكود في الحالتين.
الأخطاء الشائعة وحلولها
خطأ IndexError: string index out of range الفهرس المطلوب يتجاوز طول النص. إذا كان طول الكلمة 6 أحرف، فالفهارس الصالحة تبدأ من 0 حتى 5.
استدعاء الدالة دون تغير النص النصوص غير قابلة للتعديل المباشر. السطر name.strip() يعيد نصاً جديداً ولا يغير name نفسه. يجب عليك إسناد النتيجة: name = name.strip().
دالة strip() لم تحذف المسافات التي في المنتصف دالة strip() تحذف المسافات من الأطراف فقط. لحذف المسافات الداخلية استخدم replace(" ", "").
Step 4 of 6 — Predict
Check your understanding
What is the output of these four lines?
word = "PYTHON"
print(word[0])
print(word[-1])
print(word[1:4])- AP N YTH
- BP N YTHO
- CP O YTH
- DY N YTHO
The intent was to print Hello, RAFI!, but the name comes out lowercase and still padded with spaces. Why?
name = " rafi "
name.strip()
name.upper()
print(f"Hello, {name}!")- A`strip()` and `upper()` do not change the original — they return new text, so the result has to be assigned back to `name`
- BA method can only be called once on a piece of text, not twice
- CAn f-string cannot show the result of a method
- D`strip()` cannot be called before `upper()`; the order has to be reversed
What does this f-string print?
item = "pen"
qty = 3
price = 12.5
print(f"{qty} x {item} = {qty * price:.2f}")- A3 x pen = 37.50
- B3 x pen = 37.5
- C{qty} x {item} = {qty * price}
- D3 x pen = 3 * 12.5
Answering needs an account
Sign in to check your answers
The questions are above, and working them out in your head is the part that matters. Sign in to see the answers, the explanations and the three-level hints.
دورك الآن
اكتب ملفاً باسم slug.py لتحويل عنوان مقال إلى صيغة رابط ويب مناسب (URL Slug):
القيمة المبدئية: title = " Learn Python Step By Step "
يجب أن يكون الناتج مطابقاً لما يلي:
Title : Learn Python Step By Step
Slug : learn-python-step-by-step
Slug length: 25وفق الشروط التالية:
- إزالة المسافات الزائدة من الطرفين (
strip) - تحويل جميع الأحرف إلى أحرف صغيرة (
lower) - استبدال المسافات الداخلية بشرطات (
replace) - طباعة الأسطر الثلاثة باستخدام f-strings
There is more in this mission
What you read above is the complete mission — nothing was cut out of it. Pro adds:
- ما يحدث فعلياً في الكواليس — كيف ينفذ بايثون هذا الكود
- الحل الكامل للتمرين مشروحاً خطوة بخطوة
- تمارين إضافية أكثر صعوبة وتحدياً
- أسئلة المقابلات الوظيفية حول هذا الموضوع مع نموذج الإجابة
Step 6 of 6
التحدي — the chapter quiz
عشرة أسئلة متدرجة من السهل إلى الصعب. الأسئلة الأخيرة صعبة عن قصد.
Sign in to take the quiz