تعلم البرمجة مع Python


الدرس: إنشاء هياكل شرطية


الصفحة السابقة
حتى الآن ، اختبرنا التعليمات بطريقة خطية: سيقوم المترجم الفوري بتنفيذ الكود الذي تكتبه في وحدة التحكم أثناء تنقلك. لكن برامجنا ستكون سيئة للغاية إذا لم نتمكن من وقت لآخر من طلب تنفيذ تعليمات معينة في حالة واحدة وتعليمات أخرى في حالة أخرى.

في هذا الفصل ، سأخبرك عن الهياكل الشرطية ، والتي ستسمح لك بإجراء الاختبارات والمضي قدمًا في البرمجة.

تتيح الشروط إمكانية تنفيذ أمر أو أكثر في حالة واحدة وتعليمات أخرى في حالة أخرى.

ستنهي هذا الفصل بإنشاء أول برنامج "حقيقي" لك: حتى إذا كنت لا تعتقد أنه يمكنك فعل أي شيء متسق للغاية حتى الآن ، في نهاية هذا الفصل سيكون لديك مادة كافية كتابة كود برنامج صغير لغرض محدد للغاية.

شروطك الأولى وكتل التعليمات



الشكل الأصغر فيif


الشروط هي مفهوم أساسي في البرمجة (نعم نعم ، أكرر نفسي مرارًا وتكرارًا ولكن يجب أن نعترف بأن المفاهيم الأساسية لم ننتهي من رؤيتها). سيسمحون لك بتنفيذ إجراء محدد ، على سبيل المثال ، إذا كان المتغير إيجابيًا ، أو إجراء آخر إذا كان هذا المتغير سالبًا ، أو إجراء ثالثًا إذا كان المتغير صفرًا. كمثال جيد أفضل من عدة أسطر شرح ، إليك مثال واضح لشرط مأخوذ في أبسط أشكاله.

