ביצוע מותנה
עד עכשיו התוכנית ביצעה את פקודותיה בזו אחר זו, באותו סדר בכל הרצה. אבל מכשיר אמיתי מחליט: אם הטמפרטורה עולה הוא מפעיל מאוורר, ואם מתח הסוללה יורד הוא מפעיל אזעקה. בפרק הזה נלמד את התוכנית לבחור.
- נכתוב תנאים בעזרת אופרטורי השוואה ונבדוק את תוצאתם.
- נחבר בין תנאים בעזרת אופרטורים בוליאניים ונכיר את סדר חישובם.
- נכתוב מבני 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 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
כשרוצים לבצע הוראה אחת כשהתנאי מתקיים והוראה אחרת כשאינו מתקיים, מוסיפים 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, שהוא קיצור של "אחרת, אם". התנאים נבדקים מלמעלה למטה, ובתנאי הראשון שמתקיים מתבצע הגוף שלו ומדלגים על שאר השרשרת. החלק 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 משפט בחירה (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, והתנאי יישאר כמו שהוא.