تحسين إدخال المستخدم: اجعل البرنامج أكثر مرونة
في الدرس السابق طلبنا من المستخدم كتابة yes أو no. المشكلة أن المستخدم قد يكتب Yes أو YES أو يترك مسافة قبل الإجابة. في هذا الدرس سنجعل البرنامج أذكى باستخدام strip و lower.
ما النتيجة التي يجب أن تخرج بها؟
في نهاية الدرس ستفهم هاتين الخطوتين:
has_ticket_text = input("هل لديك تذكرة؟ ")
has_ticket = has_ticket_text.strip().lower()
وستعرف أنه يحول إجابات مثل:
yes Yes YES yes YES
إلى صيغة واحدة:
yes
ما المشكلة التي نحلها؟
في الدرس السابق كان الشرط يعتمد على أن المستخدم يكتب:
yes
لكن المستخدم قد يكتب:
Yes YES yes yes
بالنسبة للإنسان كلها تعني نعم، لكن بالنسبة لـ Python هذه نصوص مختلفة إذا لم ننظفها.
أنشئ ملف الدرس السابع عشر
افتح مجلد الدورة داخل VS Code:
python_course
ثم أنشئ ملفًا جديدًا باسم:
lesson_17.py
افتح الملف داخل Editor.
جرّب المشكلة قبل الحل
اكتب هذا الكود:
answer = input("اكتب yes: ")
if answer == "yes":
print("تم قبول الإجابة")
else:
print("الإجابة غير مطابقة")
شغل البرنامج واكتب:
Yes
ستلاحظ أن البرنامج لا يعتبرها مطابقة لـ yes.
ما وظيفة lower؟
lower تحول الحروف الإنجليزية الكبيرة إلى حروف صغيرة.
answer = "YES" print(answer.lower())
النتيجة:
yes
ما وظيفة strip؟
strip تزيل المسافات الزائدة من بداية النص ونهايته.
answer = " yes " print(answer.strip())
النتيجة:
yes
استخدم lower و strip مع input
الآن ندمجها مع input:
answer_text = input("اكتب yes أو no: ")
answer = answer_text.strip().lower()
إذا كتب المستخدم:
YES
فسيحدث التالي:
input تستقبل " YES " answer_text يخزن النص كما كتبه المستخدم strip تحولها إلى "YES" lower تحولها إلى "yes" answer يخزن "yes"
حسّن برنامج التذكرة السابق
الآن نعود إلى برنامج الدخول ونحسّنه:
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("غير مسموح بالدخول")
الآن إذا كتب المستخدم yes أو Yes أو YES أو ترك مسافة، سيحولها البرنامج إلى yes قبل المقارنة.
اختبر البرنامج بكتابات مختلفة
شغل البرنامج أكثر من مرة، وجرب:
yes Yes YES yes YES
إذا كان العمر 18 أو أكثر، يجب أن تكون النتيجة:
مسموح بالدخول
أين نضع strip و lower؟
نضعها بعد input مباشرة عندما نريد تنظيف النص القادم من المستخدم:
answer_text = input("رسالة للمستخدم: ")
answer = answer_text.strip().lower()
ولا نضعها مع الأرقام التي نحولها إلى int أو float بالطريقة العادية إلا إذا احتجنا لاحقًا تنظيفًا خاصًا.
تحدي صغير: حسّن 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("غير مسموح بالدخول")
اختبار نهاية الدرس
قبل الانتقال للدرس القادم، تأكد أنك فهمت هذه النقاط:
خلاصة الدرس
تعلمنا في هذا الدرس أن input ترجع نصًا، وأن هذا النص قد يحتاج تنظيفًا قبل استخدامه في الشروط. استخدمنا strip لإزالة المسافات الزائدة، و lower لتوحيد الحروف الإنجليزية إلى صغيرة.
تذكر القاعدة:
answer_text = input("اكتب إجابتك: ")
answer = answer_text.strip().lower()
في الدرس القادم سنبدأ أول خطوة نحو التكرار باستخدام while، حتى يستطيع البرنامج إعادة السؤال بدل أن ينتهي مباشرة عند إدخال غير مناسب.
💬 التعليقات
لا توجد تعليقات بعد.
🚫 يجب تسجيل الدخول لإضافة تعليق. دخول / تسجيل