من الآن فصاعدًا في أمثلتي ، سأستخدم التعليقات. التعليقات هي رسائل يتجاهلها المترجم وتسمح بإعطاء إشارات على الكود (لأنك ستدرك ذلك ، لإعادة قراءة برامجه بعد عدة أسابيع من التخلي ، دون تعليق ، قد يكون أحيانًا أكثر من 'شاقة). في بايثون ، يبدأ التعليق بعلامة التجزئة ("#") وينتهي بفاصل سطر. #يتم تجاهل أي شيء يقع بين هذا وفاصل الأسطر هذا. وبالتالي يمكن أن يشغل التعليق كامل السطر (نضعه في #بداية السطر) أو جزءًا فقط ، بعد التعليمات (نضعه #بعد سطر التعليمات البرمجية للتعليق بشكل أكثر تحديدًا) .

بعد قولي هذا ، دعنا نعود إلى شروطنا:


>>> #  اول مثال
>>> a = 5
>>> if a > 0: #    0 أكبر من a  اذا كانت 
...     print("a est supérieur à 0.")
... 
a est supérieur à 0.
>>>
 
دعونا نفصل هذا الكود ، سطرًا بسطر:
  1. السطر الأول عبارة عن تعليق يصف أن هذا هو اختبار الشرط الأول. يتم تجاهله من قبل المترجم ويستخدم فقط لإبلاغك بالكود الذي سيتبع.
  2. هذا الخط ، يجب أن تفهمه دون أي مساعدة. نحن فقط نسند القيمة 5 للمتغير a .
  3. هذا هو اختبارنا الشرطي. وهي تتألف بالترتيب:
    • الكلمة الأساسية ifالتي تعني "إذا" باللغة الإنجليزية ؛
    • الشرط نفسه ،  a > 0 الذي يسهل قراءته (سيتم عرض قائمة المشغلين المصرح لهم للمقارنة أدناه) ؛
    • النقطتان ، ":" ، الذي ينهي الشرط ويكون مطلوبًا: ستعرض Python خطأً في بناء الجملة إذا حذفته.
  4. إليك تعليمات التنفيذ إذا كان  a أكبر من 0 . بعد الضغط Enterفي نهاية السطر السابق ، يقدم لك المترجم سلسلة من ثلاث نقاط مما يعني أنه ينتظر إدخال مجموعة التعليمات المعنية قبل تفسيرها. تم وضع مسافة بادئة لهذه التعليمات (والتعليمات الأخرى التي سيتم تنفيذها إن وجدت) ، أي أنها تحولت إلى اليمين. سيتم إعطاء تفسيرات إضافية لأسفل قليلاً على المسافات البادئة.
  5. يعرض المترجم الفوري سلسلة من ثلاث نقاط مرة أخرى ويمكنك اغتنام الفرصة لإدخال تعليمات جديدة في كتلة التعليمات هذه. هذا ليس هو الحال في الوقت الراهن. لذلك تضغط Enterدون كتابة أي شيء ويعرض المترجم الرسالة ("a est supérieur à 0.") ، وهو أمر منطقي تمامًا لأنه في a الواقع أكبر من 0 .
هناك نوعان من المفاهيم الهامة التي يجب أن أعود إليها الآن ، فهما متكاملان ، لا تقلق.

الأول هو كتلة التعليمات. يُقصد بكتلة التعليمات سلسلة من التعليمات التي يتم تنفيذها في حالة معينة (حسب الشرط ، كما رأينا للتو ، بالتكرار ، كما سنرى لاحقًا ...). هنا ، تتكون الكتلة الخاصة بنا من تعليمة واحدة فقط (السطر 4 الذي يستدعي print ) . لكن لا شيء يمنعك من وضع العديد من التعليمات في هذه الكتلة.


a = 5
b = 8
if a > 0:
    # On incrémente la valeur de b
    b += 1
    # On affiche les valeurs des variables
    print("a =",a,"et b =",b)
 
الفكرة الثانية المهمة هي المسافة البادئة. من المفهوم أن المسافة البادئة تعني تحولًا معينًا إلى اليمين ، يتم الحصول عليه بواسطة مسافة أو علامة تبويب واحدة (أو أكثر).

المسافات البادئة ضرورية لبايثون. إنها ليست ، كما هو الحال في اللغات الأخرى مثل C ++ أو Java ، وسيلة مريحة للقراءة ولكنها وسيلة للمترجم الفوري لمعرفة أين هي بداية ونهاية منع.

شكل كامل(  if، elifو else )


حدود الشرط البسيط فيif


الشكل الأول من الشروط الذي رأيناه للتو هو عملي ولكنه غير كامل إلى حد ما.

ضع في اعتبارك ، على سبيل المثال ، متغير a من نوع عدد صحيح. نريد القيام بعمل ما إذا كان هذا المتغير موجبًا وإجراء مختلفًا إذا كان سالبًا. من الممكن الحصول على هذه النتيجة من خلال الشكل البسيط للشرط:


>>> a = 5
>>> if a > 0: #  موجب  a  
...    print("a est positif.")
... if a < 0: #  سالب  a 
...    print("a est négatif.")
 
استمتع بتغيير قيمة a الشروط وتشغيلها في كل مرة ؛ ستحصل على رسائل مختلفة ، إلا إذا كانت a تساوي 0. في الواقع ، لم يتم التخطيط لأي إجراء إذا كان a يساوي 0.

هذه الطريقة ليست مثالية ، أولاً لأنها تجبرنا على كتابة شرطين منفصلين لاختبار نفس المتغير. علاوة على ذلك ، وحتى إذا كان من الصعب تصور هذا المثال ، في الحالة التي يفي فيها المتغير بكلا الشرطين (هنا مستحيل بالطبع) ، سيتم تنفيذ جزأين من الكود.

الشرط if بالتالي فهي عملية جدا ولكنها غير كافية.

التعليمات else:


Else تتيح لنا الكلمة الرئيسية ، التي تعني "إن لم يكن" باللغة الإنجليزية ، تحديد الشكل الأول من تكملة تعليماتنا if .


>>> age = 21
>>> if age >= 18: # Si age est supérieur ou égal à 18
...    print("Vous êtes majeur.")
... else: # Sinon (age inférieur à 18)
...    print("Vous êtes mineur.")
 
أعتقد أن هذا المثال أكثر من كافٍ لإثبات استخدام else . الدقة الوحيدة هي أن ندرك أن بايثون تفعل أحدهما أو الآخر ، وليس كليهما. لاحظ أن هذه التعليمات else يجب أن تكون في نفس مستوى المسافة البادئة للتعليمات if التي تكملها. بالإضافة إلى ذلك ، تنتهي أيضًا بنقطتين لأنها حالة ، حتى لو كانت ضمنية.

لذلك يمكن أن يبدو المثال السابق هكذا ، باستخدام else :


>>> a = 5
>>> if a > 0:
...    print("a est supérieur à 0.")
... else:
...    print("a est inférieur ou égal à 0.")
 
لكن ... النتيجة ليست هي نفسها ، أليس كذلك؟

لا حقا. ستجد أن هذه المرة يتم أخذ حالة a القيمة 0 في الاعتبار. في الواقع ، ينص الشرط الأولي على تنفيذ المجموعة الأولى من التعليمات إذا كانت aأكبر من 0 . خلاف ذلك ، يتم تنفيذ الكتلة الثانية من التعليمات.

إذا أردنا التفريق بين الأرقام الموجبة والسالبة والصفر ، فسيتعين علينا استخدام شرط وسيط.

التعليمات elif :


الكلمة الأساسية elif هي اختصار لكلمة "else if" ، والتي يمكن ترجمتها حرفيًا على أنها "if not" . في المثال الذي رأيناه للتو ، من الأفضل كتابة:

  • إذا كانت a أكبر من 0، نقول إنها إيجابية ؛
  • وإلا إذا كانت a أقل من 0، نقول إنها سلبية ؛
  • إذا لم يكن الأمر كذلك ، ( a يمكن أن تكون مساوية لـ 0) ، فإننا نقول إن هذا a هو صفر.
ترجمة إلى لغة بايثون ، وهذا يعطي:

>>> if a > 0: # Positif
...     print("a est positif.")
... elif a < 0: # Négatif
...     print("a est négatif.")
... else: # Nul
        print("a est nul.")
 
مثل ال else، elif يكون على نفس مستوى المسافة البادئة مثل if الحرف الأول. وينتهي أيضًا بنقطتين. ومع ذلك ، فإن elif حالة جديدة بين القولون والقولون. خطيًا ، يُترجم مخطط التنفيذ على النحو التالي:

  • 1. نرى ما إذا كان a أكبر من 0 . إذا كانت هذه هي الحالة ، فإننا نعرض "a موجبة" ونتوقف عند هذا الحد.
  • 2. خلاف ذلك ، نرى ما إذا كان a بدقة أقل من 0 . إذا كانت هذه هي الحالة ، فإننا نعرض "a سلبي" ونتوقف.
  • 3. وإلا فإننا نعرض "a يساوي صفر".
انتباه: عندما أقول "نتوقف" ، فمن نافلة القول أن هذا فقط لهذا الشرط. إذا كان هناك كود بعد كتل التعليمات الثلاثة ، فسيتم تنفيذه في جميع الحالات.

يمكنك وضع ما تريد من  elif بعد الشرط if . مثل else، هذه التعليمات اختيارية ، وعلى الرغم من أنك ستنشئ تعليمة  if، elif فأنت لست مضطرًا لتقديم تعليمات لاحقة else . من ناحية أخرى ،  else يمكن أن تظهر التعليمات مرة واحدة فقط ، مما يؤدي إلى إغلاق كتلة الشرط. اثنين تعليمات  else في نفسه شرط غير ممكن، وسوف لا معنى لها على أي حال.

لاحظ أنه من الممكن لحسن الحظ تداخل الظروف ، وفي هذه الحالة ، تجعل المسافة البادئة من الممكن فهم مخطط تنفيذ البرنامج بوضوح. اسمح لك بتجربة هذا الاحتمال ، ولن أفعل كل شيء من أجلك أيضًا.  :- )

عوامل تشغيل جديدة



عوامل المقارنة


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

المشغل أو العامل المعنى الحرفي
> أقل من
< أكبر من
>= اقل او يساوي
<= أكبر من أو يساوي
== يساوي
=! مختلف عن
تحذير: تتم مقارنة المساواة بين قيمتين بالمعامل "==" وليس "=". هذا الأخير هو بالفعل عامل التخصيص ولا ينبغي استخدامه في شرط.

المسندات والمنطقية


قبل المضي قدمًا ، يجب أن تدرك أن الشروط التي تقع ، على سبيل المثال ، بين if نقطتين وتسمى المسندات . يمكنك اختبار هذه المسندات مباشرة في المترجم لفهم التفسيرات التالية.


>>> a = 0
>>> a == 5
False
>>> a > -8
True
>>> a != 33.19
True
>>>
 
يعيد المترجم أحيانًا True (أي "صواب") وأحيانًا False (أي "خطأ" ) .

True و False نوعان من القيم الممكنة من النوع الذي لم نر حتى الآن: نوع منطقية (منطقي).

تذكر أن True و False هي القيم مع أول حرف في أحرف كبيرة. إذا بدأت الكتابة True بدون حرف "T" كبير ، فلن تفهم Python .

يمكن للمتغيرات من هذا النوع أن تأخذ قيمة صواب أو خطأ فقط ويمكن أن تكون عملية ، على وجه التحديد ، لتخزين المسندات ، بالطريقة التي رأيناها أو بطريقة ملتوية.


