Menu
Coddy logo textTech

אופרטורים לוגיים חלק 4

חלק מהיחידה יסודות במסלול ה-Python של Coddy. שיעור 19 מתוך 77.

כשעובדים עם ביטויים לוגיים, לפעמים צריך לפשט או לסדר אותם מחדש. הדבר שימושי במיוחד כשמתמודדים עם תנאים מורכבים שמשלבים כמה אופרטורים מסוג and ו־or.

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

החוק הראשון: not (A and B) זהה ל־(not A) or (not B)

שימו לב לשני דברים שקורים כשמפזרים את not לתוך הביטוי: כל אחד מהאופרנדים נשלל (A הופך ל־not A, B הופך ל־not B), וגם האופרטור מתהפך: and הופך ל־or. not לא רק שולל את הערכים; הוא גם מחליף את האופרטור שמחבר ביניהם.

לדוגמה:

# נבדוק אם מספר אינו נמצא (בין 1 ל-10)
number = 15
# שני הביטויים האלה שקולים:
result1 = not (number >= 1 and number <= 10)
result2 = (not number >= 1) or (not number <= 10)
print(result1)  # True
print(result2)  # True

החוק השני: not (A or B) זהה ל־(not A) and (not B)

גם כאן חל הכלל הדו־שלבי: השלילה חלה על כל אחד מהאופרנדים, והאופרטור מתהפך. הפעם or הופך ל־and. חשבו על זה כך: הפצת not תמיד הופכת את and ↔ or תוך שלילת כל חלק.

לדוגמה:

# בודקים אם אדם אינו (סטודנט או מועסק)
is_student = False
is_employed = False
# שני הביטויים האלה שקולים:
result1 = not (is_student or is_employed)
result2 = (not is_student) and (not is_employed)
print(result1)  # True
print(result2)  # True

דוגמה מורכבת עם AND ו-OR: לפעמים צריך תנאים שמשלבים את שני האופרטורים. הנה דוגמה מעשית:

# בודקים אם אנחנו לא יכולים לקבל מועמדות לעבודה
# אנחנו דוחים אם: (אין ניסיון AND אין תואר) OR דרישת הגיל אינה מתקיימת
has_experience = False
has_degree = False
meets_age = True
# תנאי מורכב שמשתמש גם ב-AND וגם ב-OR
reject_application = (not has_experience and not has_degree) or not meets_age
print(reject_application)  # True (נדחה כי אין ניסיון AND אין תואר)
# אפשר לכתוב זאת גם באמצעות חוקי דה מורגן:
# accept = (experience OR degree) AND עומד בדרישת הגיל; reject = not accept
accept_application = (has_experience or has_degree) and meets_age
reject_application2 = not accept_application
print(reject_application2)  # True (אותה תוצאה, לוגיקה שונה)

מתי להשתמש בחוקי דה מורגן:

  • כדי להקל על קריאת תנאים שליליים
  • כדי לפשט ביטויים לוגיים מורכבים
  • כדי לעבור בין ייצוגים שונים של אותה לוגיקה
challenge icon

אתגר

מתחילים

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

אתחל את המשתנים הבאים:

  • has_license עם הערך True
  • has_space עם הערך True
  • has_experience עם הערך False

כתוב ביטויים לוגיים כדי לקבוע אם:

  • can_sell_regular_pet: הלקוח יכול לקנות חיית מחמד רגילה אם יש לו רישיון או ניסיון, והוא חייב גם שיהיה לו מקום
  • can_sell_exotic_pet: הלקוח יכול לקנות חיית מחמד אקזוטית אם יש לו גם רישיון וגם ניסיון, והוא חייב גם שיהיה לו מקום
  • cannot_sell_any_pet: החנות לא יכולה למכור שום חיית מחמד אם ללקוח אין רישיון ואין ניסיון, או שאין לו מקום

התוצאות הצפויות עם הערכים הנתונים:

  • can_sell_regular_pet: True (יש לו רישיון ומקום)
  • can_sell_exotic_pet: False (אין לו ניסיון)
  • cannot_sell_any_pet: False (יש לו גם רישיון וגם מקום)

נסו בעצמכם

# אתחלו את המשתנים

# חשבו את התנאים
# החליפו כל ערך מציין מקום להלן בביטוי הלוגי הנכון
can_sell_regular_pet = False
can_sell_exotic_pet = False
cannot_sell_any_pet = False

# אל תמחקו את השורות שלהלן
print("Can sell regular pet:", can_sell_regular_pet)
print("Can sell exotic pet:", can_sell_exotic_pet)
print("Cannot sell any pet:", cannot_sell_any_pet)
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה יסודות

תרגלו בעצמכם: קומפיילר Python אונליין