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

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

הגדרה

ווהו! רק פתחנו מחברת וכבר זרקו עלינו מילים מפוצצות. מה בוליאניים עכשיו?
בכל הנוגע לתחום שלנו, זה הרבה יותר פשוט ממה שזה נשמע.
בתכנות, ביטוי נחשב ביטוי בוליאני אם תוצאתו היא אמת או שקר.

דוגמאות

  • האם 2 גדול מ־3?
  • האם האור בחדר שלי דולק?
  • האם טמפרטורת המים הזורמים כעת במקלחת היא מתחת ל־60 מעלות?
  • האם אכלתי היום קלמנטינה?
  • האם השם שלי הוא "אקורדינכס בן נהריה השלישי"?
  • האם המשתמש "moshe15" באפליקציית "קרמבולנד" הזמין עגבניה?
  • האם המשתמש הזין קלט לא תקין (נניח: "משה" בשדה גיל, או סיסמה שגויה לכספומט)?

אופרטורי השוואה

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

בואו נכיר את אופרטור ההשוואה הראשון שלנו: ==.
הריצו את הביטויים הבוליאניים הבאים, ונסו לנחש מה הוא עושה.


In [ ]:
5 == 5

In [ ]:
5 == 4

In [ ]:
1 == 1.0

In [ ]:
5 == '5'

In [ ]:
2 + 1 == 3

In [ ]:
2 ** 3 - 1 == 8 - 1

In [ ]:
'a' == 'a'

In [ ]:
'Hello Buya' == "Hello Buya"

In [ ]:
'hello buya' == 'Hello Buya'

הדוגמה הזו מלמדת אותנו 3 דברים מגניבים:

  1. פייתון יודעת לענות בעזרת ערכים בוליאניים מיוחדים, שיכולים להיות True או False.
  2. יש אופרטור מגניב שנקרא אופרטור ההשוואה, צורתו היא == והוא משווה בין 2 ערכים בפייתון.
  3. יש סוגים שהשוואה ביניהם תעבוד (float עם int), ויש כאלו שלא (float עם str או int עם str).

טיפוס בוליאני

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


In [ ]:
type(True)

In [ ]:
type(False)

ווהו! אז אם התרגלנו עד עכשיו שיש 3 טיפוסים שאנחנו מכירים: str, int ו־float, הכירו את הבחור החדש בשכונה!
bool הוא טיפוס חביב ופשוט שמייצג רק 2 ערכים אפשריים: True או False.
כל אופרטור השוואה שנחיל על שני ערכים, יחזיר תמיד ערך מסוג bool (חוץ מכשפייתון תתריע על שגיאה).

טעות נפוצה בעת שימוש בערכים בוליאניים היא לא להתחשב ברגישות לאותיות גדולות/קטנות.
לדוגמה: True יהיה תקין בעוד ש־true יקפיץ שגיאה.

אופרטורי השוואה נוספים

תוצאה לדוגמה דוגמה משמעות בעברית אופרטור השוואה
True 4 == 4 האם צד שמאל שווה לצד ימין ==
False 4 != 4 האם צד שמאל שונה מצד ימין !=
True 5 > 4 האם צד שמאל גדול יותר מצד ימין >
False 4 > 5 האם צד שמאל קטן יותר מצד ימין <
False 2 >= 4 האם צד שמאל גדול או שווה לצד ימין >=
True 4 <= 5 האם צד שמאל קטן או שווה לצד ימין <=
True 'hell' in 'hello' האם צד שמאל נמצא ברצף בצד ימין in

מונחים

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

תרגול

שווה את זה?

רשמו בצד את התוצאות של כל אחת מהשורות הבאות.
רק לאחר מכן הריצו ובדקו האם צדקתם בתשובתכם.
בחלק מהסעיפים (בייחוד באלו שקשורים ב־in) דרושה קצת אינטואיציה.


In [ ]:
5 == 3

In [ ]:
1 != 1

In [ ]:
5 > 3

In [ ]:
5 < 3

In [ ]:
'hello' == 'Hello'

In [ ]:
'MARIO' == 'MARIO '

In [ ]:
1.5 == 1

In [ ]:
1.0 == 1

In [ ]:
1 == 1.0

In [ ]:
5 != 7 - 2

In [ ]:
5 >= 5.0

In [ ]:
'5' > '24'  # ראו אזהרה למטה

In [ ]:
'Hell' in 'Hello'

In [ ]:
'hell' in 'Hello'

In [ ]:
'tom' in 'to master'

In [ ]:
'2' in '20'

In [ ]:
2 in '20'  # פייתון תתריע על שגיאה. למה?

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

מעורב ירושלמי

אנחנו הולכים להגדיר פה כמה משתנים מעניינים:


In [ ]:
price_of_pizza = 100  # NIS
slices_in_pizza = 8
favorite_topping = 'pineapple'  # Don't judge!
delivery_time = 30  # In minutes

הריצו את התא שנמצא למעלה: סמנו אותו ולחצו CTRL + ENTER.
מה יהיו התוצאות של הביטויים הבאים? כתבו אותן בצד, ואז הריצו ובדקו האם תשובתכם הייתה נכונה.


In [ ]:
price_of_pizza >= 50

In [ ]:
slices_in_pizza == 6

In [ ]:
favorite_topping != 'olives'

In [ ]:
price_of_pizza / slices_in_pizza > 10

In [ ]:
delivery_time <= 30  # I'm hungry!

In [ ]:
favorite_topping = 'olives'  # יש פה מלכודת. נסו להבין מה קורה פה.

In [ ]:
favorite_topping == 'pineapple'  # מה זה יחזיר אחרי הרצת השורה הקודמת? מה זה יחזיר אילו לא הייתה רצה?

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

בולילנד

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

השורה print(1 == 1) תדפיס למשתמש True.


In [ ]: