Python เงื่อนไข if / elif / else
จนถึงตอนนี้โปรแกรมของเราทำงานเป็นเส้นตรง บรรทัดบนลงล่างเหมือนกันทุกครั้ง คำสั่งเงื่อนไขคือสิ่งที่ทำให้โปรแกรม “เลือกทาง” ได้ ถ้าเงื่อนไขเป็นจริงทำอย่างหนึ่ง ถ้าไม่จริงทำอีกอย่าง
รูปแบบพื้นฐาน: if
age = 20
if age >= 18:
print("คุณบรรลุนิติภาวะแล้ว")
print("จบโปรแกรม")ผลลัพธ์:
คุณบรรลุนิติภาวะแล้ว
จบโปรแกรมจุดที่ต้องสังเกต:
- หลังเงื่อนไขต้องมี
:(โคลอน) เสมอ - บรรทัดที่อยู่ “ข้างใน” if ต้องเยื้องเข้าไป (indent) โดยทั่วไปใช้ 4 ช่องว่าง
- บรรทัดที่ไม่เยื้อง (
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}")ผลลัพธ์:
เกรดที่ได้: BPython เช็คเงื่อนไขจากบนลงล่าง พอเจออันแรกที่เป็นจริงก็ทำอันนั้นแล้วออกจากบล็อกเลย ไม่เช็คต่อ ฉะนั้นลำดับของเงื่อนไขสำคัญมาก ถ้าเอา 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()