>>> age = 21
>>> majeur = False
>>> if age >= 18:
>>>     majeur = True
>>>
 
في نهاية هذا المثال ، الرئيسي True يساوي ، أي "صحيح" ، إذا كان العمر أكبر من 18 أو يساوي 18. وإلا ، فسيظل صالحًا False . قد لا تبدو القيم المنطقية مفيدة جدًا لك في الوقت الحالي ، لكنك ستجد أنها مفيدة جدًا!

كلمات and، orوnot


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


# نجري اختبارًا لمعرفة ما إذا كان مدرجًا في النطاق من 2 إلى 8 ضمناً
a = 5
if a >= 2:
    if a <= 8:
        print("a est dans l'intervalle.")
    else:
        print("a n'est pas dans l'intervalle.")
else:
    print("a n'est pas dans l'intervalle.")
 
إنه يعمل ولكنه ثقيل جدًا ، خاصة أنه للتأكد من عرض رسالة في كل مرة ، يجب إغلاق كل من الشرطين باستخدام else (يتم تضمين الثاني في الأول) . إذا كنت تواجه مشكلة في فهم هذا المثال ، خذ الوقت الكافي لتصفحه ، سطراً بسطر ، فلا يوجد شيء معقد.

ومع ذلك ، توجد الكلمة الرئيسية and (التي تعني "و" باللغة الإنجليزية) التي ستقدم لنا خدمة رائعة هنا. في الواقع ، نسعى إلى اختبار ما إذا كانت a أكبر من أو تساوي 2 وأقل من أو تساوي 8. يمكننا بالتالي تقليل الشروط المتداخلة:


if a>=2 and a<=8:
    print("a est dans l'intervalle.")
else:
    print("a n'est pas dans l'intervalle.")
 
بسيط ومفهوم أكثر ، اعترف بذلك.

بنفس الطريقة ، هناك الكلمة الأساسية or التي تعني هذه المرة "أو" . سنأخذ نفس المثال ، باستثناء أننا سنقيم حالتنا بشكل مختلف.

سنكتشف ما إذا a لم يكن في هذه الأثناء. لا يكون المتغير في النطاق إذا كان أقل من 2 أو أكبر من 8. لذا إليك الكود:


if a<2 or a>8:
    print("a n'est pas dans l'intervalle.")
else:
    print("a est dans l'intervalle.")
 
أخيرًا ، هناك الكلمة الأساسية not التي "تقلب" المسند. not a==5 وبالتالي فإن المسند يعادل a!=5 .

Not يجعل بناء الجملة أكثر وضوحا. في هذا المثال ، أقوم بإضافة كلمة رئيسية جديدة إلى القائمة is، والتي تختبر المساواة ليس بين قيم متغيرين ، بل بين مراجعهما. لن أخوض في تفاصيل هذه الآلية لفترة طويلة. عليك فقط أن تعرف أنه بالنسبة للأعداد الصحيحة والعوامات والمنطقية ، فإن هذا هو الشيء نفسه تمامًا. ولكن لاختبار المساواة بين المتغيرات التي يكون نوعها أكثر تعقيدًا ، يفضل عامل التشغيل "==" . دعنا نعود إلى هذا العرض التوضيحي:


