ביטויים בוליאנים


נתקלנו כבר בערכים בוליאנים אבל עד עכשיו לא עשינו איתם הרבה. האפשרות לקבוע האם משהו

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




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

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


השוואת ערכים

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

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


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


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


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


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

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


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

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


נסתכל על דוגמה פשוטה להמחשה:


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


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

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

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


האופרטור NOT

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


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

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


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


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


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

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



© כל הזכויות שמורות לאלעד פלג 2020