פקודות תנאי

בפרקים הקרובים נלמד על פקודות המשפיעות על סדר ביצוע פקודות אחרות בתוכנית ונקראות Control Flow. נתחיל עם היכולת להחליט איזה פקודות להריץ לפי קיום תנאי.

1. הפקודה if

הפקודה if היא פקודת התנאי בפייתון והיא עובדת כמו בשפות אחרות שאתם מכירים. ניתן גם להשתמש ב if-else כדי לבנות תנאים מורכבים. מבחינת תחום הגדרה, פייתון משתמשת באינדנטציה של השורות כדי להבין היכן בלוק של קוד מתחיל והיכן מסתיים, כך שהגדרת הבלוקים היא קריאה יותר בהשוואה לשפות אחרות. כך גם אם תטעו בעימוד התוכנית פשוט לא תעבוד. נתחיל בתוכנית המקבלת מהמשתמש מספר ומדפיסה האם המספר זוגי:

print "Tell me your number"
num = int(raw_input())

if num % 2 == 0:
    print "The number is even"
else:
    print "The number is odd"

print "--- The end"

שימו לב לסימן הנקודותיים בסיום שורת ה if וגם בסיום המילה else. בפייתון אנו משתמשים בנקודותיים לפני תחילת בלוק, וכך השורה שאחרי הנקודותיים צריכה להופיע בעימוד פנימה.

2. חיבור מספר תנאים

הפקודה elif מאפשרת הוספת בדיקות נוספות לבלוק if. כך נרחיב את התוכנית שלנו לבדוק האם המספר מתחלק גם ב-3 או 5:

print "Tell me your number"
num = int(raw_input())

if num % 2 == 0:
    print "The number is even"
elif num % 3 == 0:
    print "The number is divisable by 3"
elif num % 5 == 0:
    print "The number is divisable by 5"
else:
    print "The number is not divisable by 2,3 or 5"

print "--- The end"

היו זהירים: מספר שמתחלק גם ב-3 וגם ב-5 לא יגרום להצגת שתי ההודעות. ברגע שאחד התנאים מתקיים פייתון מסיים את בלוק ה if, נכנס לבצע את בלוק הפקודות וממשיך לשורה שאחריו.

3. התנאי עצמו: מספרים לעומת מחרוזות

בעת כתיבת התנאי יש לזכור להתחשב בסוג המידע אותו אתם משווים. בפייתון אופרטור ההשוואה מושפע מסוג המידע, כך שהמספר 2.0 נחשב שווה למספר 2, אך המחרוזת "2.0" נחשבת שונה מהמחרוזת "2".

מאותה הסיבה אופרטורים מקבלים משמעות שונה כשמשתמשים בהם בהקשר של מספרים או הקשר של מחרוזות. אופרטור החיבור ישרשר יחד שתי מחרוזות אבל יחבר בחיבור נומרי שני מספרים:

>>> "2" + "2"
'22'

>>> 2 + 2
4

אופרטור ה-% משמש לחישוב שארית בחלוקה כשמופעל על מספרים, אך כשמופעל על מחרוזות משמעותו החלפת משתנים בתוך המחרוזת (כפי שנלמד בפרקים הבאים).

בעת בדיקת תנאי, ובכלל בעת ביצוע פעולות בפייתון, יש לוודא שאתם עובדים עם סוג המידע הנכון. אם אתם לא בטוחים רצוי להמיר את המשתנים שלכם לסוג המתאים. השורה הבאה תמיד תבצע חיבור נומרי, בלי קשר לסוג של x ו y. במידה ואחד מהם הוא מחרוזת, השורה תמיר אותו לערכו המספרי:

>>> int(x) + int(y)
4

הפקודה int ממירה את הפרמטר שקיבלה למספר שלם, הפקודה float ממירה את הפרמטר שקיבלה למספר עם נקודה עשרונית והפקודה str ממירה את הפרמטר שקיבלה למחרוזת. הפקודה type מחזירה את סוג הפרמטר שתעבירו אליה.

4. קיצורי דרך

גירסא מקוצרת של פקודת ה if עבור שורה אחת נראית כך:

if num % 2 == 0: print "Even!"

אפשרות שניה לקיצור היא שימוש ב if כביטוי ולא כפקודה מלאה, לדוגמא שילוב if עם פקודת הצבה במשתנה. המבנה מוכר בתור Ternary Operator בשפות אחרות ובפייתון נראה כך:

x = 10 if 2 < 3 else 20


דוגמא לתוכנית עם if:

if 2 < 3:
    print "We saw it coming"
else:
    print "Unbelievable"
    

מבנה כללי של בלוק if בפייתון:

if condition:
    statement
    ...
elif condition:
    statement
    ...
else:
    statement
    ...
    

קבצי הדוגמא שהוצגו במדריך:
https://github.com/ynonp/python-examples/tree/master/03_flow