الدرس 17 من دورة Python للمبتدئين

تحسين إدخال المستخدم: اجعل البرنامج أكثر مرونة

في الدرس السابق طلبنا من المستخدم كتابة yes أو no. المشكلة أن المستخدم قد يكتب Yes أو YES أو يترك مسافة قبل الإجابة. في هذا الدرس سنجعل البرنامج أذكى باستخدام strip و lower.

المستوى: مبتدئ جدًا النتيجة: إدخال أنظف وأكثر مرونة مدة التطبيق: 25 - 30 دقيقة
طريقة CIT للتعلم الهادئ: البرنامج الاحترافي لا يفترض أن المستخدم سيكتب دائمًا بالطريقة المثالية. لذلك نبدأ بتعلم كيف ننظف إدخال المستخدم قبل استخدامه في الشروط.
مهم قبل البداية: strip و lower تعملان على النصوص. وبما أن input ترجع نصًا دائمًا، فمن الطبيعي أن نستخدمهما كثيرًا مع input.

ما النتيجة التي يجب أن تخرج بها؟

في نهاية الدرس ستفهم هاتين الخطوتين:

has_ticket_text = input("هل لديك تذكرة؟ ")
has_ticket = has_ticket_text.strip().lower()

وستعرف أنه يحول إجابات مثل:

yes
Yes
YES
 yes 
 YES 

إلى صيغة واحدة:

yes
strip() تزيل المسافات من بداية ونهاية النص.
lower() تحول الحروف الإنجليزية إلى صغيرة.
تنظيف input يجعل الشروط أكثر مرونة.
خريطة درس تنظيف إدخال المستخدم في Python
قبل وبعد تنظيف إدخال المستخدم في Python
1

ما المشكلة التي نحلها؟

في الدرس السابق كان الشرط يعتمد على أن المستخدم يكتب:

yes

لكن المستخدم قد يكتب:

Yes
YES
 yes
yes 

بالنسبة للإنسان كلها تعني نعم، لكن بالنسبة لـ Python هذه نصوص مختلفة إذا لم ننظفها.

الفكرة ببساطة: تنظيف إدخال المستخدم يعني تحويل الإجابات المختلفة في الشكل إلى شكل واحد يستطيع البرنامج التعامل معه بسهولة.
تحقق قبل الانتقال ✅ هل فهمت لماذا لا نثق دائمًا أن المستخدم سيكتب الإجابة بالشكل المثالي؟
2

أنشئ ملف الدرس السابع عشر

افتح مجلد الدورة داخل VS Code:

python_course

ثم أنشئ ملفًا جديدًا باسم:

lesson_17.py

افتح الملف داخل Editor.

توقف لحظة ✅ هل ظهر ملف lesson_17.py داخل Explorer؟ إذا نعم، انتقل للخطوة التالية.
3

جرّب المشكلة قبل الحل

اكتب هذا الكود:

answer = input("اكتب yes: ")

if answer == "yes":
    print("تم قبول الإجابة")
else:
    print("الإجابة غير مطابقة")

شغل البرنامج واكتب:

Yes

ستلاحظ أن البرنامج لا يعتبرها مطابقة لـ yes.

لماذا؟ لأن "Yes" ليست مثل "yes" بالنسبة لـ Python. الحرف الكبير Y يجعل النص مختلفًا.
تحقق قبل الانتقال ✅ هل رأيت أن Yes لا تطابق yes؟ إذا نعم، فقد فهمت سبب الحاجة إلى lower.
4

ما وظيفة lower؟

lower تحول الحروف الإنجليزية الكبيرة إلى حروف صغيرة.

answer = "YES"
print(answer.lower())

النتيجة:

yes
شرح strip و lower في Python
لماذا بعد lower نضع قوسين؟ لأن lower وظيفة جاهزة مرتبطة بالنص. القوسان يعنيان: نفّذ هذه الوظيفة الآن.
سؤال سريع 🧠 ماذا تفعل lower؟ تحول YES و Yes إلى yes.
5

ما وظيفة strip؟

strip تزيل المسافات الزائدة من بداية النص ونهايته.

answer = " yes "
print(answer.strip())

النتيجة:

yes
معلومة مهمة: strip لا تزيل كل المسافات داخل الجملة. هي تزيل المسافات من البداية والنهاية فقط. وهذا هو المطلوب غالبًا مع input.
سؤال سريع 🧠 ماذا تفعل strip؟ تزيل المسافات الزائدة من بداية ونهاية النص.
6

استخدم lower و strip مع input

الآن ندمجها مع input:

answer_text = input("اكتب yes أو no: ")
answer = answer_text.strip().lower()
تسلسل input strip lower في Python

إذا كتب المستخدم:

 YES 

فسيحدث التالي:

input تستقبل " YES "
answer_text يخزن النص كما كتبه المستخدم
strip تحولها إلى "YES"
lower تحولها إلى "yes"
answer يخزن "yes"
تحقق قبل الانتقال ✅ هل فهمت أن التنظيف يحدث قبل حفظ النتيجة النهائية في answer؟
7