>>> majeur = False
>>> if majeur is not True:
...     print("Vous n'êtes pas encore majeur.")
... 
Vous n'êtes pas encore majeur.
>>>
 
إذا كنت تتحدث الإنجليزية بحد أدنى ، فإن هذا المسند واضح تمامًا ولا مثيل له في البساطة.

يمكنك اختبار المسندات الأكثر تعقيدًا بنفس طريقة التجارب السابقة ، عن طريق إدخالها مباشرةً ، بدون  العلامة if أو النقطتين ، في الغلاف. يمكنك استخدام قوسي الفتح والإغلاق لإرفاق المسندات ومقارنتها وفقًا لأولويات محددة (سنرى هذه النقطة لاحقًا ، إذا لم تفهم الفائدة).

برنامجك الأول!



ماذا نلعب؟

لقد حان وقت اتخاذ TP الأول. نظرًا لأنها الأولى ، ولأن هناك بعض المؤشرات التي يجب أن أقدمها لك حتى تصل إلى النهاية ، فسوف أرافقك خطوة بخطوة في تحقيقها.

قبل البدء


في هذا القسم سوف تكتب برنامجك الأول. من المحتمل أنك ستختبر التركيبات مباشرة.

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

الموضوع


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

أذكرك بالقواعد التي تحدد ما إذا كانت السنة سنة كبيسة أم لا (قد تتعلم أشياء يجهلها الناس العاديون).

