برمجة بايثون 2026 — جامعة هلسنكي › الجزء 2: الجمل الشرطية 2 / 15 السابق التالي

دمج الشروط

أهداف التعلّم

بعد إتمام هذا القسم

  • ستعرف كيف تستخدم المشغّلات and وor وnot في الشروط
  • ستتمكّن من كتابة جمل شرطية متداخلة

المشغّلات المنطقية

يمكنك دمج الشروط باستخدام المشغّلات المنطقية and وor. ويُحدّد المشغّل and أن جميع الشروط المعطاة يجب أن تكون صحيحة في الوقت نفسه. ويُحدّد المشغّل or أن واحدًا على الأقل من الشروط المعطاة يجب أن يكون صحيحًا.

فمثلًا، الشرط number >= 5 and number <= 8 يُحدّد أن number يجب أن يكون 5 على الأقل و8 على الأكثر في الوقت نفسه. أي أنه يجب أن يكون بين 5 و8.

number = int(input("Please type in a number: "))
if number >= 5 and number <= 8:
    print("The number is between 5 and 8")

وفي المقابل، الشرط number < 5 or number > 8 يُحدّد أن number يجب أن يكون أقل من 5 أو أكبر من 8. أي أنه يجب ألّا يقع ضمن النطاق من 5 إلى 8.

number = int(input("Please type in a number: "))
if number < 5 or number > 8:
    print("The number is not within the range of 5 to 8")

يبيّن جدول الحقيقة التالي سلوك هذه المشغّلات في الحالات المختلفة:

a b a and b a or b
خطأ خطأ خطأ خطأ
صحيح خطأ خطأ صحيح
خطأ صحيح خطأ صحيح
صحيح صحيح صحيح صحيح

أحيانًا من الضروري أن تعرف ما إذا كان شيء ما غير صحيح. ويُنفي المشغّل not الشرط:

a not a
صحيح خطأ
خطأ صحيح

والمثال السابق مع استثناء النطاق من 5 إلى 8 يمكن برمجته على هذا النحو أيضًا:

number = int(input("Please type in a number: "))
if not (number >= 5 and number <= 8):
    print("The number is not within the range of 5 to 8")

خاصةً في البرمجة، ما زالت المشغّلات المنطقية تُسمّى مشغّلات منطقية بوليانية (Boolean operators).

الشروط المدمجة المبسّطة

الشرط x >= a and x <= b طريقة شائعة جدًّا للتحقّق مما إذا كان العدد x يقع ضمن النطاق من a إلى b. وتعمل التعبيرات ذات هذه البنية بالطريقة نفسها في معظم لغات البرمجة.

تسمح Python أيضًا بكتابة مختصرة مبسّطة لدمج الشروط: a <= x <= b يحقق النتيجة نفسها التي تحققها الصيغة الأطول باستخدام and. وقد تكون هذه الصيغة المختصرة أكثر ألفةً كما في الرياضيات، لكنها ليست مستخدَمة على نطاق واسع في برمجة Python، وربما ذلك لأن عددًا قليلًا جدًّا من لغات البرمجة الأخرى تملك اختصارًا مشابهًا.

دمج الشروط وتسلسلها

يطلب البرنامج التالي من المستخدم إدخال أربعة أعداد. ثم يحدّد أيّها هو الأكبر من بين الأربعة، بمساعدة بعض الشروط:

n1 = int(input("Number 1: "))
n2 = int(input("Number 2: "))
n3 = int(input("Number 3: "))
n4 = int(input("Number 4: "))

if n1 > n2 and n1 > n3 and n1 > n4:
    greatest = n1
elif n2 > n3 and n2 > n4:
    greatest = n2
elif n3 > n4:
    greatest = n3
else:
    greatest = n4

print(f" {greatest} is the greatest of the numbers.")
Number 1: **2**
Number 2: **4**
Number 3: **1**
Number 4: **1**
4 is the greatest of the numbers.

في المثال أعلاه، لا يكون الشرط الأول n1 > n2 and n1 > n3 and n1 > n4 صحيحًا إلا إذا كانت الشروط الثلاثة في داخله صحيحة.

تمرين تفاعلي: التحقّق من العمر

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

