אופרטורים יחסיים

נתקלנו כבר בערכים בוליאניים אבל עד עכשיו לא עשינו איתם הרבה. האפשרות לקבוע האם משהו נכון או לא, True or False, או במילים אחרות האם מצב מסוים מתקיים, עומדת בבסיס כל לוגיקה שנרצה להטמיע בתכניות שאנחנו כותבים. לפני שמדברים על כתיבת תנאים, חשוב להבין איך אופרטורים יחסיים (אפשר גם לקרוא להם אופרטורים השוואתיים) עובדים.

מה זה אופרטורים יחסיים?

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

השוואת ערכים

כדי לשאול את פייתון האם ערך מסוים שווה לערך אחר נשתמש בסימן שווה כפול (==). חשוב מאוד לא לבלבל את סימן ההשוואה עם סימן שווה יחיד (=) שמשמש לאתחול משתנים.

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

שוב, כאשר מחרוזת שווה לעצמה נקבל את הערך True. גם אם המילה זהה אך גודל האותיות (casing) שונה, פייתון מתייחסת לכך כערך שונה ונקבל False, .כמו שאפשר לראות בדוגמה השנייה
באופן דומה, ניתן לבדוק האם ערך גדול או קטן יותר מערך אחר

במקרה הזה בדקנו האם 100 קטן מ-50 (לא נכון) והאם האות a קטנה מהאות b (נכון). פייתון יודעת להמיר כל תו לערך מספרי לצורך מיון ולכן יודעת בקלות לאבחן האם תווים קטנים או גדולים יותר ע"פ הערך המספרי שלהם. מבחינתנו אם אות קרובה יותר לתחילת רצף האלפבית זה אומר שהיא קטנה יותר. בגלל האבחנה שפייתון עושה בין אותיות קטנות לגדולות אותיות גדולות נחשבות ל"קטנות" יותר מאותיות קטנות (סדרת התווים A-Z מופיעה קודם בדירוג המספרי).

ניתן לשאול גם אם ערך קטן / שווה או גדול / שווה לערך מסוים

בדיקה האם ערך שונה מערך אחר תחזיר True אם הערכים אינם שווים וניתן לבצע אותה בשתי הצורות הבאות

בדוגמה הראשונה קיבלנו בחזרה את הערך False מפני ש-100 אכן שווה ל-100, כך שתוצאת הבדיקה האם הם שונים היא שלילית.

בדיקת מספר השוואות

אנחנו יכולים להשתמש באופרטורים and ו- or כדי לחבר ביחד מספר תנאים בוליאניים.
אם נציב את האופרטור and בין שתי תנאים בוליאניים, נקבל True רק במצב שבו שניהם מתקיימים ו- False בכל מקרה אחר.

ביטוי 1ביטוי 2תוצאה
TrueTrueTrue
TrueFalseFalse
FalseTrueFalse
FalseFalseFalse
נסתכל על דוגמה פשוטה להמחשה.

בדוגמה הבאה נתון מספר מכירות של מוצר כלשהו (20) ומחירו (150). התכנית בודקת האם מספר המכירות קטן מ-50 וגם האם המחיר גדול מ-100. רק במידה ושתי הבדיקות מחזירות True נקבל True. במקרה הזה שני המצבים אכן מתקיימים – מספר המכירות קטן מ-50 והמחיר גדול מ-100. לעומת זאת אם אחת או יותר מהבדיקות תחזיר False הביטוי כולו יחזיר False.

האופרטור or יחזיר אמת במידה ולפחות אחד מהתנאים מתקיים.

ביטוי 1ביטוי 2תוצאה
TrueTrueTrue
TrueFalseTrue
FalseTrueTrue
FalseFalseFalse

בדוגמה האחרונה שראינו רק אחד מהתנאים התקיים ולכן האופרטור and החזיר את הערך False. אם נשתמש באותה דוגמה אך נחליף את האופרטור ל-or נקבל תוצאה שונה.

אמנם מחיר המוצר אינו מעל 300 אבל מספר המכירות קטן מ-20 וזה מספיק כדי להחזיר את הערך True.

האופרטור not

ניתן להפוך תוצאה של ביטוי בוליאני באמצעות הצבת האופרטור not לפניו. בצורה כזו, נקבל True אם הביטוי שגוי ו-False אם הביטוי נכון.

בדיקות הימצאות

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

ניתן לכתוב את הביטוי הזה בצורה מקוצרת

כדי לבדוק הימצאות של ערך בתוך סט ערכים מוגדר, נשתמש באופרטור in.

בפועל, האופרטור in עובר על כל הערכים בסט שהוגדר ובמידה והערך תואם את אחד הערכים נקבל בחזרה True. זאת בעצם דרך יותר קצרה וקריאה לכתוב את הביטוי הבא

צורת הבדיקה הזאת עובדת גם על מחרוזות, מאחר ומחרוזת היא בעצם סט של תווים.