Chapter 19: Logical Operators
Part 1: What Are Logical Operators?
Logical operators are used to combine or invert boolean values (True or False). They take one or more boolean expressions as input and produce a single boolean value as output. They are the foundation of all complex decision-making in code, powering everything from simple if statements to the most intricate program logic.
There are three primary logical operators, and they are universal across almost every programming language, though their symbols may vary slightly.
Part 2: Meet the Family: The Three Logical Operators
Let’s introduce each operator. We’ll use Python syntax, which uses the English words and, or, and not. Many other languages (like C, Java, JavaScript) use symbols: && for AND, || for OR, and ! for NOT.
| Operator | Name | Description | Example | Result |
|---|---|---|---|---|
and |
Logical AND | True only if both operands are True. |
(5 > 3) and (10 < 20) |
True |
or |
Logical OR | True if at least one operand is True. |
(5 > 3) or (10 > 20) |
True |
not |
Logical NOT | Inverts the boolean value: True becomes False and vice versa. |
not (5 > 3) |
False |
Now, let’s explore each one in detail.
Part 3: The AND Operator (and)
The and operator is the strict one. It’s only satisfied when every single condition is True. If even one condition is False, the entire expression becomes False.
Think of it like a series of guards at a gate. You can only pass if all guards say “Yes, you may pass.” If any one guard says “No,” you’re stopped.
Truth Table for and:
| Condition A | Condition B | A and B |
|---|---|---|
True |
True |
True |
True |
False |
False |
False |
True |
False |
False |
False |
False |
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<span class="token comment"># Example 1: Both conditions are True</span> age <span class="token operator">=</span> <span class="token number">25</span> has_license <span class="token operator">=</span> <span class="token boolean">True</span> can_drive <span class="token operator">=</span> <span class="token punctuation">(</span>age <span class="token operator">>=</span> <span class="token number">18</span><span class="token punctuation">)</span> <span class="token keyword">and</span> has_license <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Can drive? </span><span class="token interpolation"><span class="token punctuation">{</span>can_drive<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: True (both are True)</span> <span class="token comment"># Example 2: One condition is False</span> age <span class="token operator">=</span> <span class="token number">16</span> has_license <span class="token operator">=</span> <span class="token boolean">True</span> can_drive <span class="token operator">=</span> <span class="token punctuation">(</span>age <span class="token operator">>=</span> <span class="token number">18</span><span class="token punctuation">)</span> <span class="token keyword">and</span> has_license <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Can drive? </span><span class="token interpolation"><span class="token punctuation">{</span>can_drive<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: False (age condition is False)</span> <span class="token comment"># Example 3: Both conditions are False</span> age <span class="token operator">=</span> <span class="token number">16</span> has_license <span class="token operator">=</span> <span class="token boolean">False</span> can_drive <span class="token operator">=</span> <span class="token punctuation">(</span>age <span class="token operator">>=</span> <span class="token number">18</span><span class="token punctuation">)</span> <span class="token keyword">and</span> has_license <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Can drive? </span><span class="token interpolation"><span class="token punctuation">{</span>can_drive<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: False (both are False)</span> <span class="token comment"># Example 4: More than two conditions</span> is_sunny <span class="token operator">=</span> <span class="token boolean">True</span> is_warm <span class="token operator">=</span> <span class="token boolean">True</span> is_weekend <span class="token operator">=</span> <span class="token boolean">True</span> perfect_day <span class="token operator">=</span> is_sunny <span class="token keyword">and</span> is_warm <span class="token keyword">and</span> is_weekend <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Perfect day? </span><span class="token interpolation"><span class="token punctuation">{</span>perfect_day<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: True (all three are True)</span> |
Part 4: The OR Operator (or)
The or operator is the generous one. It’s satisfied if at least one of the conditions is True. It only returns False if all conditions are False.
Think of it like a building with multiple entrances. You can get in if you can use Door A or Door B or Door C. You’re only locked out if every single door is closed.
Truth Table for or:
| Condition A | Condition B | A or B |
|---|---|---|
True |
True |
True |
True |
False |
True |
False |
True |
True |
False |
False |
False |
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<span class="token comment"># Example 1: Both conditions are True</span> has_cash <span class="token operator">=</span> <span class="token boolean">True</span> has_credit_card <span class="token operator">=</span> <span class="token boolean">True</span> can_pay <span class="token operator">=</span> has_cash <span class="token keyword">or</span> has_credit_card <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Can pay? </span><span class="token interpolation"><span class="token punctuation">{</span>can_pay<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: True (both are True)</span> <span class="token comment"># Example 2: One condition is True</span> has_cash <span class="token operator">=</span> <span class="token boolean">False</span> has_credit_card <span class="token operator">=</span> <span class="token boolean">True</span> can_pay <span class="token operator">=</span> has_cash <span class="token keyword">or</span> has_credit_card <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Can pay? </span><span class="token interpolation"><span class="token punctuation">{</span>can_pay<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: True (one is True)</span> <span class="token comment"># Example 3: Both conditions are False</span> has_cash <span class="token operator">=</span> <span class="token boolean">False</span> has_credit_card <span class="token operator">=</span> <span class="token boolean">False</span> can_pay <span class="token operator">=</span> has_cash <span class="token keyword">or</span> has_credit_card <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Can pay? </span><span class="token interpolation"><span class="token punctuation">{</span>can_pay<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: False (both are False)</span> <span class="token comment"># Example 4: More than two conditions</span> has_cash <span class="token operator">=</span> <span class="token boolean">False</span> has_credit_card <span class="token operator">=</span> <span class="token boolean">False</span> has_gift_card <span class="token operator">=</span> <span class="token boolean">True</span> can_pay <span class="token operator">=</span> has_cash <span class="token keyword">or</span> has_credit_card <span class="token keyword">or</span> has_gift_card <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Can pay? </span><span class="token interpolation"><span class="token punctuation">{</span>can_pay<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: True (gift card is True)</span> |
Part 5: The NOT Operator (not)
The not operator is the simplest but also incredibly powerful. It’s a unary operator, meaning it works on a single value. It simply inverts the boolean: True becomes False, and False becomes True.
Think of it as the opposite or the negation.
Truth Table for not:
| Condition | not Condition |
|---|---|
True |
False |
False |
True |
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<span class="token comment"># Example 1: Inverting True</span> is_raining <span class="token operator">=</span> <span class="token boolean">True</span> is_not_raining <span class="token operator">=</span> <span class="token keyword">not</span> is_raining <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Is it raining? </span><span class="token interpolation"><span class="token punctuation">{</span>is_raining<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: True</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Is it NOT raining? </span><span class="token interpolation"><span class="token punctuation">{</span>is_not_raining<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: False</span> <span class="token comment"># Example 2: Inverting False</span> is_finished <span class="token operator">=</span> <span class="token boolean">False</span> is_not_finished <span class="token operator">=</span> <span class="token keyword">not</span> is_finished <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Is it finished? </span><span class="token interpolation"><span class="token punctuation">{</span>is_finished<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: False</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Is it NOT finished? </span><span class="token interpolation"><span class="token punctuation">{</span>is_not_finished<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: True</span> <span class="token comment"># Example 3: Using 'not' with comparisons</span> score <span class="token operator">=</span> <span class="token number">45</span> passing_score <span class="token operator">=</span> <span class="token number">50</span> <span class="token comment"># This is clearer: "If the student did NOT pass"</span> <span class="token keyword">if</span> <span class="token keyword">not</span> <span class="token punctuation">(</span>score <span class="token operator">>=</span> passing_score<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"The student failed."</span><span class="token punctuation">)</span> <span class="token comment"># This will print</span> <span class="token comment"># Compare to the alternative without 'not'</span> <span class="token keyword">if</span> score <span class="token operator"><</span> passing_score<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"The student failed."</span><span class="token punctuation">)</span> <span class="token comment"># This also works, but the first version can be more readable in complex scenarios</span> |
Part 6: Combining Logical Operators (Building Complex Conditions)
The real power comes when you start combining these operators to create sophisticated rules. Just like in mathematics, logical operators have a precedence order:
-
nothas the highest precedence (it’s evaluated first). -
andis evaluated next. -
orhas the lowest precedence.
However, just like with arithmetic, you should use parentheses () to make your intentions clear and to override the default precedence if needed.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<span class="token comment"># Example: Checking for a valid user</span> age <span class="token operator">=</span> <span class="token number">25</span> has_ticket <span class="token operator">=</span> <span class="token boolean">True</span> is_vip <span class="token operator">=</span> <span class="token boolean">False</span> is_with_parent <span class="token operator">=</span> <span class="token boolean">True</span> <span class="token comment"># Complex rule: You can enter if:</span> <span class="token comment"># (You are at least 18 AND have a ticket) OR (You are a VIP) OR (You are with a parent)</span> can_enter <span class="token operator">=</span> <span class="token punctuation">(</span>age <span class="token operator">>=</span> <span class="token number">18</span> <span class="token keyword">and</span> has_ticket<span class="token punctuation">)</span> <span class="token keyword">or</span> is_vip <span class="token keyword">or</span> is_with_parent <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Can enter? </span><span class="token interpolation"><span class="token punctuation">{</span>can_enter<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: True (satisfied by the first part)</span> <span class="token comment"># Without parentheses, the order would be different due to precedence</span> <span class="token comment"># 'and' has higher precedence than 'or', so this is equivalent to:</span> <span class="token comment"># (age >= 18) and (has_ticket or is_vip or is_with_parent)</span> <span class="token comment"># which is a completely different (and probably wrong) rule!</span> wrong_rule <span class="token operator">=</span> age <span class="token operator">>=</span> <span class="token number">18</span> <span class="token keyword">and</span> has_ticket <span class="token keyword">or</span> is_vip <span class="token keyword">or</span> is_with_parent <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Wrong rule result: </span><span class="token interpolation"><span class="token punctuation">{</span>wrong_rule<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token comment"># Output: True (but for a different reason)</span> |
De Morgan’s Laws (A Handy Trick)
These are two rules from logic that can help you simplify complex negations:
-
not (A and B)is the same as(not A) or (not B) -
not (A or B)is the same as(not A) and (not B)
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<span class="token comment"># Example: Checking if a number is NOT between 1 and 10</span> num <span class="token operator">=</span> <span class="token number">15</span> <span class="token comment"># Using 'not'</span> <span class="token keyword">if</span> <span class="token keyword">not</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator"><=</span> num <span class="token operator"><=</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>num<span class="token punctuation">}</span></span><span class="token string"> is outside the range 1-10"</span></span><span class="token punctuation">)</span> <span class="token comment"># Using De Morgan's Law: (num < 1) or (num > 10)</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>num <span class="token operator"><</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword">or</span> <span class="token punctuation">(</span>num <span class="token operator">></span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>num<span class="token punctuation">}</span></span><span class="token string"> is outside the range 1-10"</span></span><span class="token punctuation">)</span> |
Part 7: Short-Circuit Evaluation
This is a very important and practical feature of logical operators in many languages, including Python. Short-circuit evaluation means that the interpreter stops evaluating an expression as soon as the result is determined.
-
For an
andexpression, if the first condition isFalse, the entire expression must beFalse, so Python doesn’t even bother evaluating the second condition. -
For an
orexpression, if the first condition isTrue, the entire expression must beTrue, so Python doesn’t evaluate the second condition.
This isn’t just a performance trick; it’s often used intentionally to prevent errors.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<span class="token comment"># Example 1: Avoiding a division by zero error</span> x <span class="token operator">=</span> <span class="token number">0</span> y <span class="token operator">=</span> <span class="token number">10</span> <span class="token comment"># This is safe because if x == 0 is True, the 'and' short-circuits,</span> <span class="token comment"># and the division (y / x) is never evaluated, avoiding a ZeroDivisionError.</span> <span class="token keyword">if</span> x <span class="token operator">!=</span> <span class="token number">0</span> <span class="token keyword">and</span> <span class="token punctuation">(</span>y <span class="token operator">/</span> x<span class="token punctuation">)</span> <span class="token operator">></span> <span class="token number">2</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Result is greater than 2"</span><span class="token punctuation">)</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Condition not met or x was zero."</span><span class="token punctuation">)</span> <span class="token comment"># This will print</span> <span class="token comment"># Without short-circuit, the right side would be evaluated and cause an error.</span> <span class="token comment"># The following line WOULD cause an error:</span> <span class="token comment"># if x != 0 & (y / x) > 2: # This is different, but you get the idea.</span> <span class="token comment"># Example 2: Checking if an item exists in a list before accessing it</span> my_list <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span> index <span class="token operator">=</span> <span class="token number">5</span> <span class="token comment"># This is safe. If 'index' is out of range, the first condition becomes False,</span> <span class="token comment"># and the second condition (which would cause an error) is never evaluated.</span> <span class="token keyword">if</span> index <span class="token operator"><</span> <span class="token builtin">len</span><span class="token punctuation">(</span>my_list<span class="token punctuation">)</span> <span class="token keyword">and</span> my_list<span class="token punctuation">[</span>index<span class="token punctuation">]</span> <span class="token operator">==</span> <span class="token number">3</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Found 3 at the given index."</span><span class="token punctuation">)</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Index is out of range or value is not 3."</span><span class="token punctuation">)</span> |
Part 8: Practical, Real-World Examples
Example 1: ATM Withdrawal System
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<span class="token comment"># ATM withdrawal logic</span> account_balance <span class="token operator">=</span> <span class="token number">1500</span> daily_withdrawal_limit <span class="token operator">=</span> <span class="token number">500</span> requested_amount <span class="token operator">=</span> <span class="token number">300</span> is_account_active <span class="token operator">=</span> <span class="token boolean">True</span> <span class="token comment"># Check if withdrawal is allowed</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>requested_amount <span class="token operator"><=</span> account_balance<span class="token punctuation">)</span> <span class="token keyword">and</span> <span class="token punctuation">(</span>requested_amount <span class="token operator"><=</span> daily_withdrawal_limit<span class="token punctuation">)</span> <span class="token keyword">and</span> is_account_active<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Withdrawal approved. Please take your cash."</span><span class="token punctuation">)</span> account_balance <span class="token operator">-=</span> requested_amount <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"New balance: $</span><span class="token interpolation"><span class="token punctuation">{</span>account_balance<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Withdrawal denied."</span><span class="token punctuation">)</span> <span class="token keyword">if</span> <span class="token keyword">not</span> is_account_active<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Reason: Account is inactive."</span><span class="token punctuation">)</span> <span class="token keyword">elif</span> requested_amount <span class="token operator">></span> account_balance<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Reason: Insufficient funds."</span><span class="token punctuation">)</span> <span class="token keyword">elif</span> requested_amount <span class="token operator">></span> daily_withdrawal_limit<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Reason: Exceeds daily limit."</span><span class="token punctuation">)</span> |
Example 2: Login System with Multiple Checks
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span class="token comment"># User database simulation</span> users <span class="token operator">=</span> <span class="token punctuation">{</span> <span class="token string">"alice"</span><span class="token punctuation">:</span> <span class="token string">"password123"</span><span class="token punctuation">,</span> <span class="token string">"bob"</span><span class="token punctuation">:</span> <span class="token string">"secret456"</span> <span class="token punctuation">}</span> username <span class="token operator">=</span> <span class="token builtin">input</span><span class="token punctuation">(</span><span class="token string">"Enter username: "</span><span class="token punctuation">)</span> password <span class="token operator">=</span> <span class="token builtin">input</span><span class="token punctuation">(</span><span class="token string">"Enter password: "</span><span class="token punctuation">)</span> <span class="token comment"># Complex login logic</span> <span class="token keyword">if</span> username <span class="token keyword">in</span> users <span class="token keyword">and</span> users<span class="token punctuation">[</span>username<span class="token punctuation">]</span> <span class="token operator">==</span> password<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Login successful! Welcome,"</span><span class="token punctuation">,</span> username<span class="token punctuation">)</span> <span class="token keyword">elif</span> username <span class="token keyword">not</span> <span class="token keyword">in</span> users<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Login failed: Username not found."</span><span class="token punctuation">)</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token comment"># Username exists but password is wrong</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Login failed: Incorrect password."</span><span class="token punctuation">)</span> |
Example 3: Scholarship Eligibility
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<span class="token comment"># Scholarship criteria</span> gpa <span class="token operator">=</span> <span class="token number">3.7</span> family_income <span class="token operator">=</span> <span class="token number">45000</span> extracurricular_hours <span class="token operator">=</span> <span class="token number">15</span> has_recommendation <span class="token operator">=</span> <span class="token boolean">True</span> <span class="token comment"># Rule: Eligible if (High GPA AND low income) OR (Excellent extracurriculars AND recommendation)</span> high_gpa <span class="token operator">=</span> gpa <span class="token operator">>=</span> <span class="token number">3.5</span> low_income <span class="token operator">=</span> family_income <span class="token operator"><</span> <span class="token number">50000</span> excellent_extracurriculars <span class="token operator">=</span> extracurricular_hours <span class="token operator">>=</span> <span class="token number">20</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>high_gpa <span class="token keyword">and</span> low_income<span class="token punctuation">)</span> <span class="token keyword">or</span> <span class="token punctuation">(</span>excellent_extracurriculars <span class="token keyword">and</span> has_recommendation<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Congratulations! You are eligible for the scholarship."</span><span class="token punctuation">)</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Sorry, you do not meet the eligibility criteria."</span><span class="token punctuation">)</span> |
Example 4: Temperature Alert System with AND/OR
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<span class="token comment"># Get current conditions</span> temperature <span class="token operator">=</span> <span class="token number">32</span> humidity <span class="token operator">=</span> <span class="token number">85</span> wind_speed <span class="token operator">=</span> <span class="token number">10</span> <span class="token comment"># Alert conditions</span> heatwave <span class="token operator">=</span> temperature <span class="token operator">></span> <span class="token number">35</span> <span class="token keyword">and</span> humidity <span class="token operator">></span> <span class="token number">70</span> storm_risk <span class="token operator">=</span> wind_speed <span class="token operator">></span> <span class="token number">50</span> <span class="token keyword">or</span> <span class="token punctuation">(</span>temperature <span class="token operator"><</span> <span class="token number">5</span> <span class="token keyword">and</span> wind_speed <span class="token operator">></span> <span class="token number">20</span><span class="token punctuation">)</span> freezing <span class="token operator">=</span> temperature <span class="token operator"><=</span> <span class="token number">0</span> <span class="token keyword">and</span> <span class="token keyword">not</span> <span class="token punctuation">(</span>wind_speed <span class="token operator">></span> <span class="token number">30</span><span class="token punctuation">)</span> <span class="token comment"># Freezing but not too windy</span> <span class="token keyword">if</span> heatwave<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"🔥 Heatwave alert! Stay hydrated and avoid direct sun."</span><span class="token punctuation">)</span> <span class="token keyword">elif</span> storm_risk<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"⛈️ Storm risk! Be cautious outdoors."</span><span class="token punctuation">)</span> <span class="token keyword">elif</span> freezing<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"❄️ Freezing conditions! Watch for ice."</span><span class="token punctuation">)</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"☀️ Weather conditions are normal."</span><span class="token punctuation">)</span> |
Example 5: Game Character Status
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<span class="token comment"># Game character stats</span> health <span class="token operator">=</span> <span class="token number">20</span> has_shield <span class="token operator">=</span> <span class="token boolean">True</span> is_invulnerable <span class="token operator">=</span> <span class="token boolean">False</span> has_power_up <span class="token operator">=</span> <span class="token boolean">True</span> <span class="token comment"># Check if character can be damaged</span> can_be_damaged <span class="token operator">=</span> <span class="token keyword">not</span> is_invulnerable <span class="token keyword">and</span> <span class="token keyword">not</span> <span class="token punctuation">(</span>has_shield <span class="token keyword">and</span> has_power_up<span class="token punctuation">)</span> <span class="token keyword">if</span> can_be_damaged<span class="token punctuation">:</span> damage <span class="token operator">=</span> <span class="token number">10</span> health <span class="token operator">-=</span> damage <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"Character took </span><span class="token interpolation"><span class="token punctuation">{</span>damage<span class="token punctuation">}</span></span><span class="token string"> damage! Health is now </span><span class="token interpolation"><span class="token punctuation">{</span>health<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Character is protected! No damage taken."</span><span class="token punctuation">)</span> |
Summary: The Logical Operator Philosophy
-
Logical operators (
and,or,not) are used to combine or invert boolean expressions, enabling complex decision-making. -
andreturnsTrueonly if all conditions areTrue. -
orreturnsTrueif at least one condition isTrue. -
notsimply inverts a boolean value (True↔False). -
Use parentheses
()to control the order of evaluation and make your code clear. The default precedence isnot>and>or. -
Short-circuit evaluation is a key feature: the interpreter stops evaluating an expression as soon as the result is determined. This can be used to write safer, more efficient code.
-
Logical operators are the essential tools for building the “brains” of your program, allowing it to react intelligently to a wide range of conditions.
Mastering logical operators is like learning to construct complex sentences instead of just simple phrases. They transform your programs from a series of simple, linear instructions into dynamic, responsive systems capable of handling the nuances and complexities of the real world.
