ข้ามไปยังเนื้อหาหลัก
Editor

บูลีน การเปรียบเทียบ และตัวดำเนินการตรรกะใน Python

เริ่มต้น25 นาที6 แบบฝึกหัด90 XP

บทเรียนนี้แปลจากต้นฉบับภาษาอังกฤษRead in EnglishLeer en españolЧитать на русскомLer em portuguêsแจ้งข้อผิดพลาดในการแปล

0/6 แบบฝึกหัด

ทุกวันคุณตัดสินใจเรื่องแบบใช่หรือไม่ใช่ "ฝนตกไหม" "เงินพอไหม" "รหัสผ่านถูกไหม" คอมพิวเตอร์ก็ตัดสินใจแบบเดียวกัน และใช้บูลีน (boolean) ในการตัดสินใจ

บูลีนคือค่าที่เป็นได้แค่ True หรือ False มีแค่สองตัวเลือกเท่านั้น ลองนึกถึงสวิตช์ไฟ: เปิดหรือปิด ใช่หรือไม่ใช่ จริงหรือเท็จ

ในบทเรียนนี้ คุณจะได้เรียนรู้ว่า Python เปรียบเทียบค่าอย่างไร รวมเงื่อนไขอย่างไร และตัดสินอย่างไรว่าอะไรนับเป็น "จริง" หรือ "เท็จ" ทักษะเหล่านี้เป็นพื้นฐานของคำสั่ง if และลูปทุกตัวที่คุณจะเขียนต่อจากนี้

บูลีนใน Python คืออะไร

Python มีชนิดข้อมูลในตัวชื่อ bool ซึ่งมีค่าที่เป็นไปได้แค่สองค่า คือ True และ False สังเกตว่าขึ้นต้นด้วยตัวพิมพ์ใหญ่ T และ F ซึ่งเป็นเรื่องสำคัญ

การสร้างตัวแปรบูลีน
is_raining = True
has_umbrella = False
print(is_raining) # True
print(has_umbrella) # False
print(type(is_raining)) # <class 'bool'>
ผลลัพธ์
True
False
<class 'bool'>

ตัวแปรบูลีนมักขึ้นต้นด้วย is_, has_ หรือ can_ (แปลว่า "เป็น" "มี" และ "ทำได้") เพื่อให้โค้ดอ่านได้เหมือนประโยคภาษาอังกฤษธรรมดา เช่น is_logged_in หรือ has_permission บอกได้ชัดเจนว่าตัวแปรหมายถึงอะไร


วิธีเปรียบเทียบค่าใน Python

ค่าบูลีนส่วนใหญ่ไม่ได้มาจากการพิมพ์ True หรือ False ลงไปตรง ๆ แต่มาจากการเปรียบเทียบ เมื่อคุณเปรียบเทียบสองค่า Python จะให้ค่าบูลีนกลับมา

ให้คิดว่าตัวดำเนินการเปรียบเทียบเป็นเหมือนกรรมการในรายการประกวด คุณส่งของสองอย่างให้ แล้วกรรมการจะตอบว่า "True" หรือ "False"

ตัวดำเนินการเปรียบเทียบทั้ง 6 ตัว
# Equal to
print(5 == 5) # True
print(5 == 3) # False
# Not equal to
print(5 != 3) # True
print(5 != 5) # False
# Greater than / Less than
print(10 > 5) # True
print(3 < 1) # False
# Greater or equal / Less or equal
print(5 >= 5) # True
print(3 <= 7) # True
ผลลัพธ์
True
False
True
False
True
False
True
True

คุณเก็บผลการเปรียบเทียบไว้ในตัวแปรได้ ซึ่งมีประโยชน์เมื่อต้องการตรวจเงื่อนไขครั้งเดียวแล้วใช้ผลลัพธ์หลายครั้ง

การเก็บผลการเปรียบเทียบ
age = 20
min_age = 18
is_adult = age >= min_age
print(is_adult) # True
temperature = 35
is_hot = temperature > 30
print(is_hot) # True
ผลลัพธ์
True
True

วิธีเปรียบเทียบสตริงใน Python

