บทที่ 5: การเขียนโปรแกรมแบบมีการตัดสินใจ (If–Else)

เรียนรู้การควบคุมทางเลือกของโปรแกรมด้วยเงื่อนไข — ต่อเนื่องจากตัวแปร/ตัวดำเนินการ & การรับค่า/แสดงผล

แนวคิดพื้นฐาน

โปรแกรมจำนวนมากต้อง “ตัดสินใจ” ตามเงื่อนไข เช่น ถ้าคะแนน ≥ 50 ให้ผ่าน มิฉะนั้นไม่ผ่าน — ใน Python ใช้คำสั่ง if, elif, และ else พร้อมการเยื้องบรรทัด (indentation) เพื่อกำหนดบล็อกคำสั่ง

# โครงสร้างพื้นฐาน
score = float(input("คะแนน: "))
if score >= 80:
    print("ดีมาก")
elif score >= 50:
    print("ผ่าน")
else:
    print("ไม่ผ่าน")
Tips: ให้ความสำคัญกับการเยื้อง 4 ช่องว่าง (spaces) ในแต่ละบล็อก ใส่เครื่องหมาย : หลังเงื่อนไขทุกครั้ง

ตัวดำเนินการเปรียบเทียบ & ตรรกะ

# เปรียบเทียบ: ผลลัพธ์เป็น True/False
==  !=  >  <  >=  <=

# ตรรกะ: เชื่อมเงื่อนไขหลายตัว
and    or    not

# ตัวอย่าง:
age = 15
has_ticket = True
if age >= 13 and has_ticket:
    print("เข้าชมได้")
Truthiness: ในเงื่อนไข Python ถือค่า 0, 0.0, "", [], {}, None เป็น False; อื่น ๆ เป็น True

รูปแบบ if / elif / else

1) เงื่อนไขเดียว

if condition:
    # ทำบางอย่าง

2) หลายกรณี

if condition1:
    ...
elif condition2:
    ...
else:
    ...

3) แบบย่อ (Conditional Expression)

status = "ผ่าน" if score >= 50 else "ไม่ผ่าน"

แพทเทิร์นที่ใช้บ่อย & จุดพลาด

แพทเทิร์น: การจัดช่วงคะแนน (range), ตรวจอินพุต, ตรวจปีอธิกสุรทิน (leap year), เมนูเลือก (menu)
จุดพลาด: ลืมแปลงชนิดข้อมูล input() (ควรใช้ int() หรือ float()), ลืม :, เยื้องบรรทัดไม่เท่ากัน

ตัวอย่างใช้งานจริง (รันได้ในหน้านี้)

ตัวอย่างที่ 1: สิทธิ์ซื้อตั๋วราคาพิเศษ

โจทย์: รับ อายุ และสถานะสมาชิก (y/n) ถ้าอายุ < 12 หรือ >= 60 หรือ เป็นสมาชิก ให้ลดราคา 20% มิฉะนั้นราคาปกติ

Ticket Discount
Pyodide: กำลังโหลด…
Code
Standard input
Output

                    

ตัวอย่างที่ 2: จัดเกรดด้วยช่วงคะแนน

โจทย์: รับคะแนน 0–100 แล้วแสดงเกรด A(≥80), B(70–79), C(60–69), D(50–59), F(<50)

Grade Mapping
Pyodide: กำลังโหลด…
Code
Standard input
Output

                    

ตัวอย่างที่ 3: ตรวจปีอธิกสุรทิน (Leap Year)

โจทย์: ปีอธิกสุรทินคือปีที่หาร 4 ลงตัว และ (ไม่ใช่ปีที่หาร 100 ลงตัว ยกเว้นหาร 400 ลงตัว) — เขียนโปรแกรมตรวจปี

Leap Year Checker
Pyodide: กำลังโหลด…
Code
Standard input
Output

                    

แบบฝึกหัดปลายบท (If–Else)

เลือกทำอย่างน้อย 1 ข้อ (หรือทั้งหมด):

# เฉลยตัวอย่าง: ส่วนลดตามยอดซื้อ
total = float(input("ยอดซื้อรวม: "))
if total >= 5000:
    disc = 0.15
elif total >= 2000:
    disc = 0.10
elif total >= 1000:
    disc = 0.05
else:
    disc = 0.0
pay = total * (1 - disc)
print(f"ส่วนลด: {disc*100:.0f}%")
print(f"ชำระสุทธิ: {pay:.2f} บาท")
# เฉลยตัวอย่าง: ค่าแท็กซี่
km = float(input("ระยะทาง (กม.): "))
period = input("ช่วงเวลา (peak/off-peak): ").strip().lower()

base = 35
rate = 7.5 if period == "peak" else 6.5
fare = base + km * rate
print(f"ค่าโดยสาร: {fare:.2f} บาท")
# เฉลยตัวอย่าง: ตรวจความแข็งแรงรหัสผ่านง่าย ๆ
pw = input("พาสเวิร์ด: ")
has_digit = any(ch.isdigit() for ch in pw)
has_alpha = any(ch.isalpha() for ch in pw)
if len(pw) >= 8 and has_digit and has_alpha:
    print("Strong")
else:
    print("Weak")
ลองเขียนโปรแกรมของคุณเอง
Pyodide: กำลังโหลด…
Code (เอดิเตอร์ว่าง)
Standard input
Output