ข้ามไปยังเนื้อหาหลัก
Editor

if-else ใน Python: เงื่อนไข elif, if ซ้อนกัน และ ternary

เริ่มต้น25 นาที6 แบบฝึกหัด70 XP

บทเรียนนี้แปลจากต้นฉบับภาษาอังกฤษRead in EnglishLeer en españolЧитать на русскомLer em portuguêsแจ้งข้อผิดพลาดในการแปล

0/6 แบบฝึกหัด

ทุกวันคุณตัดสินใจหลายร้อยเรื่อง ถ้าฝนตก คุณก็หยิบร่ม ถ้าไฟจราจรเป็นสีแดง คุณก็หยุด ถ้าแบตเตอรี่โทรศัพท์เหลือต่ำกว่า 20% คุณก็หาที่ชาร์จ ทั้งหมดนี้คือ การตัดสินใจตามเงื่อนไข คือคุณตรวจสอบบางอย่าง แล้วลงมือทำตามผลที่ได้

โปรแกรมก็ตัดสินใจแบบเดียวกัน ถ้าไม่มีเงื่อนไข โค้ดจะทำงานแบบเดิมทุกครั้ง ไม่ว่าจะได้รับข้อมูลอะไรมา เงื่อนไขช่วยให้โปรแกรมตอบสนองต่อสถานการณ์ที่ต่างกัน จัดการกรณีพิเศษ (edge case) และทำงานได้อย่างชาญฉลาด

ในบทเรียนนี้ คุณจะได้เรียนว่า Python ตัดสินใจอย่างไรด้วย if, else และ elif เมื่อจบบท คุณจะเขียนโปรแกรมที่เลือกทางเดินต่างกันได้ตามข้อมูลที่ผู้ใช้ป้อน ค่าที่คำนวณได้ และเงื่อนไขหลายข้อที่ซับซ้อน

คำสั่ง if ใน Python ทำงานอย่างไร

คำสั่ง (statement) if คือรูปแบบการตัดสินใจที่ง่ายที่สุด ใช้ตรวจสอบเงื่อนไข ถ้าเงื่อนไขเป็น True โค้ดที่เยื้องอยู่ข้างใต้จะทำงาน ถ้าเงื่อนไขเป็น False Python จะข้ามโค้ดส่วนนั้นไปทั้งหมด

คำสั่ง if แบบพื้นฐาน
temperature = 35
if temperature > 30:
print('It\'s hot outside!')
print('Stay hydrated.')
print('Have a great day!')
ผลลัพธ์
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

if-else: ทางเลือกสองทาง
age = 15
if age >= 18:
print('You can vote!')
else:
print('You\'re too young to vote.')
years_left = 18 - age
print(f'Come back in {years_left} years.')
ผลลัพธ์
You're too young to vote.
Come back in 3 years.

ลองนึกถึง if-else ว่าเหมือนทางแยก Python จะไปทางใดทางหนึ่งเสมอ ไม่มีทางไปทั้งสองทาง และไม่มีทางไม่ไปทางไหนเลย ทุกครั้งจะมีบล็อกทำงานเพียงบล็อกเดียวพอดี

ไม่มี else: ตรวจสอบแยกกันสองครั้ง
score = 85

if score >= 60:
    print('You passed!')
if score < 60:
    print('You failed.')
มี else: อ่านง่ายกว่าและปลอดภัยกว่า
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") เข้ามาช่วย

ใช้ elif ต่อกันเมื่อมีหลายเงื่อนไข
score = 82
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'F'
print(f'Score: {score}, Grade: {grade}')
ผลลัพธ์
Score: 82, Grade: B

Python ตรวจเงื่อนไขจากบนลงล่าง ทันทีที่เจอเงื่อนไขที่เป็น True จะรันบล็อกนั้นและ ข้ามทุกอย่างที่อยู่ข้างล่าง ถ้าไม่มีเงื่อนไขไหนตรงเลย บล็อก else จะทำงานเป็นตาข่ายรองรับ

คุณใส่บล็อก elif ได้มากเท่าที่ต้องการ else ท้ายสุดจะใส่หรือไม่ก็ได้ แต่ควรใส่ไว้รับค่าที่ไม่คาดคิดทั้งหมด


คำสั่ง if ซ้อนกัน: เงื่อนไขภายในเงื่อนไข

