0Pricing
Python Academy · บทเรียน

การ์ดและไวลด์การ์ด

เพิ่มเงื่อนไขและกรณีครอบคลุมทั้งหมด

การ์ดและไวลด์การ์ด เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

การปรับการจับคู่ให้ละเอียดขึ้น

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

การเพิ่มเงื่อนไขกำกับ

เขียน if <condition> ต่อท้ายรูปแบบ กรณีจะตรงกันก็ต่อเมื่อรูปแบบตรงกันและเงื่อนไขกำกับเป็นจริง

n = 7

match n:
    case x if x < 0:
        print('negative')
    case x if x == 0:
        print('zero')
    case x if x > 0:
        print('positive')

เงื่อนไขกำกับใช้ชื่อที่จับค่าไว้

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

point = [3, 3]

match point:
    case [x, y] if x == y:
        print('on the diagonal')
    case [x, y]:
        print('off the diagonal')

เมื่อเงื่อนไขกำกับไม่ผ่าน

หากโครงสร้างตรงกันแต่เงื่อนไขกำกับเป็นเท็จ การจับคู่จะดำเนินต่อไปยังกรณีถัดไปแทนที่จะหยุด

value = 5

match value:
    case n if n > 100:
        print('big')
    case n:
        print('fell through to here:', n)

เงื่อนไขกำกับกับรูปแบบคลาส

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

from dataclasses import dataclass

@dataclass
class Order:
    total: float

def discount(order):
    match order:
        case Order(total=t) if t > 100:
            return 'free shipping'
        case Order():
            return 'standard shipping'

print(discount(Order(150)))
print(discount(Order(50)))

ทบทวนไวลด์การ์ด

ขีดล่างเดี่ยว _ จะจับคู่กับทุกสิ่งและไม่ผูกค่าใดไว้ เมื่อเป็นกรณีสุดท้าย จะจัดการทุกกรณีที่ยังไม่ตรงกับกรณีก่อนหน้า

x = 'unexpected'

match x:
    case 'a':
        print('letter a')
    case _:
        print('catch-all')

การจับค่าเทียบกับไวลด์การ์ด

การจับค่าด้วยชื่อก็จับคู่กับทุกสิ่งเช่นกัน แต่จะเก็บค่าไว้ ส่วน _ จะทิ้งค่า ใช้ชื่อเมื่อคุณต้องการค่าไปใช้ในเนื้อหาของกรณี

value = 42

match value:
    case 0:
        print('zero')
    case other:        # capture: keeps the value
        print('value was', other)

ไวลด์การ์ดภายในรูปแบบ

ขีดล่างสามารถอยู่ภายในรูปแบบขนาดใหญ่กว่าเพื่อเพิกเฉยต่อส่วนที่คุณไม่สนใจ

record = ('user', 42, 'ignore_me')

match record:
    case ('user', user_id, _):
        print('user id:', user_id)

การรวม OR เงื่อนไขกำกับ และไวลด์การ์ด

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

def classify(n):
    match n:
        case 0 | 1:
            return 'binary digit'
        case x if x % 2 == 0:
            return 'even'
        case _:
            return 'odd'

print(classify(0))
print(classify(4))
print(classify(7))

ความครอบคลุมทุกกรณี

ต่างจากภาษาบางภาษา ไพธอนไม่บังคับให้การจับคู่ครอบคลุมทุกกรณี หากไม่มีกรณีใดตรงกัน คำสั่งจะไม่ทำอะไรเลย เพิ่ม case _ สุดท้ายเมื่อคุณต้องการรับประกันว่าจะมีแขนงหนึ่งทำงานเสมอ

color = 'purple'
result = 'no match'

match color:
    case 'red':
        result = 'stop'
    case 'green':
        result = 'go'

print(result)

เงื่อนไขกำกับกับข้อมูลที่แยกโครงสร้างแล้ว

เงื่อนไขกำกับทำงานคู่กับรูปแบบลำดับและรูปแบบการแมปได้อย่างเป็นธรรมชาติ ทำให้คุณทดสอบค่าที่เพิ่งดึงออกมาได้

data = [10, 20]

match data:
    case [a, b] if a + b > 25:
        print('sum is large')
    case [a, b]:
        print('sum is small')

ตรวจสอบความเข้าใจ

จะเกิดอะไรขึ้นเมื่อรูปแบบตรงกันในเชิงโครงสร้าง แต่เงื่อนไขกำกับเป็นเท็จ

ทบทวน

คุณได้เรียนรู้การเพิ่มเงื่อนไขและกรณีที่ครอบคลุมทุกกรณี

  • เงื่อนไขกำกับเพิ่มการทดสอบด้วย if ซึ่งสามารถใช้ชื่อที่จับค่าไว้ได้
  • เมื่อเงื่อนไขกำกับไม่ผ่าน ระบบจะไปยังกรณีถัดไป
  • _ จะจับคู่แล้วทิ้งค่า ส่วนชื่อจะจับค่าไว้
  • เพิ่ม case _ สุดท้ายเพื่อให้มีแขนงทำงานอย่างแน่นอน

คำถามที่พบบ่อย

บทเรียน “การ์ดและไวลด์การ์ด” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การ์ดและไวลด์การ์ด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การ์ดและไวลด์การ์ด”

เพิ่มเงื่อนไขและกรณีครอบคลุมทั้งหมด คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การ์ดและไวลด์การ์ด” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐาน match และ case
  2. การจับคู่ลำดับและแมป
  3. รูปแบบคลาส
  4. การ์ดและไวลด์การ์ด
← กลับไปที่ Python Academy