החלטה בצורה של משפט באנגלית
if הוא הכלי הראשון שרוב התוכניות פונות אליו. הוא מאפשר לקוד ללכת במסלול אחד כשתנאי מתקיים ובמסלול אחר כשהוא לא מתקיים. Python כותבת את זה ישירות:
שתי שורות, החלטה אחת. שורת ה-if מסתיימת בנקודתיים. השורה המוזחת שמתחת היא ה_גוף_ של ה-if: הקוד שרץ אם התנאי מתקיים. אם hour היה 15, היו מדלגים על הגוף לגמרי ושום דבר לא היה מודפס.
ההזחה היא המבנה כאן. Python יודעת אילו שורות שייכות ל-if לפי הרווחים שבתחילתן. ארבעה רווחים לכל רמה זו המוסכמה; היו עקביים.
הוספת ענף else
הרבה פעמים רוצים שמשהו יקרה בכל מקרה: דבר אחד כשהתנאי מתקיים, ודבר אחר אחרת. else היא הדרך:
לשורת ה-else אין תנאי: היא תופסת כל מה שה-if לא תפס.
כמה ענפים עם elif
ליותר משני מסלולים, ערמו פסקאות elif ("else if") בין if ל-else:
Python עוברת על התנאים מלמעלה למטה ומריצה את הבלוק של התנאי ה_ראשון_ שמתקיים. על השאר מדלגים. הסדר הזה חשוב: אם שמים את score >= 60 לפני score >= 90, כולם מקבלים D, כי התנאי הראשון שמתקיים מנצח.
מבנה מסודר שכדאי לזכור: התנאים צריכים להיות זרים זה לזה לכל קלט נתון, והסדר צריך לשקף את הדרך הטבעית שבה אתם חושבים על הבעיה. שימו את המקרים הספציפיים ביותר ראשונים, ואת הכלליים ביותר אחרונים.
ערכים truthy בתנאים
הביטוי ב-if לא חייב להחזיר True או False מילוליים. Python מקבלת כל ערך ומחליטה מה ה_אמתיות_ (truthiness) שלו:
if items: נקרא כ"אם יש משהו ברשימה". ערכים falsy כוללים:
False0,0.0None- אוספים ריקים:
"",[],{},set(),()
כל השאר truthy. שימוש באמתיות גורם לקוד להיקרא בצורה טבעית יותר, עם הסתייגות אחת: אם אפס הוא ערך משמעותי (מונה שבאמת עומד על אפס), השוו במפורש עם is not None או != 0 כדי להימנע מהבלבול בין "ריק" ל"אפס".
שילוב תנאים
and, or ו-not מאפשרים לבנות תנאים מורכבים:
השוואות משורשרות מסודרות יותר מ-and מפורש כשלקצוות יש ערך אמצעי משותף:
זה זהה ל-18 <= age and age < 65, אבל זה נקרא כמו אי-שוויון מתמטי.
משפטי if מקוננים
אפשר לשים if בתוך if. זה חוקי, ולפעמים זה המבנה הברור ביותר, אבל זו גם הדרך העיקרית שבה קוד תנאים נעשה קשה למעקב. אם מצאתם את עצמכם שלוש רמות פנימה, שקלו לשטח את הקוד עם החזרות מוקדמות (כשתכתבו פונקציות) או באמצעות שילוב תנאים:
שתי הגרסאות עובדות. בחרו את זו שנקראת טוב יותר ל_קורא שלא ראה את הקוד הזה קודם_.
הביטוי הטרנרי
כשרוצים רק שערך יהיה אחד משני דברים בהתאם לתנאי, ל-Python יש צורה תמציתית:
קראו את זה לפי הסדר: "warm אם temp הוא לפחות 70, אחרת cool". זה מצוין להצבות קצרות של זה או זה. הפסיקו להשתמש בזה ברגע שהענפים מתארכים או מכילים כמה פעולות: בשלב הזה, בלוק if/else מלא נוח יותר לעין.
if הוא ביטוי במקום אחד בלבד
בניגוד לחלק מהשפות, משפט ה-if של Python עצמו לא מחזיר ערך. רק הצורה הטרנרית מחזירה. אי אפשר לכתוב x = if ...: כמו שאפשר ב-Rust או ב-Kotlin. אם רוצים ערך מותנה, השתמשו בטרנרי; אם רוצים התנהגות מותנית, השתמשו בבלוק if מלא.
דוגמה קטנה ושלמה
תוכנית קצרה שמסווגת טמפרטורה:
שימו לב שהלוגיקה היא בעיקר החלטה מה צריך להיות advice. אפשר לראות במבט אחד איזה טווח טמפרטורות ממופה לאיזו הודעה. זו הצורה שאליה אתם שואפים כשאתם כותבים תנאים: כל ענף קטן, והכוונה הכללית ברורה.
מה הלאה
תנאים מאפשרים לקוד לבחור מסלול. לולאות מאפשרות לו לחזור על עצמו. בהמשך: לולאות for, הלולאה הנפוצה ביותר ב-Python בפער גדול, והשותפה הטבעית לאוספים שתפגשו כמה עמודים אחר כך.
שאלות נפוצות
איך עובד משפט if ב-Python?
if condition: ואחריו בלוק מוזח מריץ את הבלוק רק כשהתנאי מתקיים. פסקאות elif (else if) אופציונליות מאפשרות לבדוק תנאים נוספים, ו-else אופציונלי רץ כששום דבר אחר לא התאים.
האם יש ב-Python משפט switch?
Python 3.10 הוסיפה את match/case להתאמת תבניות מבנית, שמכסה את רוב המקרים של משפט switch ואף יותר. להסתעפות פשוטה, שרשרת של if/elif עדיין נפוצה ותקינה לגמרי.
מה זה if טרנרי ב-Python?
ביטוי תנאי בשורה אחת: result = a if condition else b. קוראים אותו לפי הסדר: מחשבים את a כש-condition מתקיים, ואחרת מחשבים את b. נוח להצבות קצרות של זה או זה; פחות קריא כשהענפים מתארכים.