يُقال إن السنة هي سنة كبيسة إذا كانت من مضاعفات العدد 4 ، إلا إذا كانت من مضاعفات الرقم 100. ومع ذلك ، فإنها تعتبر سنة كبيسة إذا كانت من مضاعفات 400. أنا أتوسع:

  • إذا لم تكن السنة من مضاعفات 4 ، فإننا نتوقف عند هذا الحد ، فهي ليست سنة كبيسة.
  • إذا كان مضاعفًا لـ 4 ، فسنرى ما إذا كان مضاعفًا لـ 100.
    • إذا كان الأمر كذلك ، فإننا نرى ما إذا كان مضاعف 400.
      • إذا كان الأمر كذلك ، فإن السنة هي سنة كبيسة.
      • خلاف ذلك ، فهي ليست كبيسة.
    • خلاف ذلك ، هو كبيسة.

    حل أم طريقة


    هنا. تم توضيح المشكلة بوضوح (إذا لم تقرأ البيان بعناية عدة مرات حسب الضرورة) ، فمن الضروري الآن التفكير في حلها من حيث البرمجة. إنها مرحلة انتقالية دقيقة إلى حد ما للوهلة الأولى ، وأنصحك برسم تخطيطي للمشكلة ، وتدوين ملاحظات حول المراحل المختلفة ، دون التفكير في الكود في الوقت الحالي. إنها مرحلة حسابية بحتة ، بمعنى آخر ، نفكر في البرنامج دون التفكير في الكود نفسه.

    لإنشاء هذا البرنامج الصغير ، ستحتاج إلى بعض التلميحات الخاصة بالفعل ببايثون. لذا اقرأ هذا فقط بعد أن تحدد المشكلة وتكتبها بوضوح بطريقة أكثر خوارزمية. ومع ذلك ، إذا كنت تكافح من أجل إيجاد حل ، فلا تفكر في ذلك. هذه المرحلة من التفكير صعبة للغاية في البداية وأحيانًا لا يتطلب الأمر سوى القليل من الممارسة والشرح لفهم الأساسيات.

    الوظيفةinput()


    أولا ، ذكرت دخول المستخدم العام. في الواقع ، منذ وقت سابق ، كنا نختبر المتغيرات التي نعلن أنفسنا لها بقيمة محددة. لذلك فإن الحالة سخيفة للغاية.

    input() هي وظيفة من شأنها ، بالنسبة لنا ، أن تميز تفاعلاتنا الأولى مع المستخدم: سيتفاعل البرنامج بشكل مختلف اعتمادًا على الرقم الذي أدخله المستخدم.

    input() يقبل معلمة اختيارية: الرسالة التي سيتم عرضها على المستخدم. تقاطع هذه التعليمات البرنامج وتنتظر أن يكتب المستخدم ما يريد ، ثم يضغط Enter. في هذه المرحلة ، ترجع الدالة ما أدخله المستخدم. لذلك يجب علينا حجز هذه القيمة في متغير.

    
    >>> #  input اختبار الوظيفة 
    >>> annee = input("Enter a year: ")
    Enter a year: 2009
    >>> print(annee)
    '2009'
    >>>
     
    لا تزال هناك مشكلة: نوع المتغير annee بعد الاستدعاء input()... سلسلة أحرف. يمكنك رؤية ذلك من خلال الفواصل العليا التي تحيط بقيمة المتغير عند عرضها مباشرة في المترجم.

    إنه أمر ممل: نحن الذين أردنا العمل على عدد صحيح ، علينا تحويل هذا المتغير. لتحويل متغير إلى نوع آخر ، يجب عليك استخدام اسم النوع كوظيفة (وهذا بالضبط ما هو عليه ، بالمناسبة).

    
    >>> type(annee)
    <type 'str'>
    >>> # نريد تحويل المتغير إلى عدد صحيح نستخدمه
    >>> # التي تأخذ المتغير كمعامل int وبالتالي فإن الدالة 
    >>> # اصلي
    >>> annee = int(annee)
    >>> type(annee)
    <type 'int'>
    >>> print(annee)
    2009
    >>>
     
    جيد ، ممتاز! لدينا الآن العام بأكمله. لاحظ أنه إذا أدخلت أحرفًا عند الاتصال بـ input()، فسيعود التحويل إلى خطأ.

    int() قد يكون استدعاء الوظيفة حير البعض. نمرر كمعامل لهذه الوظيفة المتغير الذي يحتوي على سلسلة الأحرف الناتجة input() ، لمحاولة تحويله . int()ترجع الدالة القيمة المحولة إلى عدد صحيح وبالتالي نحصل عليها في نفس المتغير. هذا يتجنب العمل على عدة متغيرات ، مع العلم أن المتغير الأول لم يعد مفيدًا الآن بعد أن تم تحويله.

    اختبار متعدد


    قد يتساءل البعض أيضًا عن كيفية اختبار ما إذا كان الرقم a مضاعفًا للرقم b . يكفي ، في الواقع ، اختبار باقي القسمة الصحيحة لـ b على a . إذا كان الباقي صفرًا ، فإن a من مضاعفات b .

    
    >>> 5 % 2 #  ليس من مضاعفات 25 
    1
    >>> 8 % 2 # 8 من مضاعفات 2
    0
    >>>
     

    دوركم الآن


    أعتقد أنني وفرت لك كل العناصر اللازمة للنجاح. في رأيي ، الأصعب هو مرحلة التفكير التي تسبق تكوين البرنامج. إذا كنت تواجه مشكلة في إجراء هذه العملية ، فانتقل إلى التصحيح وادرسها بعناية. خلاف ذلك ، نجد أنفسنا في القسم التالي.

    حظا سعيدا !

تصحيح



حان الوقت لمقارنة أساليبنا ، وقبل الكشف عن رمز الحل الخاص بي لك ، دعني أخبرك أنه ليس الحل الوحيد الممكن. ربما وجدت شيئًا مختلفًا ولكن هذا يعمل أيضًا.

انتباه ...


# برنامج اختبار ما إذا كان عام أدخله المستخدم ،
# كبيسا ام لا

annee = input("Saisissez une année : ") # نتظر ادخال المستخدم للعام الذي يريد اختباره
annee = int(annee) # خطر حدوث خطأ إذا لم يقم المستخدم بإدخال رقم
bissextile = False # نقوم بإنشاء قيمة منطقية صحيحة أو خاطئة
                   # اعتمادًا على ما إذا كانت السنة سنة كبيسة أم لا

if annee % 400 == 0:
    bissextile = True
elif annee % 100 == 0:
    bissextile = False
elif annee % 4 == 0:
    bissextile = True
else:
    bissextile = False

if bissextile: # Si l'année est bissextile
    print("The year entered is a leap year.")
else:
    print("The year entered is not a leap year.")
 
أذكرك أنه يمكنك حفظ الاكواد الخاصة بك في ملفات لتشغيلها. أحيلك إلى الفصل الخاص بكتابة كود Python في الملفات لمزيد من المعلومات.

أعتقد أن الكود واضح تمامًا ، ويبقى شرح تسلسل الشروط. ستلاحظ أن المشكلة قد تم عكسها. نختبر أولاً ما إذا كان العام من مضاعفات 400 ، ثم إذا كان مضاعفًا لـ 100 ، وأخيراً إذا كان مضاعفًا لـ 4. في الواقع ، elif ضمان أنه إذا كان annee مضاعفًا لـ 100 ليس من مضاعفات 400 (لأنه تم التعامل مع القضية أعلاه). بهذه الطريقة ، نتأكد من التعامل مع جميع الحالات. يمكنك تجربة عدة سنوات ومعرفة ما إذا كان البرنامج صحيحًا أم لا.

bissextile ربما تم الخلط بينك وبين استخدامك كمسند كامل. هذا في الواقع ممكن ومنطقي تمامًا ، لأنه bissextile منطقي. لذلك فهي صحيحة أو خاطئة وبالتالي يمكن اختبارها بسهولة. يمكننا بالطبع أن نكتب أيضًا if bissextile==True :، الأمر يتعلق بنفس الشيء.

القليل من التحسين


ما فعلناه كان جيدًا ولكن يمكننا تحسينه. إلى جانب ذلك ، ستجد أن هذا هو الحال دائمًا تقريبًا. هذه هي حالتنا بالطبع ، والتي سوف أتصفحها من أجل بناء حالة أقصر وأكثر منطقية ، إن أمكن. يمكننا التحدث عن التحسين في هذه الحالة ، حتى إذا كان التحسين يشمل أيضًا وقبل كل شيء الموارد التي يستهلكها تطبيقك ، بهدف تقليل هذه الموارد وتحسين سرعة التطبيق. لكن بالنسبة لتطبيق صغير مثل هذا ، لا أعتقد أنك ستضيع الوقت في تحسين وقت التشغيل.

التفاصيل الأولى التي ربما تكون قد لاحظتها هي أن  else النهائية غير ضرورية.  في الواقع ، bissextile يتم تعيين المتغير افتراضيًا False وبالتالي يحتفظ بهذه القيمة إذا لم تتم معالجة الحالة (هنا ، عندما لا يكون العام من مضاعفات 400 أو مضاعف 100 أو مضاعف 4).

بعد ذلك ، يبدو أنه يمكننا إجراء تنظيف كبير في حالتنا لأن الحالتين الوحيدتين المتوافقتين مع سنة كبيسة هما "إذا كان العام مضاعفًا لـ 400" أو "إذا كان العام مضاعفًا لـ 4 وليس من 100 " .

المسند المقابل صعب بعض الشيء ، فهو يستدعي أولويات الأقواس. لم أكن أتوقع أن تجده بنفسك ، لكن أتمنى أن تفهمه الآن.


annee = input("Saisissez une année : ") 
annee = int(annee) 

if annee % 400 == 0 or (annee % 4 == 0 and annee % 100 != 0):
    print("The year entered is a leap year.").")
else:
    print("The year entered is not a leap year.").")
 
فجأة ، لم نعد بحاجة إلى المتغير bissextile، لقد فاز بالفعل. لقد انتقلنا من 15 سطرًا من التعليمات البرمجية إلى 6 فقط (بدون حساب التعليقات وفواصل الأسطر) وهذا ليس بالأمر الهين.

باختصار


  • تسمح الشروط بتنفيذ تعليمات معينة في بعض الحالات ، وتعليمات أخرى في حالة أخرى.
  • يتم تمييز الشروط بالكلمات الرئيسية if ("إذا") و elif ("إن لم يكن") و  else ( "إن لم يكن" ).
  • الكلمات الرئيسية if و elif يجب أن يتبعه اختبار (وتسمى أيضا المسند).
  • القيم المنطقية هي إما بيانات صحيحة ( True) أو خاطئة ( False) .