حسّن برنامج التذكرة السابق

الآن نعود إلى برنامج الدخول ونحسّنه:

age = int(input("اكتب عمرك: "))
has_ticket_text = input("هل لديك تذكرة؟ اكتب yes أو no: ")
has_ticket = has_ticket_text.strip().lower()

if age >= 18 and has_ticket == "yes":
    print("مسموح بالدخول")
else:
    print("غير مسموح بالدخول")
خريطة كود تنظيف input في Python

الآن إذا كتب المستخدم yes أو Yes أو YES أو ترك مسافة، سيحولها البرنامج إلى yes قبل المقارنة.

هذه خطوة نحو الاحتراف: لم نغيّر منطق الدخول، لكن جعلنا البرنامج أكثر تحملًا لاختلاف كتابة المستخدم.
تحقق قبل الانتقال ✅ هل فهمت لماذا وضعنا strip و lower قبل الشرط؟
8

اختبر البرنامج بكتابات مختلفة

شغل البرنامج أكثر من مرة، وجرب:

yes
Yes
YES
 yes 
 YES 

إذا كان العمر 18 أو أكثر، يجب أن تكون النتيجة:

مسموح بالدخول
ماذا تعلمت؟ البرنامج أصبح يتعامل مع اختلاف الكتابة، لأننا نظفنا النص قبل المقارنة.
توقف لحظة ✅ هل اختبرت yes و Yes و YES؟ لا تعتمد الدرس قبل اختبارها.
9

أين نضع strip و lower؟

نضعها بعد input مباشرة عندما نريد تنظيف النص القادم من المستخدم:

answer_text = input("رسالة للمستخدم: ")
answer = answer_text.strip().lower()

ولا نضعها مع الأرقام التي نحولها إلى int أو float بالطريقة العادية إلا إذا احتجنا لاحقًا تنظيفًا خاصًا.

انتبه: strip و lower تعملان على النصوص. لذلك لا تكتب age.lower() إذا كان age رقمًا بعد int.
سؤال سريع 🧠 هل lower تستخدم مع النصوص أم الأرقام؟ مع النصوص.
10

تحدي صغير: حسّن VIP أيضًا

عدل برنامج التحدي السابق واجعل has_ticket و is_vip كلاهما ينظفان الإدخال:

age = int(input("اكتب عمرك: "))
has_ticket_text = input("هل لديك تذكرة؟ اكتب yes أو no: ")
is_vip_text = input("هل لديك عضوية VIP؟ اكتب yes أو no: ")

has_ticket = has_ticket_text.strip().lower()
is_vip = is_vip_text.strip().lower()

old_enough = age >= 18
has_access = has_ticket == "yes" or is_vip == "yes"

if old_enough and has_access:
    print("مسموح بالدخول")
else:
    print("غير مسموح بالدخول")
هدف التحدي: هذه أول مرة يبدأ فيها البرنامج يتصرف بشكل أقرب للبرامج الحقيقية: يأخذ إدخالًا غير مثالي، ينظفه، ثم يقرر.
تحدي التفكير 🧠 إذا كتب المستخدم VIP بهذا الشكل YES، هل سيقبله البرنامج؟ نعم، لأنه سيصبح yes بعد lower.

اختبار نهاية الدرس

قبل الانتقال للدرس القادم، تأكد أنك فهمت هذه النقاط:

✅ فهمت أن المستخدم قد يكتب نفس الإجابة بأكثر من شكل.
✅ عرفت أن lower تحول الحروف الإنجليزية إلى صغيرة.
✅ عرفت أن strip تزيل مسافات البداية والنهاية.
✅ فهمت لماذا نكتب lower() و strip() مع أقواس.
✅ استخدمت strip().lower() مع input.
✅ حسّنت برنامج التذكرة السابق.
✅ اختبرت yes و Yes و YES.
✅ فهمت أن هذه خطوة نحو برنامج أكثر احترافية.
إذا فهمت هذه النقاط: فأنت بدأت تكتب كودًا لا يتعامل مع المستخدم المثالي فقط، بل يتعامل مع أخطاء المستخدم البسيطة بذكاء.

خلاصة الدرس

تعلمنا في هذا الدرس أن input ترجع نصًا، وأن هذا النص قد يحتاج تنظيفًا قبل استخدامه في الشروط. استخدمنا strip لإزالة المسافات الزائدة، و lower لتوحيد الحروف الإنجليزية إلى صغيرة.

تذكر القاعدة:

answer_text = input("اكتب إجابتك: ")
answer = answer_text.strip().lower()

في الدرس القادم سنبدأ أول خطوة نحو التكرار باستخدام while، حتى يستطيع البرنامج إعادة السؤال بدل أن ينتهي مباشرة عند إدخال غير مناسب.

الدرس السابق الدرس التالي: while قريبًا فهرس الدورة