Python เงื่อนไข if / elif / else



จนถึงตอนนี้โปรแกรมของเราทำงานเป็นเส้นตรง บรรทัดบนลงล่างเหมือนกันทุกครั้ง คำสั่งเงื่อนไขคือสิ่งที่ทำให้โปรแกรม “เลือกทาง” ได้ ถ้าเงื่อนไขเป็นจริงทำอย่างหนึ่ง ถ้าไม่จริงทำอีกอย่าง

รูปแบบพื้นฐาน: if

age = 20

if age >= 18:
    print("คุณบรรลุนิติภาวะแล้ว")

print("จบโปรแกรม")

ผลลัพธ์:

คุณบรรลุนิติภาวะแล้ว
จบโปรแกรม

จุดที่ต้องสังเกต:

  1. หลังเงื่อนไขต้องมี : (โคลอน) เสมอ
  2. บรรทัดที่อยู่ “ข้างใน” if ต้องเยื้องเข้าไป (indent) โดยทั่วไปใช้ 4 ช่องว่าง
  3. บรรทัดที่ไม่เยื้อง (print("จบโปรแกรม")) อยู่นอก if จะทำงานเสมอ

การเยื้องบรรทัดใน Python ไม่ใช่แค่ความสวยงาม แต่เป็นไวยากรณ์ที่บอกว่าโค้ดบรรทัดไหนอยู่ในบล็อกไหน ถ้าเยื้องผิดโปรแกรมจะทำงานผิดหรือ error ทันที

if / else: มีทางเลือกสองทาง

score = 45

if score >= 50:
    print("ผ่าน")
else:
    print("ไม่ผ่าน")

else ไม่ต้องมีเงื่อนไข เพราะมันคือ “กรณีอื่นทั้งหมดที่ if ไม่จริง”

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

elif ย่อมาจาก “else if” ใช้เมื่อมีเงื่อนไขมากกว่าสองกรณี

score = 72

if score >= 80:
    grade = "A"
elif score >= 70:
    grade = "B"
elif score >= 60:
    grade = "C"
elif score >= 50:
    grade = "D"
else:
    grade = "F"

print(f"เกรดที่ได้: {grade}")

ผลลัพธ์:

เกรดที่ได้: B

Python เช็คเงื่อนไขจากบนลงล่าง พอเจ​ออันแรกที่เป็นจริงก็ทำอันนั้นแล้วออกจากบล็อกเลย ไม่เช็คต่อ ฉะนั้นลำดับของเงื่อนไขสำคัญมาก ถ้าเอา score >= 50 ไว้บนสุด คะแนน 72 ก็จะได้เกรด D ทันทีทั้งที่ควรได้ B

เงื่อนไขซ้อนเงื่อนไข (nested if)

ใส่ if ไว้ในอีก if ได้ แต่ระวังอย่าซ้อนลึกเกินไปเพราะจะอ่านยาก

username = input("ชื่อผู้ใช้: ")
password = input("รหัสผ่าน: ")

if username == "admin":
    if password == "1234":
        print("เข้าสู่ระบบสำเร็จ")
    else:
        print("รหัสผ่านไม่ถูกต้อง")
else:
    print("ไม่พบชื่อผู้ใช้นี้")

กรณีนี้เขียนให้แบนลงด้วย and ได้ อ่านง่ายกว่า

if username == "admin" and password == "1234":
    print("เข้าสู่ระบบสำเร็จ")
else:
    print("ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง")

เขียนเงื่อนไขสั้น ๆ ด้วย ternary

ถ้าแค่อยากกำหนดค่าตัวแปรตามเงื่อนไข เขียนบรรทัดเดียวได้

age = 20
status = "ผู้ใหญ่" if age >= 18 else "เยาวชน"
print(status)   # ผู้ใหญ่

อ่านเป็นภาษาคนคือ “เอา ‘ผู้ใหญ่’ ถ้า age >= 18 ไม่งั้นเอา ‘เยาวชน'”

เช็คว่าค่าอยู่ในกลุ่มไหม

แทนที่จะเขียน x == "a" or x == "b" or x == "c" ใช้ in กับลิสต์จะสั้นกว่า

day = input("วันนี้วันอะไร: ")

if day in ["เสาร์", "อาทิตย์"]:
    print("วันหยุด พักผ่อนให้เต็มที่")
else:
    print("วันทำงาน สู้ ๆ")

ตัวอย่างรวม: ตรวจสิทธิ์ส่วนลด

print("=== คำนวณราคาหลังส่วนลด ===")

price = float(input("ราคาสินค้า: "))
is_member = input("เป็นสมาชิกไหม (y/n): ") == "y"

if price >= 1000 and is_member:
    discount = 0.20
elif price >= 1000:
    discount = 0.10
elif is_member:
    discount = 0.05
else:
    discount = 0

final = price * (1 - discount)
print(f"ส่วนลด {discount:.0%}")
print(f"ราคาสุทธิ {final:,.2f} บาท")

ผลลัพธ์:

=== คำนวณราคาหลังส่วนลด ===
ราคาสินค้า: 1500
เป็นสมาชิกไหม (y/n): y
ส่วนลด 20%
ราคาสุทธิ 1,200.00 บาท

สรุป

  • if ตามด้วยเงื่อนไขและ : แล้วเยื้องบรรทัดข้างในเข้าไป 4 ช่องว่าง
  • elif ใช้เพิ่มทางเลือก, else คือกรณีที่เหลือทั้งหมด
  • Python เช็คเงื่อนไขจากบนลงล่าง เจ​ออันแรกที่จริงก็หยุด ลำดับจึงสำคัญ
  • ใช้ and/or แทนการซ้อน if ลึก ๆ และใช้ in เช็คว่าค่าอยู่ในกลุ่มไหน

บทถัดไปเข้าเรื่องการวนซ้ำ เริ่มจากลูป for และฟังก์ชัน range()