انظر إلى أمثلة السلوك المتوقَّع أدناه لتعرف أي تعليق ينطبق في كل حالة.

What is your age? **13**
Ok, you're 13 years old
What is your age? **2**
I suspect you can't write quite yet...
What is your age? **-4**
That must be a mistake

ملاحظة: هذا التمرين يتطلب بيئة TMC التفاعلية ولا يعمل في النسخة الثابتة.

تمرين تفاعلي: الأبناء

يُرجى كتابة برنامج يطلب اسم المستخدم. وإذا كان الاسم Huey أو Dewey أو Louie، فينبغي للبرنامج أن يتعرّف على المستخدم بوصفه أحد أبناء دونالد دَك.

وبالمنوال نفسه، إذا كان الاسم Morty أو Ferdie، فينبغي للبرنامج أن يتعرّف على المستخدم بوصفه أحد أبناء ميكي ماوس.

بعض الأمثلة:

Please type in your name: **Morty**
I think you might be one of Mickey Mouse's nephews.
Please type in your name: **Huey**
I think you might be one of Donald Duck's nephews.
Please type in your name: **Ken**
You're not a nephew of any character I know of.

ملاحظة: هذا التمرين يتطلب بيئة TMC التفاعلية ولا يعمل في النسخة الثابتة.

تمرين تفاعلي: الدرجات والنقاط

يوضّح الجدول أدناه حدود الدرجات في مقرر جامعي معيّن. يُرجى كتابة برنامج يطلب عدد النقاط التي حصلت عليها، ثم يطبع الدرجة التي حصلت عليها وفق الجدول.

النقاط الدرجة
< 0 مستحيل!
0-49 راسب
50-59 1
60-69 2
70-79 3
80-89 4
90-100 5
> 100 مستحيل!

بعض الأمثلة:

How many points [0-100]: **37**
Grade: fail
How many points [0-100]: **76**
Grade: 3
How many points [0-100]: **-3**
Grade: impossible!

ملاحظة: هذا التمرين يتطلب بيئة TMC التفاعلية ولا يعمل في النسخة الثابتة.

تمرين تفاعلي: FizzBuzz

يُرجى كتابة برنامج يطلب من المستخدم عددًا صحيحًا. وإذا كان العدد يقبل القسمة على ثلاثة، فينبغي للبرنامج أن يطبع Fizz. وإذا كان العدد يقبل القسمة على خمسة، فينبغي للبرنامج أن يطبع Buzz. وإذا كان العدد يقبل القسمة على ثلاثة وخمسة معًا، فينبغي للبرنامج أن يطبع FizzBuzz.

بعض أمثلة السلوك المتوقَّع:

Number: **9**
Fizz
Number: **7**
Number: **20**
Buzz
Number: **45**
FizzBuzz

ملاحظة: هذا التمرين يتطلب بيئة TMC التفاعلية ولا يعمل في النسخة الثابتة.

الجمل الشرطية المتداخلة

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

number = int(input("Please type in a number: "))

if number > 0:
    if number % 2 == 0:
        print("The number is even")
    else:
        print("The number is odd")
else:
    print("The number is negative or zero")

بعض أمثلة لسلوك هذا البرنامج:

Please type in a number: **3**
The number is odd

Please type in a number: **18**
The number is even

Please type in a number: **-4**
The number is negative or zero

ومع الجمل الشرطية المتداخلة، من الضروري أن تكون المسافات البادئة (المزاحة) مضبوطة على الوجه الصحيح. فالمسافات البادئة هي التي تحدّد أي الفروع مرتبطة ببعضها. فمثلًا، يُعدّ فرع if وفرع else لهما مقدار المسافات نفسها قبل النص فرعَين لجملة شرطية واحدة.

ويمكن في كثير من الأحيان تحقيق النتيجة نفسها إما باستخدام الجمل الشرطية المتداخلة وإما باستخدام شروط مدمجة مع المشغّلات المنطقية. والمثال أدناه لا يختلف وظيفيًا عن المثال أعلاه، إذ سيطبع الشيء نفسه تمامًا مع المُدخَلات نفسها:

number = int(input("Please type in a number: "))

