شرح المتغيرات والشروط في Python يبدأ بإسناد قيمة إلى اسم ثم مقارنتها وفق قاعدة معلومة. سنستخدم أمثلة افتراضية لفئات سرعة وأسعار تذاكر تدريبية، بهدف فهم ترتيب if وelif وelse وحدود المقارنة. الأرقام في المثال قواعد مصطنعة للبرمجة وليست جدول مخالفات مرور أو سياسة جهة فعلية. فصل القاعدة التعليمية عن واقع خدمة محددة يمنع الاعتماد على ناتج المثال خارج الغرض الذي صمم له.
التجهيز والتشغيل
استخدم Python 3.9 أو أحدث واحفظ المثال في ملف مستقل خارج مجلد مكتبات Python.
python lesson_25542.pyالتحويل بين النص والعدد
تعيد input نصًا، ولذلك تحتاج int أو float عندما يكون المطلوب حسابًا عدديًا. int("8") يعطي عددًا صحيحًا، بينما int على نص غير مناسب يرفع ValueError. لا تحول قيمة عشرية إلى int لمجرد إزالة الخطأ دون أن تقرر ما يحدث للكسر. في الدوال المعروضة نستقبل أعدادًا متحققًا منها ونرفض النوع أو المجال غير المناسبين، ونترك طبقة التفاعل مسؤولة عن قراءة النص وإظهار رسالة إعادة إدخال مفهومة.
الحساب وحده لا يحدّث المتغير
التعبير speed – 5 يحسب قيمة ثم لا يحفظها في speed ما لم تسند النتيجة. ينشئ المثال effective_speed بعد تطبيق الخصم الافتراضي ثم تستخدم الشروط القيمة الجديدة. يمكن أيضًا استعمال -= عندما تريد تعديل المتغير نفسه، لكن الاحتفاظ بالمدخل وقيمة محسوبة منفصلين يسهل الاختبار. نمنع القيمة الفعالة من النزول تحت الصفر في سياسة هذا المثال، ونرفض سرعات سالبة أو غير محدودة من البداية.
المثال البرمجي الكامل
import math
def demo_speed_band(speed, birthday=False):
if isinstance(speed, bool) or not isinstance(speed, (int, float)) or not math.isfinite(speed) or speed < 0:
raise ValueError("Speed must be a finite non-negative number")
effective_speed = max(0, speed - 5) if birthday else speed
# Fictional rules to explain if/elif; not a real traffic fine schedule.
if effective_speed > 80:
return "band_3"
elif effective_speed > 60:
return "band_2"
elif effective_speed > 50:
return "band_1"
return "no_band"
def demo_ticket(age):
if type(age) is not int or age < 0:
raise ValueError("Age must be a non-negative integer")
# Fictional training prices.
if age > 60:
return 7
elif age > 19:
return 10
elif age > 10:
return 2
return None
if __name__ == "__main__":
print(demo_speed_band(65, birthday=True))
print(demo_ticket(20))
print("8 as an integer:", int("8"))
print("3 to the power of 2:", 3 ** 2)
ترتيب if وelif من الأعلى إلى الأدنى
تتوقف سلسلة if وelif عند أول شرط صحيح. إذا فحصت أكبر من خمسين قبل أكبر من ثمانين، فستدخل قيمة تسعين في الفرع الأول ولن تصل إلى التصنيف الأعلى. لذلك نرتب العتبات من الأكبر إلى الأصغر، ثم نعيد no_band عندما لا يتحقق شرط. راجع الفرق بين > و>= عند القيمة المساوية للحد؛ 60 ليست أكبر من 60، وتنتقل إلى فرع أقل وفق القواعد المكتوبة.
فرع التذكرة والقيمة None
تعيد demo_ticket قيمة تدريبية بحسب العمر وتعيد None للفئة التي لا تمنحها القاعدة تذكرة. None ليست صفرًا ولا نصًا فارغًا، ولذلك ينبغي أن يعالجها المستدعي بوضوح قبل تنسيق السعر. لا تستخدم قيمًا مثل -1 للإشارة إلى غياب تذكرة دون توثيق معناها. كما نرفض العمر السالب وbool والنصوص، ونحدد الحدود عند 10 و19 و60 بدل عبارة عامة مثل صغير أو كبير بلا تعريف.
المقارنة والإسناد والعمليات الأساسية
تختلف = التي تسند عن == التي تقارن، ويحسب ** القوة بينما تختلف عنه علامة ^ الخاصة بعملية بتية. المثال يطبع 3 ** 2 لتكون النتيجة تسعة. تسمية المتغير بما يوضح معناه تساعد على اكتشاف استخدام المدخل القديم بعد إنشاء قيمة محسوبة. لا تعتمد على اسم مثل sum لقيمة عامة إذا احتجت الدالة المدمجة لاحقًا، ولا تعيد استعمال المتغير نفسه مرة كنص ومرة كقائمة دون سبب واضح.
نتائج التشغيل واختبار الحدود
تعطي السرعة 65 مع تفعيل الخصم الافتراضي قيمة فعالة 60 فتدخل band_1 وفق شروط المثال. وعمر 20 يعطي قيمة التذكرة 10. اختبر السرعات 50 و51 و60 و61 و80 و81، ثم أعد التجربة مع الخيار المفعّل. وفي العمر اختبر الحد واليوم العددي التالي له مثل 19 و20. هذه القيم تكشف أخطاء ترتيب الفروع أكثر من اختبار قيمة بعيدة عن كل الحدود.
من التمرين إلى قواعد تطبيق موثقة
إذا تغيرت قواعد المنتج، اكتب الجدول المطلوب أولًا ثم حدث الدالة والاختبارات معًا. قد يكون جدول بيانات أو خريطة قواعد أوضح عندما تصبح الفئات كثيرة، لكن لا تعقد مثالًا من ثلاث حالات قبل فهمه. عند إضافة واجهة مستخدم اجعل التحويل والتحقق والرسائل منفصلة عن دوال التصنيف، حتى تستطيع استدعاء المنطق من اختبار دون input. لا تنقل أرقام المثال إلى تطبيق فعلي قبل استبدالها بالقواعد المعتمدة في ذلك التطبيق.
المراجع
الصور والفيديو من الشرح السابق
الكود النصي أعلاه هو النسخة المصححة؛ قد تختلف المواد المرئية السابقة في أسماء المتغيرات أو طريقة التشغيل.