บางครั้งคุณต้องตรวจเงื่อนไขที่สองหลังจากเงื่อนไขแรกผ่านแล้วเท่านั้น เช่น เครื่องเล่นในสวนสนุกอาจตรวจก่อนว่าคุณมีตั๋ว แล้วจึงตรวจอายุ คุณใส่คำสั่ง if ไว้ในคำสั่ง if อีกตัวได้ เรียกว่า การซ้อน (nesting)

คำสั่ง if ซ้อนกัน
has_ticket = True
age = 14
if has_ticket:
if age >= 12:
print('Welcome to the ride!')
else:
print('Sorry, you must be 12 or older.')
else:
print('You need a ticket first.')
ผลลัพธ์
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 ทั้งหมดไว้ในบรรทัดเดียว

ตัวดำเนินการ ternary: if-else ในบรรทัดเดียว
age = 20
# Regular if-else
if age >= 18:
status = 'adult'
else:
status = 'minor'
print(status)
# Same thing with ternary operator
status = 'adult' if age >= 18 else 'minor'
print(status)
ผลลัพธ์
adult
adult

รูปแบบคือ value_if_true if condition else value_if_false อ่านได้เหมือนประโยคภาษาอังกฤษ: "status คือ 'adult' ถ้า age อย่างน้อย 18 ไม่อย่างนั้นคือ 'minor'"

ternary ในงานจริง
# Ternary works great in print statements and f-strings
temperature = 28
print(f'Wear a {"coat" if temperature < 15 else "t-shirt"} today.')
# And for quick calculations
x = -5
absolute = x if x >= 0 else -x
print(f'Absolute value of {x} is {absolute}')
ผลลัพธ์
Wear a t-shirt today.
Absolute value of -5 is 5

ข้อผิดพลาดที่พบบ่อยกับ if-else

นี่คือบั๊กที่ผู้เริ่มต้นทำบ่อยที่สุดกับคำสั่งเงื่อนไข ถ้าฝึกจับรูปแบบเหล่านี้ได้ คุณจะประหยัดเวลาดีบักไปได้หลายชั่วโมง

ข้อผิดพลาดที่พบบ่อย: ใช้ or กับหลายค่า
# Bug: wrong comparison for multiple values
color = 'red'
# This does NOT work as expected
if color == 'red' or 'blue':
print('This always runs!') # Always True!
# This is correct
if color == 'red' or color == 'blue':
print('Red or blue!')
# Even cleaner with "in"
if color in ('red', 'blue', 'green'):
print('Primary color!')
ผลลัพธ์
This always runs!
Red or blue!
Primary color!

แบบฝึกหัด

ได้เวลาฝึกแล้ว แบบฝึกหัดเหล่านี้เริ่มจากคำสั่ง if ง่าย ๆ ไปจนถึงตรรกะเงื่อนไขที่ซับซ้อนขึ้น ลองทำแต่ละข้อก่อนเปิดดูคำใบ้

แบบฝึกหัดที่ 1: เลขคู่หรือเลขคี่
เขียนโค้ด

เขียนโปรแกรมตรวจว่าตัวเลขเป็นเลขคู่หรือเลขคี่ มีตัวแปร number ให้ไว้แล้ว โดยมีค่าเป็น 7

แสดง "even" ถ้าเป็นเลขคู่ หรือ "odd" ถ้าเป็นเลขคี่

ผลลัพธ์ที่ต้องการ:

odd

คำใบ้: ตัวเลขเป็นเลขคู่เมื่อ number % 2 == 0 (เศษจากการหารด้วย 2 เป็นศูนย์)

number = 7
# Check if the number is even or odd
แบบฝึกหัดที่ 2: แนะนำการแต่งตัวตามอุณหภูมิ
เขียนโค้ด

เขียนโปรแกรมแนะนำการแต่งตัวตามอุณหภูมิ มีตัวแปร temp ให้ไว้แล้ว โดยมีค่าเป็น 22

