if-else ใน Python: เงื่อนไข elif, if ซ้อนกัน และ ternary
บทเรียนนี้แปลจากต้นฉบับภาษาอังกฤษRead in EnglishLeer en españolЧитать на русскомLer em portuguêsแจ้งข้อผิดพลาดในการแปล
ทุกวันคุณตัดสินใจหลายร้อยเรื่อง ถ้าฝนตก คุณก็หยิบร่ม ถ้าไฟจราจรเป็นสีแดง คุณก็หยุด ถ้าแบตเตอรี่โทรศัพท์เหลือต่ำกว่า 20% คุณก็หาที่ชาร์จ ทั้งหมดนี้คือ การตัดสินใจตามเงื่อนไข คือคุณตรวจสอบบางอย่าง แล้วลงมือทำตามผลที่ได้
โปรแกรมก็ตัดสินใจแบบเดียวกัน ถ้าไม่มีเงื่อนไข โค้ดจะทำงานแบบเดิมทุกครั้ง ไม่ว่าจะได้รับข้อมูลอะไรมา เงื่อนไขช่วยให้โปรแกรมตอบสนองต่อสถานการณ์ที่ต่างกัน จัดการกรณีพิเศษ (edge case) และทำงานได้อย่างชาญฉลาด
ในบทเรียนนี้ คุณจะได้เรียนว่า Python ตัดสินใจอย่างไรด้วย if, else และ elif เมื่อจบบท คุณจะเขียนโปรแกรมที่เลือกทางเดินต่างกันได้ตามข้อมูลที่ผู้ใช้ป้อน ค่าที่คำนวณได้ และเงื่อนไขหลายข้อที่ซับซ้อน
คำสั่ง if ใน Python ทำงานอย่างไร
คำสั่ง (statement) if คือรูปแบบการตัดสินใจที่ง่ายที่สุด ใช้ตรวจสอบเงื่อนไข ถ้าเงื่อนไขเป็น True โค้ดที่เยื้องอยู่ข้างใต้จะทำงาน ถ้าเงื่อนไขเป็น False Python จะข้ามโค้ดส่วนนั้นไปทั้งหมด
It's hot outside! Stay hydrated. Have a great day!
สังเกตโครงสร้าง คีย์เวิร์ด if ตามด้วยเงื่อนไข (temperature > 30) แล้วตามด้วยเครื่องหมายโคลอน (:) บรรทัดข้างใต้ถูก เยื้อง เข้าไป การเยื้อง (indentation) นี้คือวิธีที่ Python ใช้รู้ว่าโค้ดไหนอยู่ในบล็อก if บรรทัดสุดท้ายทำงานเสมอไม่ว่าอย่างไร เพราะไม่ได้เยื้องอยู่ใต้ if
ลองเปลี่ยนอุณหภูมิในโค้ดด้านบนเป็น 25 แล้วรันอีกครั้ง สองบรรทัดที่พูดถึงอากาศร้อนจะหายไป แต่คุณยังเห็น "Have a great day!" เพราะบรรทัดนั้นอยู่นอกบล็อก if
เพิ่ม else: จะเกิดอะไรขึ้นเมื่อเงื่อนไขเป็น False
คำสั่ง if อย่างเดียวทำได้แค่ทำบางอย่าง หรือไม่ทำอะไรเลย แต่บ่อยครั้งคุณอยากทำสิ่งหนึ่งเมื่อเงื่อนไขเป็นจริง และทำ อีกสิ่งหนึ่ง เมื่อเงื่อนไขเป็นเท็จ นั่นคือหน้าที่ของ else
You're too young to vote. Come back in 3 years.
ลองนึกถึง if-else ว่าเหมือนทางแยก Python จะไปทางใดทางหนึ่งเสมอ ไม่มีทางไปทั้งสองทาง และไม่มีทางไม่ไปทางไหนเลย ทุกครั้งจะมีบล็อกทำงานเพียงบล็อกเดียวพอดี
score = 85
if score >= 60:
print('You passed!')
if score < 60:
print('You failed.')score = 85
if score >= 60:
print('You passed!')
else:
print('You failed.')แบบที่ใช้ else ดีกว่าด้วยเหตุผลสองข้อ ข้อแรก สั้นกว่าและอ่านง่ายกว่า ข้อสอง ไม่มีทางที่ทั้งสองบล็อกจะทำงานพร้อมกัน หรือไม่มีบล็อกไหนทำงานเลยโดยไม่ตั้งใจ ถ้าใช้คำสั่ง if แยกกันสองคำสั่ง การพิมพ์ผิดในเงื่อนไขที่สองอาจทำให้เกิดบั๊กได้
elif ทำงานอย่างไรเมื่อมีหลายเงื่อนไข
ถ้ามีทางเลือกมากกว่าสองทางล่ะ? ลองนึกถึงการให้เกรดข้อสอบ: A, B, C, D หรือ F คุณจัดการผลลัพธ์ห้าแบบด้วย if และ else อย่างเดียวไม่ได้ นี่คือตอนที่ elif (ย่อมาจาก "else if") เข้ามาช่วย
Score: 82, Grade: B
Python ตรวจเงื่อนไขจากบนลงล่าง ทันทีที่เจอเงื่อนไขที่เป็น True จะรันบล็อกนั้นและ ข้ามทุกอย่างที่อยู่ข้างล่าง ถ้าไม่มีเงื่อนไขไหนตรงเลย บล็อก else จะทำงานเป็นตาข่ายรองรับ
คุณใส่บล็อก elif ได้มากเท่าที่ต้องการ else ท้ายสุดจะใส่หรือไม่ก็ได้ แต่ควรใส่ไว้รับค่าที่ไม่คาดคิดทั้งหมด
คำสั่ง if ซ้อนกัน: เงื่อนไขภายในเงื่อนไข
บางครั้งคุณต้องตรวจเงื่อนไขที่สองหลังจากเงื่อนไขแรกผ่านแล้วเท่านั้น เช่น เครื่องเล่นในสวนสนุกอาจตรวจก่อนว่าคุณมีตั๋ว แล้วจึงตรวจอายุ คุณใส่คำสั่ง if ไว้ในคำสั่ง if อีกตัวได้ เรียกว่า การซ้อน (nesting)
Welcome to the ride!
if ตัวในจะทำงานเฉพาะเมื่อ if ตัวนอกเป็น True สังเกตว่าการเยื้องลึกขึ้นเรื่อย ๆ การซ้อนแต่ละชั้นจะเพิ่มการเยื้องอีกหนึ่งระดับ
if has_ticket:
if age >= 12:
if height >= 120:
print('Welcome!')if has_ticket and age >= 12 and height >= 120:
print('Welcome!')ตัวดำเนินการ ternary ใน Python: if-else ในบรรทัดเดียว
บางครั้งคุณมี if-else ง่าย ๆ ที่แค่กำหนดค่าให้ตัวแปร Python มีทางลัดสำหรับเรื่องนี้ เรียกว่า ตัวดำเนินการ ternary (ternary operator หรือเรียกอีกชื่อว่านิพจน์เงื่อนไข) ซึ่งเขียน if-else ทั้งหมดไว้ในบรรทัดเดียว
adult adult
รูปแบบคือ value_if_true if condition else value_if_false อ่านได้เหมือนประโยคภาษาอังกฤษ: "status คือ 'adult' ถ้า age อย่างน้อย 18 ไม่อย่างนั้นคือ 'minor'"
Wear a t-shirt today. Absolute value of -5 is 5
ข้อผิดพลาดที่พบบ่อยกับ if-else
นี่คือบั๊กที่ผู้เริ่มต้นทำบ่อยที่สุดกับคำสั่งเงื่อนไข ถ้าฝึกจับรูปแบบเหล่านี้ได้ คุณจะประหยัดเวลาดีบักไปได้หลายชั่วโมง
This always runs! Red or blue! Primary color!
แบบฝึกหัด
ได้เวลาฝึกแล้ว แบบฝึกหัดเหล่านี้เริ่มจากคำสั่ง if ง่าย ๆ ไปจนถึงตรรกะเงื่อนไขที่ซับซ้อนขึ้น ลองทำแต่ละข้อก่อนเปิดดูคำใบ้
เขียนโปรแกรมตรวจว่าตัวเลขเป็นเลขคู่หรือเลขคี่ มีตัวแปร number ให้ไว้แล้ว โดยมีค่าเป็น 7
แสดง "even" ถ้าเป็นเลขคู่ หรือ "odd" ถ้าเป็นเลขคี่
ผลลัพธ์ที่ต้องการ:
oddคำใบ้: ตัวเลขเป็นเลขคู่เมื่อ number % 2 == 0 (เศษจากการหารด้วย 2 เป็นศูนย์)
เขียนโปรแกรมแนะนำการแต่งตัวตามอุณหภูมิ มีตัวแปร temp ให้ไว้แล้ว โดยมีค่าเป็น 22
กฎ:
"Wear shorts""Wear a t-shirt""Wear a jacket""Wear a coat"ผลลัพธ์ที่ต้องการ:
Wear a t-shirtทายว่าโค้ดจะแสดงอะไรโดยยังไม่ต้องรัน จากนั้นจึงรันเพื่อตรวจคำตอบ
คิดให้ดีว่าเงื่อนไขไหนเป็น True และเงื่อนไขไหนเป็น False
โปรแกรมคำนวณเกรดนี้มีบั๊ก ทุกคะแนนได้เกรด "D" ทั้งที่ควรได้ "A", "B" หรือ "C" แก้ชุด elif ให้ทำงานถูกต้อง
ผลลัพธ์ที่ต้องการเมื่อ score = 85:
Grade: Bโรงภาพยนตร์คิดค่าตั๋ว $12 สำหรับผู้ใหญ่ (อายุ 18 ปีขึ้นไป) และ $8 สำหรับเด็ก (อายุต่ำกว่า 18 ปี) ใช้ ตัวดำเนินการ ternary กำหนดราคาในบรรทัดเดียว แล้วแสดงผล
มีตัวแปร age ให้ไว้แล้ว โดยมีค่าเป็น 14
ผลลัพธ์ที่ต้องการ:
Ticket price: $8เขียนโปรแกรมตรวจสอบการเข้าสู่ระบบ มีตัวแปรให้สองตัว: username และ password
กฎ:
"admin" และ password เป็น "secret123" ให้แสดง "Welcome, admin!""admin" แต่ password ผิด ให้แสดง "Wrong password""User not found"ผลลัพธ์ที่ต้องการเมื่อ username = "admin", password = "wrong":
Wrong passwordสรุป: คำสั่ง if-else ใน Python
สรุปทุกอย่างที่คุณเรียนเกี่ยวกับเงื่อนไขใน Python:
| แนวคิด | รูปแบบ | ใช้ทำอะไร |
|---|---|---|
if | if condition: | รันโค้ดเมื่อเงื่อนไขเป็น True |
else | else: | รันโค้ดเมื่อ if เป็น False |
elif | elif condition: | ตรวจเงื่อนไขเพิ่มเติม |
| if ซ้อนกัน | if ภายใน if | ตัดสินใจหลายชั้น |
| Ternary | x if cond else y | if-else บรรทัดเดียวสำหรับค่าง่าย ๆ |
กฎสำคัญที่ต้องจำ:
if, elif และ else จบด้วยโคลอน (:)True== เพื่อเปรียบเทียบ ไม่ใช่ = (ซึ่งเป็นการกำหนดค่า)เรียนอะไรต่อ
ตอนนี้โปรแกรมของคุณตัดสินใจได้แล้ว ถึงเวลาทำให้โปรแกรมทำงานซ้ำ ในบทถัดไป ลูป for ใน Python คุณจะได้เรียนวิธีวนลูปผ่านลิสต์ ช่วงตัวเลข (range) และสตริง เพื่อประมวลผลข้อมูลโดยไม่ต้องเขียนโค้ดเดิมซ้ำไปซ้ำมา