คุณเปรียบเทียบสตริงได้ด้วย Python จะตรวจทีละตัวอักษรตามลำดับตัวอักษร (ในทางเทคนิคคือลำดับ Unicode) ตัวพิมพ์ใหญ่จะมาก่อนตัวพิมพ์เล็ก

การเปรียบเทียบสตริง
# Equality checks
print("hello" == "hello") # True
print("hello" == "Hello") # False (case matters!)
# Alphabetical ordering
print("apple" < "banana") # True (a comes before b)
print("cat" > "car") # True (t comes after r)
# Case-insensitive comparison
name = "Alice"
print(name.lower() == "alice") # True
ผลลัพธ์
True
False
True
True
True

วิธีใช้ตัวดำเนินการตรรกะ: and, or, not

บางครั้งการเปรียบเทียบครั้งเดียวไม่พอ คุณอาจต้องตรวจว่าคนคนหนึ่งอายุถึงเกณฑ์และมีตั๋ว หรือวันนี้เป็นวันเสาร์หรือวันอาทิตย์ Python มีตัวดำเนินการตรรกะ (logical operator) 3 ตัวสำหรับรวมเงื่อนไข

ตัวดำเนินการ "and"

ตัวดำเนินการ and คืนค่า True ก็ต่อเมื่อทั้งสองฝั่งเป็นจริง ลองนึกถึงประตูที่มีแม่กุญแจสองตัว คุณต้องมีลูกกุญแจครบทั้งสองดอกจึงจะเปิดได้

การใช้ "and"
age = 20
has_ticket = True
# Both must be True
print(age >= 18 and has_ticket) # True
print(age >= 18 and not has_ticket) # False (one is False)
# Real-world example: login check
username_ok = True
password_ok = True
print(username_ok and password_ok) # True - access granted!
ผลลัพธ์
True
False
True

ตัวดำเนินการ "or"

ตัวดำเนินการ or คืนค่า True เมื่ออย่างน้อยหนึ่งฝั่งเป็นจริง ลองนึกถึงประตูที่มีกริ่งสองตัว กดตัวไหนก็มีคนมาเปิดประตูให้

การใช้ "or"
is_weekend = True
is_holiday = False
# At least one must be True
print(is_weekend or is_holiday) # True
print(False or False) # False (neither is True)
# Real-world example: discount eligibility
is_student = False
is_senior = True
gets_discount = is_student or is_senior
print(gets_discount) # True
ผลลัพธ์
True
False
True

ตัวดำเนินการ "not"

ตัวดำเนินการ not กลับค่าบูลีนเป็นค่าตรงข้าม True กลายเป็น False และ False กลายเป็น True เหมือนการกดสวิตช์ไฟ

การใช้ "not"
is_raining = True
print(not is_raining) # False
print(not False) # True
# Useful for "if not" conditions
is_logged_in = False
print(not is_logged_in) # True - means "user is NOT logged in"
ผลลัพธ์
False
True
True

การประเมินค่าแบบลัดวงจร (short-circuit) ใน Python คืออะไร

Python ขี้เกียจอย่างฉลาด เมื่อประเมินค่า and หรือ or มันจะหยุดทันทีที่รู้คำตอบ เรียกว่าการประเมินค่าแบบลัดวงจร (short-circuit evaluation)

กับ and ถ้าค่าแรกเป็น False Python จะไม่ตรวจค่าที่สองเลย เพราะผลลัพธ์เป็น False แน่นอนแล้ว กับ or ถ้าค่าแรกเป็น True ก็จะข้ามค่าที่สอง เพราะผลลัพธ์เป็น True แน่นอนแล้ว

การประเมินค่าแบบลัดวงจรในการใช้งานจริง
# "and" short-circuits on False
print(False and print("This won't run")) # False
# "or" short-circuits on True
print(True or print("This won't run")) # True
# Practical use: safe division
x = 0
# Without short-circuit, this would crash!
result = x != 0 and 10 / x > 2
print(result) # False (never tries 10 / 0)
ผลลัพธ์
False
True
False

ค่า truthy และ falsy ใน Python คืออะไร

