Notes & software courses · Free to learn
Aph's Blog
On this page

เงื่อนไข (Conditionals: if / elif / else)

👋 อ่านฟรีทั้งหมดบน Aph's Blog — เนื้อหาภาษาไทย ทำตามทีละหน้าใน sidebar ได้เลย หากมีข้อเสนอแนะหรืออยากให้เพิ่มหัวข้อไหน บอกได้เสมอ

ทำให้โปรแกรมตัดสินใจได้ — เลือกทำคำสั่งต่างกันตามสถานการณ์

เงื่อนไขทำให้โปรแกรม "ฉลาด" ขึ้น เพราะเลือกทำสิ่งที่ต่างกันได้ตามข้อมูลที่เจอ เช่นถ้าคะแนนถึงเกณฑ์ให้ผ่าน ไม่ถึงให้ตก หัวใจคือคำว่า if (ถ้า)

if พื้นฐาน

if ตามด้วยเงื่อนไขและ : จากนั้นบรรทัดที่ย่อหน้าเข้าไปคือคำสั่งที่จะทำเมื่อเงื่อนไขเป็นจริง

python
age = 20
if age >= 18:
    print("คุณบรรลุนิติภาวะแล้ว")
    print("สามารถทำบัตรประชาชนได้")  # ย่อหน้าเท่ากัน = อยู่ใน if เดียวกัน
print("จบโปรแกรม")  # ไม่ย่อหน้า = ทำเสมอ ไม่ขึ้นกับ if
การย่อหน้า (indentation) สำคัญที่สุดใน Python

Python ใช้การย่อหน้า (มาตรฐาน 4 ช่องว่าง) เพื่อบอกว่าคำสั่งไหนอยู่ในบล็อกไหน ต่างจากภาษาอื่นที่ใช้วงเล็บปีกกา {} ถ้าย่อหน้าผิดจะ error หรือทำงานผิด ห้ามผสม space กับ tab เด็ดขาด

if / else — มีทางเลือกสำรอง

python
score = 45
if score >= 50:
    print("ผ่าน")
else:               # ถ้าเงื่อนไข if เป็นเท็จ
    print("ไม่ผ่าน")
# ออก: ไม่ผ่าน

if / elif / else — หลายทางเลือก

elif (ย่อจาก else if) ใช้ตรวจเงื่อนไขถัดไปเมื่อเงื่อนไขก่อนหน้าเป็นเท็จ Python ตรวจจากบนลงล่าง เจออันแรกที่จริงก็ทำแล้วหยุด มีกี่ elif ก็ได้

python
score = 75
if score >= 80:
    grade = "A"
elif score >= 70:       # มาถึงนี่แปลว่า score < 80 แล้ว
    grade = "B"
elif score >= 60:
    grade = "C"
elif score >= 50:
    grade = "D"
else:
    grade = "F"
print(f"เกรด {grade}")   # เกรด B
ลำดับของเงื่อนไขสำคัญ

เพราะ Python หยุดที่เงื่อนไขแรกที่จริง ต้องเรียงจากเข้มงวดที่สุดไปหลวมที่สุด ถ้าสลับเอา score >= 50 ขึ้นก่อน คนได้ 90 ก็จะได้เกรด D เพราะเข้าเงื่อนไขแรกที่จริงทันที

เงื่อนไขซ้อนกัน (Nested if)

python
logged_in = True
is_admin = False

if logged_in:
    if is_admin:
        print("ยินดีต้อนรับผู้ดูแลระบบ")
    else:
        print("ยินดีต้อนรับผู้ใช้ทั่วไป")
else:
    print("กรุณาเข้าสู่ระบบ")
# ออก: ยินดีต้อนรับผู้ใช้ทั่วไป

เงื่อนไขซ้อนกันลึกมาก ๆ จะอ่านยาก มักเขียนใหม่ด้วย and ให้แบนราบกว่าได้ เช่น if logged_in and is_admin:

Truthy / Falsy — ค่าที่ถือว่าจริง/เท็จ

ใน if ค่าที่ไม่ใช่ bool ก็ใช้เป็นเงื่อนไขได้ Python มองบางค่าเป็น "เท็จ" (falsy) ได้แก่: 0, ค่าว่าง ("", [], {}), และ None ส่วนค่าอื่นเป็น "จริง" (truthy)

python
name = input("ชื่อ: ")
if name:                 # ข้อความว่าง = เท็จ, มีตัวอักษร = จริง
    print(f"สวัสดี {name}")
else:
    print("คุณไม่ได้ใส่ชื่อ")

items = []
if not items:            # ลิสต์ว่าง = เท็จ, not = จริง
    print("ตะกร้าว่าง")

เขียนสั้นด้วย ternary และ match

python
# ternary: เลือกค่าในบรรทัดเดียว
age = 20
status = "ผู้ใหญ่" if age >= 18 else "เด็ก"
print(status)   # ผู้ใหญ่

# match (Python 3.10+): เทียบหลายค่าแบบสะอาด
day = 3
match day:
    case 1: print("จันทร์")
    case 2: print("อังคาร")
    case 3: print("พุธ")
    case _: print("วันอื่น")   # _ = กรณีอื่น ๆ ทั้งหมด

เกร็ดเงื่อนไขที่ใช้จริงในงาน

python
score = 75

# เทียบช่วงแบบลูกโซ่ (chained) — เขียนเหมือนคณิตศาสตร์ได้เลย
if 0 <= score <= 100:          # = (0 <= score) and (score <= 100)
    print("คะแนนอยู่ในช่วงที่ถูกต้อง")

# เช็คว่าอยู่ในกลุ่มไหม ด้วย in (สั้นกว่าเขียน or หลายอัน)
day = "Sat"
if day in ("Sat", "Sun"):       # แทน day=="Sat" or day=="Sun"
    print("วันหยุด")
= กับ == สับสนคือบั๊กยอดฮิต

= คือ "กำหนดค่า" (x = 5) ส่วน == คือ "เปรียบเทียบ" (if x == 5) เขียน if x = 5 จะ error ทันที โชคดีที่ Python ฟ้อง — แต่ในเงื่อนไขซับซ้อนให้ระวังเสมอ และจำว่าเช็ค None ใช้ if x is None ไม่ใช่ ==

สรุปหัวข้อนี้

  • if ทำคำสั่งเมื่อเงื่อนไขจริง, else เป็นทางสำรอง, elif ตรวจเงื่อนไขถัดไป
  • การย่อหน้าบอกขอบเขตของบล็อก — ผิดแล้ว error
  • เรียงเงื่อนไขจากเข้มงวดไปหลวม เพราะหยุดที่อันแรกที่จริง
  • ค่า falsy: 0, "", [], {}, None — ที่เหลือ truthy
  • ternary และ match ช่วยเขียนเงื่อนไขให้สั้นและสะอาด
แบบฝึกหัด

1) รับคะแนน แล้วแปลงเป็นเกรด A-F 2) รับเลข บอกว่าเป็นบวก ลบ หรือศูนย์ 3) รับปี ค.ศ. บอกว่าเป็นปีอธิกสุรทินไหม 4) เขียนเครื่องคิดเลขง่าย: รับเลข 2 ตัวและเครื่องหมาย (+,-,*,/) แล้วคำนวณตามนั้น (ใช้ if/elif)