กฎ:

  • ถ้า temp ตั้งแต่ 30 ขึ้นไป ให้แสดง "Wear shorts"
  • ถ้า temp ตั้งแต่ 20 ขึ้นไป (แต่ต่ำกว่า 30) ให้แสดง "Wear a t-shirt"
  • ถ้า temp ตั้งแต่ 10 ขึ้นไป (แต่ต่ำกว่า 20) ให้แสดง "Wear a jacket"
  • ถ้าต่ำกว่า 10 ให้แสดง "Wear a coat"
  • ผลลัพธ์ที่ต้องการ:

    Wear a t-shirt
    temp = 22
    # Give clothing advice based on temperature
    แบบฝึกหัดที่ 3: ทายผลลัพธ์
    ทายผลลัพธ์

    ทายว่าโค้ดจะแสดงอะไรโดยยังไม่ต้องรัน จากนั้นจึงรันเพื่อตรวจคำตอบ

    คิดให้ดีว่าเงื่อนไขไหนเป็น True และเงื่อนไขไหนเป็น False

    x = 15
    if x > 20:
    print('A')
    elif x > 10:
    print('B')
    elif x > 5:
    print('C')
    else:
    print('D')
    print('Done')
    แบบฝึกหัดที่ 4: แก้โปรแกรมคำนวณเกรด
    แก้บั๊ก

    โปรแกรมคำนวณเกรดนี้มีบั๊ก ทุกคะแนนได้เกรด "D" ทั้งที่ควรได้ "A", "B" หรือ "C" แก้ชุด elif ให้ทำงานถูกต้อง

    ผลลัพธ์ที่ต้องการเมื่อ score = 85:

    Grade: B
    score = 85
    if score >= 60:
    grade = 'D'
    elif score >= 70:
    grade = 'C'
    elif score >= 80:
    grade = 'B'
    elif score >= 90:
    grade = 'A'
    else:
    grade = 'F'
    print(f'Grade: {grade}')
    แบบฝึกหัดที่ 5: ราคาตั๋วด้วย ternary
    เขียนโค้ด

    โรงภาพยนตร์คิดค่าตั๋ว $12 สำหรับผู้ใหญ่ (อายุ 18 ปีขึ้นไป) และ $8 สำหรับเด็ก (อายุต่ำกว่า 18 ปี) ใช้ ตัวดำเนินการ ternary กำหนดราคาในบรรทัดเดียว แล้วแสดงผล

    มีตัวแปร age ให้ไว้แล้ว โดยมีค่าเป็น 14

    ผลลัพธ์ที่ต้องการ:

    Ticket price: $8
    age = 14
    # Use a ternary operator to set the price
    price = # your code here
    print(f'Ticket price: ${price}')
    แบบฝึกหัดที่ 6: ตรวจสอบการเข้าสู่ระบบ
    เขียนโค้ด

    เขียนโปรแกรมตรวจสอบการเข้าสู่ระบบ มีตัวแปรให้สองตัว: username และ password

    กฎ:

  • ถ้า username เป็น "admin" และ password เป็น "secret123" ให้แสดง "Welcome, admin!"
  • ถ้า username เป็น "admin" แต่ password ผิด ให้แสดง "Wrong password"
  • ถ้าเป็น username อื่น ให้แสดง "User not found"
  • ผลลัพธ์ที่ต้องการเมื่อ username = "admin", password = "wrong":

    Wrong password
    username = 'admin'
    password = 'wrong'
    # Write the login validation logic

    สรุป: คำสั่ง if-else ใน Python

    สรุปทุกอย่างที่คุณเรียนเกี่ยวกับเงื่อนไขใน Python:

    แนวคิดรูปแบบใช้ทำอะไร
    ifif condition:รันโค้ดเมื่อเงื่อนไขเป็น True
    elseelse:รันโค้ดเมื่อ if เป็น False
    elifelif condition:ตรวจเงื่อนไขเพิ่มเติม
    if ซ้อนกันif ภายใน ifตัดสินใจหลายชั้น
    Ternaryx if cond else yif-else บรรทัดเดียวสำหรับค่าง่าย ๆ

    กฎสำคัญที่ต้องจำ:

  • ทุกบรรทัด if, elif และ else จบด้วยโคลอน (:)
  • โค้ดภายในบล็อกต้องเยื้อง
  • ใน elif ที่ต่อกัน Python จะหยุดที่เงื่อนไขแรกที่เป็น True
  • ใช้ == เพื่อเปรียบเทียบ ไม่ใช่ = (ซึ่งเป็นการกำหนดค่า)
  • วางเงื่อนไขที่เข้มงวดที่สุดไว้ก่อนใน elif ที่ต่อกัน
  • เรียนอะไรต่อ

    ตอนนี้โปรแกรมของคุณตัดสินใจได้แล้ว ถึงเวลาทำให้โปรแกรมทำงานซ้ำ ในบทถัดไป ลูป for ใน Python คุณจะได้เรียนวิธีวนลูปผ่านลิสต์ ช่วงตัวเลข (range) และสตริง เพื่อประมวลผลข้อมูลโดยไม่ต้องเขียนโค้ดเดิมซ้ำไปซ้ำมา

    บทเรียนที่เกี่ยวข้อง

    บทเรียนนี้มีประโยชน์หรือไม่