ข้อเท็จจริงที่อาจทำให้แปลกใจคือ ใน Python ทุกค่ามี "ความเป็นจริง" (truthiness) ไม่ได้มีแค่ True กับ False ที่นับ แต่ทุกค่าถูกตีความว่าเป็นจริงหรือเท็จได้

ลองคิดแบบนี้: กระเป๋าสตางค์ของคุณว่างเปล่า หรือมีอะไรอยู่ข้างใน สิ่งที่ว่างเปล่าถือเป็น "falsy" (ถือว่าเป็นเท็จ) ส่วนสิ่งที่มีของอยู่ถือเป็น "truthy" (ถือว่าเป็นจริง)

ค่า falsy กับค่า truthy
# Falsy values - these all count as False
print(bool(0)) # False (zero)
print(bool(0.0)) # False (zero float)
print(bool("")) # False (empty string)
print(bool([])) # False (empty list)
print(bool({})) # False (empty dict)
print(bool(None)) # False (None)
# Truthy values - these all count as True
print(bool(1)) # True (any non-zero number)
print(bool(-5)) # True (negative numbers too!)
print(bool("hello")) # True (non-empty string)
print(bool([1, 2])) # True (non-empty list)
ผลลัพธ์
False
False
False
False
False
False
True
True
True
True

วิธีใช้ฟังก์ชัน bool()

ฟังก์ชัน bool() แปลงค่าใดก็ได้เป็นค่าบูลีนที่สอดคล้องกัน และบอกให้รู้ว่า Python มองค่านั้นเป็น truthy หรือ falsy

ใช้ bool() ตรวจค่า
# Converting various values to booleans
print(bool(42)) # True
print(bool(0)) # False
print(bool("Python")) # True
print(bool("")) # False
print(bool(None)) # False
# Useful for checking if something "exists"
user_input = ""
if bool(user_input):
print("Got input!")
else:
print("No input provided") # This runs
ผลลัพธ์
True
False
True
False
False
No input provided

ในทางปฏิบัติ คุณแทบไม่ต้องเรียก bool() เอง Python ตรวจความเป็นจริงของค่าในคำสั่ง if ให้อัตโนมัติ การเขียน if name: ให้ผลเหมือน if bool(name): แต่สั้นกว่า

เยิ่นเย้อ (ไม่จำเป็น)
name = "Alice"
if bool(name) == True:
    print("Name is set")
แบบ Pythonic (กระชับ)
name = "Alice"
if name:
    print("Name is set")

วิธีใช้การเปรียบเทียบแบบต่อกันใน Python

Python มีความสามารถที่น่าสนใจซึ่งภาษาส่วนใหญ่ไม่มี คือคุณเขียนการเปรียบเทียบต่อกันได้ (chained comparison) เหมือนในคณิตศาสตร์ แทนที่จะเขียน x > 1 and x < 10 คุณเขียน 1 < x < 10 ได้เลย

การเปรียบเทียบแบบต่อกัน
age = 25
# Chained comparison (Pythonic)
print(18 <= age <= 65) # True - working age
# Same thing without chaining (longer)
print(age >= 18 and age <= 65) # True
# You can chain more than two
x = 5
print(1 < x < 10 < 100) # True - all comparisons pass
ผลลัพธ์
True
True
True

การเปรียบเทียบแบบต่อกันอ่านได้เหมือนสัญลักษณ์ทางคณิตศาสตร์ สั้นกว่าและเข้าใจได้ในแวบเดียว ใช้เมื่อไรก็ตามที่ต้องตรวจว่าค่าหนึ่งอยู่ในช่วงที่กำหนดหรือไม่


ข้อผิดพลาดเรื่องบูลีนที่พบบ่อยใน Python

ข้อผิดพลาดที่ 1: ใช้ = แทน ==

นี่คือข้อผิดพลาดเรื่องบูลีนที่มือใหม่ทำบ่อยที่สุด เครื่องหมาย = ตัวเดียวใช้กำหนดค่า (ให้ค่ากับตัวแปร) ส่วน == สองตัวใช้เปรียบเทียบ (ตรวจว่าสองค่าเท่ากันหรือไม่)

