משפטי תנאי בסיסיים: if וif-else#
צפו בסרטון הבא כדי ללמוד איך לממש משפטי תנאי בפייתון:
לנוחותכם חלונית עם הקוד שראינו בסרטון. מוזמנים להריץ בעצמכם:
temp = 18
if temp < 20:
print("Eat soup!")
print("Enjoy!")
else:
print("Eat a salad!")
print("Bon appetit!")
Eat soup!
Enjoy!
Bon appetit!
בסרטון ראינו כיצד לממש בפייתון קוד של בלוק if וקוד של בלוק if-else. כעת נתעמק בכל אחד מהמבנים הללו.
תחביר תנאי פשוט (if)#
משפטי תנאי (או פקודות תנאי) הם סוג פקודות בסיסי בתכנות המאפשר לנו לשלוט בסדר הפעולות של התוכנית אותה אנחנו כותבים. משפטי תנאי מאפשרים להתנות ריצה של חלק מסוים בקוד בקיומו (או אי-קיומו של תנאי מסוים).
הערה: יופיעו כעת מספר קטעי קוד בהם תופיע בתוך התנאי המילה condition, אשר תייצג ערך מטיפוס בוליאני (כלומר ערכו הוא True או False).
הצורה הבסיסית ביותר היא ביצוע פקודות מסוימות אם תנאי מסוים מתקיים. במקרה זה הקוד בנוי כך:
if condition:
statement1
statement2
statement3
שימו לב – לאחר משפט התנאי (שמתחיל ב-if) יש צורך לשים נקודותיים.
אם ערכו של condition הוא True, אז יורצו השורות statement1 ו-statement2 (המוזחות ארבעה רווחים או טאב ימינה), ולאחר מכן ירוץ statement3.
אם ערכו של condition הוא False, נדלג על המוזח ימינה (statement1 ו-statement2) ונמשיך לקוד הבא בתכנית (statement3).
שימו לב! statement3 אינו בהזחה, ולכן אינו חלק מבלוק התנאי. הקוד הזה ירוץ בכל מקרה - בלי קשר לערך של condition.
תרשים סיכום לתנאי פשוט (if):#
כלומר, בבלוק שמכיל if - ניתן להוסיף קוד “אקסטרה” שירוץ רק אם התנאי מתקיים.
נסו בעצמכם
הקוד הבא בודק אם מספר הקלט מתחלק ב18.
num=53
if num % 18 == 0:
print(num, "is divisible by 18")
print("Goodbye")
Goodbye
שנו את הקוד כך שידפיס “num is not divisible by 18” רק אם המספר לא מתחלק ב18. וידפיס Goodbye בכל מקרה.
תחביר if-else#
במקרים רבים נרצה לא רק להריץ קוד אם תנאי מסוים מתקיים, אלא גם להגדיר מה יקרה אם הוא לא מתקיים. כאן נכנס לתמונה המבנה if-else.
if condition1:
statement1
else:
statement2
statement3
שימו לב שגם לאחר ה-else מופיעות נקודותיים.
הבלוק הזה מאפשר לנו לבחור בין שתי אפשרויות: אם התנאי נכון - נבצע את הפקודות שמתחת לif. אם לא - נבצע את הפקודות שמתחת ל־else. כך אנחנו יודעים שבכל מקרה, אחד משני המסלולים ירוץ.
הזחה:#
בפייתון, ההזחה (indentation) היא לא סתם עניין של סידור יפה של הקוד – היא קובעת בפועל איזה פקודות שייכות לתנאי ואיזה פקודות ירוצו תמיד.
המילה
elseחייבת להיות באותה רמת הזחה כמו הifשאליו היא שייכת.הפקודות שנמצאות תחת ה
elseחייבות להיות מוזחות פנימה, בדיוק כמו הפקודות שמתחת לif.פקודות שאינן מוזחות פנימה - כלומר, באותה רמה של ה
if- ירוצו תמיד, בלי קשר אם התנאי התקיים או לא.
בגלל זה, אם תעשו טעות קטנה בהזחה – הקוד עלול לרוץ אחרת ממה שהתכוונתם, וזה מקור קלאסי ל”באגים” אצל מתכנתים מתחילים.
תרשים סיכום ל-if-else:#
לעומת בלוק if רגיל - במקרה הזה ניתן להגדיר פקודות שונות שירוצו לכל ערך של Expr.
נסו בעצמכם
בקוד הבא שמורים האורכים של שתי צלעות סמוכות של מלבן במשתנים height וwidth, ומחושב האם המלבן הוא גם ריבוע
נסו לשנות את אורכי הצלעות ובחנו כיצד משתנה ההדפסה
width=4
height=4
if width == height:
print("found a square")
else:
print("found a rectangle")
print("done")
found a square
done