אופרטורים לוגיים חלק 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_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: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)השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
4אופרטורים חלק 2
אופרטורים לוגיים חלק 1אופרטורים לוגיים חלק 2סיכום – לוגיקה פשוטהאופרטורים לוגיים חלק 3אופרטורים לוגיים חלק 4תרגלו בעצמכם: קומפיילר Python אונליין