บั๊ก: กำหนดค่าแทนการเปรียบเทียบ
score = 100
# A single = tries to assign 50 to score, which is not allowed in an if
# if score = 50:  # SyntaxError!
#     print("You got 50")
วิธีแก้: ใช้ == เพื่อเปรียบเทียบ
score = 100
if score == 50:
    print("You got 50")
else:
    print("Not 50")

ข้อผิดพลาดที่ 2: เปรียบเทียบข้อมูลต่างชนิดกัน

การเปรียบเทียบสตริงกับตัวเลขอาจให้ผลที่คาดไม่ถึง สตริง "5" ไม่เท่ากับตัวเลข 5 เพราะเป็นข้อมูลคนละชนิดกัน

การเปรียบเทียบข้อมูลต่างชนิดกัน
# String vs number - not equal!
print("5" == 5) # False
print("5" != 5) # True
# Convert first, then compare
user_input = "5"
print(int(user_input) == 5) # True
# Be careful with True/False and numbers
print(True == 1) # True (!) - True is actually 1
print(False == 0) # True (!) - False is actually 0
ผลลัพธ์
False
True
True
True
True

แบบฝึกหัด

ตรวจว่าตัวเลขอยู่ในช่วงหรือไม่
เขียนโค้ด

สร้างตัวแปร num ให้มีค่าเป็น 42 ใช้การเปรียบเทียบแบบต่อกันตรวจว่า num อยู่ระหว่าง 1 ถึง 100 (รวม 1 และ 100) หรือไม่ แล้วแสดงผลลัพธ์

ผลลัพธ์ที่คาดหวัง:

True
# Create num and check if it's between 1 and 100 (inclusive)
ตรวจความยาวของสตริง
เขียนโค้ด

สร้างตัวแปร word ให้มีค่าเป็น "Python" ตรวจว่าสตริงไม่ว่าง และยาวกว่า 3 ตัวอักษร แล้วแสดงผลลัพธ์

ผลลัพธ์ที่คาดหวัง:

True
# Create word and check if it's non-empty AND longer than 3 characters
ทายผลลัพธ์ของตัวดำเนินการตรรกะ
ทายผลลัพธ์

ทายว่าแต่ละบรรทัดจะแสดงอะไรโดยไม่ต้องรันโค้ด จากนั้นรันเพื่อตรวจคำตอบ

โค้ดนี้แสดงผลลัพธ์ของการดำเนินการทางตรรกะ 3 แบบ

print(True and False)
print(True or False)
print(not True)
แก้บั๊กการเปรียบเทียบ
แก้บั๊ก

โค้ดด้านล่างควรตรวจว่า status เท่ากับ "active" หรือไม่ แล้วแสดงผล แต่มีบั๊กอยู่ ให้หาบั๊กแล้วแก้ไข

ผลลัพธ์ที่คาดหวัง:

True
status = "active"
result = status = "active"
print(result)
ตรวจปีอธิกสุรทิน
เขียนโค้ด

สร้างตัวแปร year ให้มีค่าเป็น 2024 ปีหนึ่งจะเป็นปีอธิกสุรทิน (leap year) ถ้า

  • หารด้วย 4 ลงตัว
  • แต่หารด้วย 100 ไม่ลงตัว
  • ยกเว้นกรณีที่หารด้วย 400 ลงตัวด้วย
  • ใช้ตัวดำเนินการหารเอาเศษ % และตัวดำเนินการตรรกะในการตรวจ แล้วแสดงผลลัพธ์

    ผลลัพธ์ที่คาดหวัง:

    True
    # Check if 2024 is a leap year
    ตรวจความเป็นจริงของค่าด้วย bool()
    เขียนโค้ด

    ใช้ฟังก์ชัน bool() แสดงความเป็นจริง (truthiness) ของค่าต่อไปนี้ ค่าละบรรทัด เรียงตามลำดับนี้พอดี

    1. 0

    2. "hello"

    3. ""

    4. 42

    5. None

    ผลลัพธ์ที่คาดหวัง:

    False
    True
    False
    True
    False
    # Print the truthiness of each value using bool()

    บทเรียนที่เกี่ยวข้อง

    บทเรียนนี้มีประโยชน์หรือไม่