אופרטורים לוגיים חלק 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 (אותה תוצאה, לוגיקה שונה)מתי להשתמש בחוקי דה מורגן:
- כדי להקל על קריאת תנאים שליליים
- כדי לפשט ביטויים לוגיים מורכבים
- כדי להמיר בין ייצוגים שונים של אותה הלוגיקה
אתגר
מתחיליםאתם עוזרים לחנות לחיות מחמד ליצור מערכת שתקבע אם היא יכולה למכור חיית מחמד ללקוח.
המשתנים האלה כבר מוגדרים בשבילכם:
has_licenseעם הערךTruehas_spaceעם הערךTruehas_experienceעם הערךFalse
כתבו ביטויים לוגיים כדי לקבוע אם:
can_sell_regular_pet: הלקוח יכול לקנות חיית מחמד רגילה אם יש לו רישיון או ניסיון, וחייב להיות לו מקוםcan_sell_exotic_pet: הלקוח יכול לקנות חיית מחמד אקזוטית אם יש לו גם רישיון וגם ניסיון, וחייב להיות לו מקוםcannot_sell_any_pet: החנות לא יכולה למכור שום חיית מחמד אם ללקוח אין רישיון ואין ניסיון, או שאין לו מקום
נסו בעצמכם
# חשבו את התנאים
# החליפו כל ערך מציין מקום למטה בביטוי הלוגי המתאים
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)
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
4אופרטורים חלק 2
אופרטורים לוגיים חלק 1אופרטורים לוגיים חלק 2סיכום – לוגיקה פשוטהאופרטורים לוגיים חלק 3אופרטורים לוגיים חלק 4תרגלו בעצמכם: קומפיילר Python אונליין