if number > 0 and number % 2 == 0:
    print("The number is even")
elif number > 0 and number % 2 != 0:
    print("The number is odd")
else:
    print("The number is negative or zero")

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

تمرين تفاعلي: السنة الكبيسة

بشكل عام، أي سنة تقبل القسمة على أربعة هي سنة كبيسة. لكن إذا كانت السنة تقبل القسمة على 100 أيضًا، فهي سنة كبيسة فقط إذا كانت تقبل القسمة على 400 أيضًا.

يُرجى كتابة برنامج يطلب من المستخدم سنة، ثم يطبع ما إذا كانت تلك السنة سنة كبيسة أم لا.

بعض الأمثلة:

Please type in a year: **2011**
That year is not a leap year.
Please type in a year: **2020**
That year is a leap year.
Please type in a year: **1800**
That year is not a leap year.

ملاحظة: هذا التمرين يتطلب بيئة TMC التفاعلية ولا يعمل في النسخة الثابتة.

تمرين تفاعلي: الأبجدي في المنتصف

يُرجى كتابة برنامج يطلب من المستخدم ثلاثة أحرف. ثم ينبغي للبرنامج أن يطبع الحرف الذي سيقع في المنتصف من الحروف الثلاثة لو كانت الأحرف مرتبة أبجديًّا.

يمكنك افتراض أن الأحرف ستكون إما بأحرف كبيرة جميعها أو بأحرف صغيرة جميعها.

بعض أمثلة السلوك المتوقَّع:

1st letter: x
2nd letter: c
3rd letter: p
The letter in the middle is p
1st letter: C
2nd letter: B
3rd letter: A
The letter in the middle is B

ملاحظة: هذا التمرين يتطلب بيئة TMC التفاعلية ولا يعمل في النسخة الثابتة.

تمرين تفاعلي: حاسبة ضريبة الهدايا

يقول بعض الناس إن دفع الضرائب يجعل الفنلنديين سعداء، فلنرَ إذًا إن كان سرّ السعادة يكمن في إحدى الضرائب الواردة في قانون الضرائب الفنلندي.

وفقًا لهيئة الضرائب الفنلندية، تُعرَّف الهدية على أنها نقل ملكية إلى شخص آخر مقابل لا تعويض ولا مقابل مالي. فإذا كان مجموع قيمة الهدايا التي تتلقّاها من مانح واحد خلال 3 سنوات هو 5000 يورو أو أكثر، فيجب عليك دفع ضريبة هدية.

وعند تلقّي الهدية من قريب قريب أو من أحد أفراد الأسرة، فيُحدَّد المبلغ الواجب دفعه من الضريبة وفق الجدول التالي، وهو متاح أيضًا على هذا الموقع:

قيمة الهدية الضريبة عند الحد الأدنى نسبة الضريبة على الجزء الزائد (%)
5 000 — 25 000 100 8
25 000 — 55 000 1 700 10
55 000 — 200 000 4 700 12
200 000 — 1 000 000 22 100 15
1 000 000 — 142 100 17

إذن، بالنسبة إلى هدية قيمتها 6000 يورو، يدفع المستلِم ضريبة قدرها 180 يورو (100 + (6 000 - 5 000) * 0.08). وبالمنوال نفسه، بالنسبة إلى هدية قيمتها 75 000 يورو، يدفع المستلِم ضريبة قدرها 7 100 يورو (4 700 + (75 000 - 55 000) * 0.12).

يُرجى كتابة برنامج يحسب المبلغ الصحيح من ضريبة هدية قادمة من قريب قريب. وانظر إلى الأمثلة أدناه لتعرف ما هو متوقَّع. ولاحظ غياب فواصل الآلاف في قيم المُدخَلات - يمكنك افتراض أنه لن توجد مسافات أو فواصل آلاف أخرى في الأعداد التي يكتبها المستخدم، إذ لم نتناول بعد كيفية التعامل معها.

Value of gift: **3500**
No tax!
Value of gift: **5000**
Amount of tax: 100.0 euros
Value of gift: **27500**
Amount of tax: 1950.0 euros

ملاحظة: هذا التمرين يتطلب بيئة TMC التفاعلية ولا يعمل في النسخة الثابتة.