التنفيذ الشرطي
حتى الآن كان البرنامج ينفّذ أوامره واحدا بعد الآخر، بالترتيب نفسه في كل تشغيل. لكن الجهاز الحقيقي يقرّر: إذا ارتفعت الحرارة شغّل المروحة، وإذا هبط جهد البطارية أطلق إنذارا. في هذا الفصل نعلّم البرنامج أن يختار.
- نكتب شروطا بمعاملات المقارنة ونفحص نتيجتها.
- نربط بين الشروط بواسطة المعاملات البوليانية ونعرف ترتيب حسابها.
- نكتب بنى if وelse وelif والشرط داخل الشرط.
- نفحص صلاحية المُدخَلات قبل أن نستعملها.
- نتابع البرنامج بجدول متابعة فيه عمود لكل متغيّر وعمود لكل شرط.
3.1 النوع البولياني – הטיפוס הבוליאני (bool)
كل قرار في البرنامج يبدأ بسؤال جوابه نعم أو لا: هل الباب مفتوح؟ هل الجهد أعلى من الحد؟ لهذا النوع من الأجوبة نوع معطيات خاص.
True (صواب) وFalse (خطأ). نوعها في بايثون اسمه bool.lamp_on = True door_open = False print(lamp_on) print(door_open) print(type(lamp_on))
True False <class 'bool'>
القيمتان True وFalse ليستا جملتين نصيتين، ولذلك لا نضعهما بين علامتي اقتباس. والحرف الأول فيهما كبير حتما.
true بحرف صغير، فلا تعرفها بايثون وتعتبرها اسم متغيّر لم نعرّفه:lamp_on = true
NameError: name 'true' is not defined
3.2 معاملات المقارنة – אופרטורי השוואה
الطريق الأساسي للحصول على قيمة بوليانية هو المقارنة بين قيمتين. لدينا ستة معاملات مقارنة (אופרטורי השוואה)، ونتيجة كل واحد منها إما True وإما False.
| الأمر | عمله |
|---|---|
| a == b | يساوي: يتحقّق عندما تكون القيمتان متساويتين |
| a != b | لا يساوي: يتحقّق عندما تختلف القيمتان |
| a > b | أكبر من |
| a < b | أصغر من |
| a >= b | أكبر من أو يساوي |
| a <= b | أصغر من أو يساوي |
volts = 12 print(volts == 12) print(volts != 12) print(volts > 12) print(volts < 15) print(volts >= 12) print(volts <= 9)
True False False True True False
= هي إسناد (השמה): تضع قيمة في متغيّر. أما الإشارتان == فهما مقارنة. وإذا كتبنا الإسناد مكان المقارنة في شرط، توقّف البرنامج قبل أن يبدأ:volts = 12
if volts = 12:
print("ok")SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
المقارنة تأخذ النوع في الحساب أيضا: العدد 5 والجملة النصية "5" ليسا القيمة نفسها، أما العدد الصحيح 5 والعدد العشري 5.0 فمتساويان لأن قيمتهما العددية واحدة. لذلك نحوّل ما قرأناه بالدالة input إلى عدد قبل أن نقارنه بعدد.
print(5 == 5.0)
print(5 == "5")
print("Volt" == "volt")True False False
volts = float(input("Battery voltage: "))
print("Can start:", volts >= 11.8)Battery voltage: 12.1 Can start: True
لم نكتب هنا أي أمر شرطي بعد: المقارنة وحدها أعطتنا قيمة بوليانية، وطبعناها كما هي.
a = 7 b = 2 print(a % b == 1) print(a // b > 3) print(a / b != 3.5)
3.3 المقارنة بين الأعداد العشرية – בעייתיות ההשוואה בערכים עשרוניים
العدد العشري float يُخزَّن في الحاسوب بالنظام الثنائي، وكثير من الكسور العشرية البسيطة لا يمكن كتابتها فيه بدقة تامة، كما لا يمكن كتابة الثلث بالأعداد العشرية بدقة. لذلك تتراكم فروق صغيرة جدا في الحساب:
total = 0.1 + 0.2 print(total) print(total == 0.3)
0.30000000000000004 False
الحساب صحيح تقريبا، لكن المقارنة == تطلب تساويا تاما، فلا يتحقّق الشرط. وللسبب نفسه قد يتحقّق != حيث لا نتوقع.
== و!=. نفحص بدل ذلك هل الفرق بينهما أصغر من سماح (סבילות) نختاره حسب الدقة المطلوبة، وبالقيمة المطلقة abs لأننا لا نعرف أيهما الأكبر.expected = 0.3 measured = 0.1 + 0.2 tolerance = 0.001 print(measured == expected) print(abs(measured - expected) < tolerance)
False True
السطر الأول من المُخرَج يبيّن الطريقة الخاطئة، والثاني يبيّن الطريقة الصحيحة.
x = 1.1 + 2.2 print(x == 3.3) print(abs(x - 3.3) < 0.01)
3.4 المعاملات البوليانية وجداول الصواب – אופרטורים בוליאניים וטבלאות האמת
قرار حقيقي يعتمد في الغالب على أكثر من سؤال: نشغّل المحرك إذا كان الباب مغلقا والزر مضغوطا. نربط بين الشروط بثلاثة معاملات بوليانية (אופרטורים בוליאניים):
| الأمر | عمله |
|---|---|
| a and b | يتحقّق فقط عندما يتحقّق الطرفان معا |
| a or b | يتحقّق عندما يتحقّق طرف واحد على الأقل |
| not a | يقلب القيمة: الصواب يصبح خطأ والخطأ يصبح صوابا |
نلخّص عمل المعاملات في جدول الصواب (טבלת אמת)، وهو الجدول نفسه الذي نعرفه من البوابات المنطقية في الأنظمة الرقمية:
| a | b | a and b | a or b |
|---|---|---|---|
| False | False | False | False |
| False | True | False | True |
| True | False | False | True |
| True | True | True | True |
| a | not a |
|---|---|
| False | True |
| True | False |
door_open = False
button = True
temp = 72
pressure = 6.5
motor = not door_open and button
alarm = temp > 80 or pressure > 6
print("Motor:", motor)
print("Alarm:", alarm)Motor: True Alarm: True
a = True b = False print(a and b) print(a or b) print(not b) print(not a or b)
3.5 التعابير البوليانية وترتيب العمليّات – ביטויים בוליאניים וסדר הפעולות
التعبير البولياني (ביטוי בוליאני) قد يكون بسيطا مثل x > 3 أو مركبا من عدة شروط. عندما لا توجد أقواس، تحسب بايثون التعبير حسب الترتيب التالي، من الأعلى إلى الأسفل:
| الترتيب | العمليّات |
|---|---|
| 1 | الأقواس ( ) |
| 2 | الحساب: ** ثم * / // % ثم + - |
| 3 | المقارنة: == != < > <= >= |
| 4 | not |
| 5 | and |
| 6 | or |
x = 5 وy = 12:x > 3 and y < 10 or y == 12
نحسب المقارنات أولا: x > 3 يعطي True، وy < 10 يعطي False، وy == 12 يعطي True.
ثم and قبل or: نحسب True and False فنحصل على False.
وأخيرا False or True يعطي True. نفحص بالتشغيل:
x = 5 y = 12 print(x > 3 and y < 10 or y == 12) print(x > 3 and (y < 10 or y == 12))
True True
في هذه الحالة أعطت الأقواس في السطر الثاني النتيجة نفسها، لكنها تجعل المقصود واضحا. عندما يختلط and وor نستعمل الأقواس دائما.
لفحص أن قيمة واقعة في مجال، تسمح لنا بايثون بكتابة مقارنتين متتاليتين، وهما تعنيان الشرط نفسه المكتوب بالمعامل and:
adc = 512 print(0 <= adc <= 1023) print(adc >= 0 and adc <= 1023)
True True
mode == 3 or 7. بايثون تقرأ هذا الشرط هكذا: هل الوضع 3؟ وإن لم يكن، فالقيمة هي 7. وكل عدد غير الصفر يُحسب صوابا، فيتصرف الشرط كأنه يتحقّق دائما. يجب أن نكتب المقارنة كاملة في الطرفين:mode = 5 print(mode == 3 or 7) print(mode == 3 or mode == 7)
7 False
وهناك أمر آخر مفيد: تتوقف بايثون عن الحساب حين تعرف النتيجة، وهذا ما يسمى اختصار الطريق (קיצור דרך בחישוב). فإذا كان الطرف الأيسر في and خطأ، فلا يُحسب الطرف الأيمن أبدا، وكذلك إذا كان الطرف الأيسر في or صوابا. لذلك يعمل البرنامج التالي بلا خطأ، مع أن فيه قسمة على مقاومة صفرية:
r = 0 print(r != 0 and 12 / r > 1)
False
a = 4 b = 9 print(a > 5 or b > 5 and a != 4) print((a > 5 or b > 5) and a != 4) print(not a > 5 and b > 5)
3.6 الأمر if – ביצוע מותנה: if
الأمر if ينفّذ مجموعة أوامر فقط عندما يتحقّق شرط. نكتبه هكذا:
if condition:
statement
statement
next_statement- بعد الشرط نقطتان
:، وبدونهما لا يعمل البرنامج. - الأوامر التابعة للشرط، أي جسم الشرط (גוף התנאי)، مزاحة إلى الداخل أربع مسافات. الإزاحة (הזחה) هي التي تحدد ماذا يتبع الشرط؛ لا توجد أقواس.
- الأمر التالي، بلا إزاحة، ليس تابعا للشرط ويُنفَّذ في كل حال.
temp = int(input("Temperature: "))
if temp > 40:
print("Too hot!")
print("Turn the fan on")
print("Check finished")Temperature: 47 Too hot! Turn the fan on Check finished
وللمُدخَل 30 لا يتحقّق الشرط، فيُطبع السطر الأخير فقط: Check finished
سطر واحد نزيحه أو لا نزيحه يغيّر معنى البرنامج. في البرنامج التالي الحرارة منخفضة، ومع ذلك يُطبع السطر الأخير لأنه خارج جسم الشرط:
temp = 30
if temp > 40:
print("Too hot!")
print("Turn the fan on")Turn the fan on
وإذا نسينا الإزاحة تماما، فلا يبدأ البرنامج أصلا:
temp = 47
if temp > 40:
print("Too hot!")IndentationError: expected an indented block after 'if' statement on line 2
جدول المتابعة – טבלת מעקב:
جدول المتابعة هو الأداة الأساسية لفهم برنامج ولفحصه، وهو مطلوب في امتحان البجروت. نفتح فيه عمودا لكل متغيّر، عمودا لكل شرط وعمودا للمُخرَج، ونكتب سطرا لكل أمر يُنفَّذ. الخانة الفارغة تعني أن القيمة لم تتغير. الأمر الذي لا يُنفَّذ لا يظهر في الجدول.
| الأمر | temp | temp > 40 | المُخرَج |
|---|---|---|---|
| temp = int(input("Temperature: ")) | 47 | Temperature: 47 | |
| if temp > 40: | True | ||
| print("Too hot!") | Too hot! | ||
| print("Turn the fan on") | Turn the fan on | ||
| print("Check finished") | Check finished |
a = 3
b = 8
if b > a:
a = a + b
b = 0
if a > 10:
b = 1
print(a, b)3.7 الأمر if مع else – ביצוע מותנה: if..else
عندما نريد عملا عند تحقّق الشرط وعملا آخر عند عدم تحقّقه، نضيف else. عندها يُنفَّذ واحد بالضبط من الجسمين. لا يوجد بعد else شرط، بل نقطتان فقط.
presses = int(input("Button presses: "))
if presses % 2 == 1:
print("Lamp ON")
else:
print("Lamp OFF")
print("done")Button presses: 14 Lamp OFF done
| الأمر | presses | presses % 2 == 1 | المُخرَج |
|---|---|---|---|
| presses = int(input("Button presses: ")) | 7 | Button presses: 7 | |
| if presses % 2 == 1: | True | ||
| print("Lamp ON") | Lamp ON | ||
| print("done") | done |
solar = float(input("Solar panel V: "))
battery = float(input("Battery V: "))
if solar > battery:
source = "solar"
else:
source = "battery"
print("Load runs from:", source)Solar panel V: 11.2 Battery V: 12.4 Load runs from: battery
الأمر print خارج البنية، ولذلك يُنفَّذ في المسارين.
(أ) للمُدخَل 12.
(ب) للمُدخَل 7.
x = int(input("x: "))
if x % 3 == 0:
x = x // 3
else:
x = x + 1
print(x)3.8 سلسلة الشروط elif – שרשרת תנאים: elif
عندما توجد أكثر من حالتين نضيف elif، وهي اختصار لقولنا «وإلا فإذا». تُفحص الشروط من الأعلى إلى الأسفل، وعند أول شرط يتحقّق يُنفَّذ جسمه وتُتخطى بقية السلسلة. الجزء else في النهاية اختياري، ويعمل إذا لم يتحقّق أي شرط.
volts = float(input("Battery voltage: "))
if volts >= 12.6:
print("Full")
elif volts >= 12.0:
print("Partly charged")
elif volts >= 11.8:
print("Low")
else:
print("Empty")Battery voltage: 12.2 Partly charged
| الأمر | volts | volts >= 12.6 | volts >= 12.0 | المُخرَج |
|---|---|---|---|---|
| volts = float(input("Battery voltage: ")) | 12.2 | Battery voltage: 12.2 | ||
| if volts >= 12.6: | False | |||
| elif volts >= 12.0: | True | |||
| print("Partly charged") | Partly charged |
الشرط الثالث لم يُفحص، ولذلك لا يوجد له عمود في الجدول. يكفي أن نكتب volts >= 12.0 من دون volts < 12.6، لأننا لا نصل إلى هذا السطر إلا إذا كان الجهد أقل من 12.6 V.
volts = 13.0
if volts >= 11.8:
print("Low")
elif volts >= 12.6:
print("Full")Low
وليس هذا كسلسلة من أوامر if منفصلة: في الأوامر المنفصلة يُفحص كل شرط مهما حدث قبله، فقد يُنفَّذ أكثر من جسم واحد:
temp = 95
if temp >= 90:
print("Shutdown")
if temp >= 70:
print("Alarm")
if temp >= 50:
print("Fan on")Shutdown Alarm Fan on
(أ) للمُدخَل 75.
(ب) للمُدخَل 10.
(ج) للمُدخَل 101.
n = int(input("n: "))
if n > 100:
print("A")
elif n > 50:
print("B")
elif n > 10:
print("C")
else:
print("D")3.9 شرط داخل شرط – תנאי בתוך תנאי
جسم الشرط يمكن أن يحتوي أي أمر، بما في ذلك أمر if آخر. هذا هو الشرط المتداخل (קינון תנאים). كل مستوى تداخل يضيف إزاحة، وelse تتبع if الذي في عمودها نفسه.
supply = float(input("Supply voltage: "))
if supply > 2:
resistor = (supply - 2) / 0.02
if resistor >= 220:
print("Use", resistor, "ohm")
else:
print("Use 220 ohm")
else:
print("Supply too low")Supply voltage: 12 Use 500.0 ohm
| الأمر | supply | resistor | supply > 2 | resistor >= 220 | المُخرَج |
|---|---|---|---|---|---|
| supply = float(input("Supply voltage: ")) | 5.0 | Supply voltage: 5 | |||
| if supply > 2: | True | ||||
| resistor = (supply - 2) / 0.02 | 150.0 | ||||
| if resistor >= 220: | False | ||||
| print("Use 220 ohm") | Use 220 ohm |
للمُدخَل 1.5 نحصل على المسار الثالث: Supply too low
الشرط الذي يتبع شرطا من دون أي عمل بينهما يمكن كتابته بالمعامل and، والبرنامج يصبح أقصر:
if temp > 40:
if fan_ok:
print("Fan on")if temp > 40 and fan_ok:
print("Fan on")أما في برنامج المثال السابق فلا يمكن ذلك بهذه البساطة، لأن بين الشرطين أمرا يحسب المقاومة، ولأن لكل شرط فرع else خاصا به.
(أ) عندما a=−1 وb=4.
(ب) عندما a=2 وb=0.
a = int(input("a: "))
b = int(input("b: "))
if a > 0:
if b > 0:
print("both")
else:
print("first")
else:
if b > 0:
print("second")
else:
print("none")3.10 صلاحية المُدخَلات – תקינות קלט ומסננת קלט פשוטה
البرنامج الجيد لا يثق بما يكتبه المستخدم. مصفاة المُدخَلات (מסננת קלט) تفحص القيمة قبل استعمالها، وتتوقف عن الحساب إذا كانت غير صالحة. في هذا الفصل نكتبها بشرط فقط؛ في الفصل 4 نعلّم البرنامج أن يعيد السؤال حتى يصل مُدخَل صحيح.
adc = int(input("ADC reading: "))
if 0 <= adc <= 1023:
if adc >= 512:
print("Upper half")
else:
print("Lower half")
else:
print("Sensor fault")ADC reading: 1200 Sensor fault
وهناك خطر أكبر من طباعة نتيجة خاطئة: مُدخَل غير صالح قد يوقف البرنامج كله. هذا ما يحدث في قانون أوم إذا أدخل المستخدم مقاومة صفرية:
v = 12.0
r = float(input("R: "))
print("I =", v / r)R: 0 ZeroDivisionError: division by zero
نضع الحساب داخل شرط، فلا يصل البرنامج إلى القسمة إلا بقيمة صالحة:
v = 12.0
r = float(input("R: "))
if r > 0:
print("I =", v / r)
else:
print("R must be positive")R: 0 R must be positive
int(input()) ينهار أيضا إذا كتب المستخدم حروفا بدل عدد. معالجة ذلك تحتاج إلى أدوات نتعلمها لاحقا، في الفصل الاختياري عن الاستثناءات.3.11 الأمر match – משפט בחירה: switch-case (match)
عندما نقارن متغيّرا واحدا بقائمة قيم محددة، كما في قائمة خيارات، نستطيع أن نكتب بدل سلسلة elif الأمر match. تسميه خطة التعليم (משפט switch-case) كما في لغات أخرى، وهو موجود في بايثون منذ الإصدار 3.10.
choice = int(input("Choice: "))
match choice:
case 1:
print("Start motor")
case 2:
print("Stop motor")
case 3 | 4:
print("Show status")
case _:
print("Unknown choice")Choice: 4 Show status
بعد case نكتب القيمة، والإشارة | تعني «أو»، والإشارة _ تعني «كل قيمة أخرى»، وهي تقوم مقام else. عند أول حالة مطابقة يُنفَّذ جسمها وتنتهي البنية.
match يقارن المتغيّر بقيم ثابتة. أما مجال مثل «أكبر من 40» فنكتبه بسلسلة if وelif. والأمر match لا يعمل في المختبر الحي في الموقع، بل في بايثون نفسها على الحاسوب أو في بيئة مثل Google Colab.في مشروع هذا الكتاب نبني خطوة بعد خطوة محطة قياس تعمل ببطارية ولوح شمسي: حسّاسات، حمل ومروحة. في الفصل السابق حوّلت المحطة قراءاتها إلى جهد وحرارة. الآن تقرّر: تفصل الحمل إذا هبطت البطارية عن 11.8 V، وتشغّل المروحة إذا زادت الحرارة على 40 درجة والحمل يعمل.
battery = float(input("Battery V: "))
temp = float(input("Temperature: "))
if battery < 11.8:
load = False
else:
load = True
if temp > 40 and load:
fan = "ON"
else:
fan = "OFF"
print("Load on:", load)
print("Fan:", fan)Battery V: 12.4 Temperature: 46 Load on: True Fan: ON
نجرّب بأنفسنا: ماذا يتغيّر عندما يكون جهد البطارية 11.5 V؟ ولماذا تتوقف المروحة أيضا؟
أهمّ أفكار الفصل:
- الشرط تعبير قيمته
TrueأوFalse، نبنيه بمعاملات المقارنة ونربط أجزاءه بالمعاملاتandوorوnot. - الإشارة
=إسناد والإشارتان==مقارنة. والأعداد العشرية نقارنها بسماح، لا بالمساواة التامة. - الإزاحة هي التي تحدد ما يتبع الشرط. هي جزء من اللغة وليست زينة.
- في سلسلة
elifيُنفَّذ جسم واحد على الأكثر، ولذلك ترتيب الشروط مهم. - نفحص المُدخَل قبل أن نستعمله، ونتابع البرنامج بجدول متابعة قبل أن نحكم عليه.
ملخّص أوامر الفصل:
| الأمر | عمله |
|---|---|
| if condition: | ينفّذ الجسم فقط إذا تحقّق الشرط |
| else: | ينفّذ الجسم إذا لم يتحقّق الشرط |
| elif condition: | شرط إضافي، يُفحص إذا لم يتحقّق ما قبله |
| match x: case 1: case _: | اختيار حسب قيمة متغيّر واحد |
| == != > < >= <= | معاملات المقارنة |
| and or not | المعاملات البوليانية |
| abs(a - b) < tolerance | مقارنة عددين عشريين بسماح |
قاموس المصطلحات – מילון מונחים:
| بالعربية | بالعبرية (كما تظهر في الامتحان) | English |
|---|---|---|
| القيمة البوليانية | ערך בוליאני | Boolean value |
| معامل مقارنة | אופרטור השוואה | Comparison operator |
| معامل بولياني | אופרטור בוליאני | Boolean operator |
| جدول الصواب | טבלת אמת | Truth table |
| تعبير بولياني | ביטוי בוליאני | Boolean expression |
| الشرط | תנאי | Condition |
| التنفيذ الشرطي | ביצוע מותנה | Conditional execution |
| جسم الشرط | גוף התנאי | Body of the condition |
| الإزاحة | הזחה | Indentation |
| شرط داخل شرط | תנאי בתוך תנאי (קינון) | Nested condition |
| جدول المتابعة | טבלת מעקב | Trace table |
| المُدخَل · المُخرَج | קלט · פלט | Input · Output |
| مصفاة المُدخَلات | מסננת קלט | Input filter |
| السماح | סבילות | Tolerance |
3.3 تماما، لكن الفرق بينهما أصغر من السماح.11 14 ، (ب) 8B ، (ب) D ، (ج) Asecond ، (ب) firstأسئلة للتمرين:
a = 6 b = 15 print(a > 5 and b < 10) print(a > 5 or b < 10) print(not (a == 6)) print(b % a == 3)
False , True , False , True(أ) العدد x بين 10 و20، شاملا الطرفين.
(ب) العدد x مضاعف للعدد 7.
(ج) المتغيّران a وb مختلفان وكلاهما موجب.
10 <= x <= 20 ، (ب) x % 7 == 0 ، (ج) a != b and a > 0 and b > 0(أ) للمُدخَل 3.
(ب) للمُدخَل 8.
(ج) للمُدخَل 12.
x = int(input("x: "))
y = 1
if x > 5:
y = y + x
if x > 10:
y = y * 2
else:
y = y - 1
print(y)0 ، (ب) 8 ، (ج) 26t = 30
if t = 30
print("ok")if يجب أن تكون المقارنة ==، وبعد الشرط نقطتان، والأمر print يجب أن يكون مزاحا:t = 30
if t == 30:
print("ok")Safe إذا كان موجبا ولا يزيد على 5 V، وإلا يطبع Unsafe.v = float(input("V: "))
if 0 < v <= 5:
print("Safe")
else:
print("Unsafe")Freezing تحت 0 درجة، Cold تحت 15، Warm تحت 30، وإلا Hot.t = float(input("Temperature: "))
if t < 0:
print("Freezing")
elif t < 15:
print("Cold")
elif t < 30:
print("Warm")
else:
print("Hot")15 يطبع: WarmGood resistor للمقاومة الجيدة وReject لغيرها.nominal = float(input("Nominal: "))
measured = float(input("Measured: "))
low = nominal * 0.95
high = nominal * 1.05
if low <= measured <= high:
print("Good resistor")
else:
print("Reject")470 و500 يطبع: RejectL1 وL2 وL3، ويطبع اسم الخط ذي التيار الأعلى وقيمته، من دون استعمال الدالة max.l1 = float(input("L1: "))
l2 = float(input("L2: "))
l3 = float(input("L3: "))
top = l1
name = "L1"
if l2 > top:
top = l2
name = "L2"
if l3 > top:
top = l3
name = "L3"
print("Highest:", name, top)4.5, 9, 2 يطبع: Highest: L2 9.0a = int(input("a: "))
b = int(input("b: "))
if a > b:
a = a - b
elif a == b:
a = 0
else:
b = b - a
if b > 3:
b = b // 2
print(a, b)| الأمر | a | b | a > b | a == b | b > 3 | المُخرَج |
|---|---|---|---|---|---|---|
| a = int(input("a: ")) | 3 | a: 3 | ||||
| b = int(input("b: ")) | 11 | b: 11 | ||||
| if a > b: | False | |||||
| elif a == b: | False | |||||
| b = b - a | 8 | |||||
| if b > 3: | True | |||||
| b = b // 2 | 4 | |||||
| print(a, b) | 3 4 |
v = float(input("V: "))
r = float(input("R: "))
if r > 0:
print("I =", v / r)
else:
print("R must be positive")12 و4 يطبع: I = 3.0year = int(input("Year: "))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
print("Leap year")
else:
print("Common year")2024, 1900, 2000 يطبع على الترتيب: Leap year , Common year , Leap yearlow = 2.0
high = 3.0
v = float(input("V: "))
if v < 0:
print("Bad reading")
elif v < low:
print("Below window")
elif v <= high:
print("Inside window")
else:
print("Above window")-1, 1.5, 3, 4 يطبع على الترتيب: Bad reading , Below window , Inside window , Above windowmatch: يختار المستخدم ماذا يحسب، ثم يدخل قيمتين. في الخيار 1 نحسب V من I وR، في الخيار 2 نحسب I من V وR، وفي الخيار 3 نحسب R من V وI. نمنع القسمة على صفر.choice = int(input("Find (1=V, 2=I, 3=R): "))
a = float(input("First value: "))
b = float(input("Second value: "))
match choice:
case 1:
print("V =", a * b)
case 2:
if b != 0:
print("I =", a / b)
else:
print("Division by zero")
case 3:
if b != 0:
print("R =", a / b)
else:
print("Division by zero")
case _:
print("Unknown choice")2, 12, 4 يطبع: I = 3.0שאלות בגרות – أسئلة بجروت للفصل 3
| البند | المطلوب | الإجابة |
|---|---|---|
| (ب) | نكتب برنامجا يطبع اسم صاحب البطاقة ذات الرصيد الأعلى من بين بطاقتين. إذا تساوى الرصيدان يطبع رسالة ملائمة. | في الأسفل |
| (أ) ، (ج) | يعتمدان على الفئة TravelCard نفسها. | في الفصل 8 |
لم نتعلم الفئات بعد، ولذلك نحفظ كل اسم وكل رصيد في متغيّر خاص به. منطق البند هو السلسلة نفسها بالضبط:
name1 = input("Name 1: ")
balance1 = float(input("Balance 1: "))
name2 = input("Name 2: ")
balance2 = float(input("Balance 2: "))
if balance1 > balance2:
print(name1)
elif balance2 > balance1:
print(name2)
else:
print("Both cards have the same balance.")Name 1: Dana Balance 1: 75.5 Name 2: Omar Balance 2: 40 Dana
ويطبع البرنامج Both cards have the same balance. عندما يتساوى الرصيدان. وفي حل الامتحان نفسه، بعد أن نتعلم الفئات، نكتب c1.balance بدل balance1، ويبقى الشرط كما هو.