Python ตอนที่ 137 การตรวจสอบเงื่อนไขด้วย If statement

ใน Python เราสามารถเขียนคำสั่งตรวจสอบเงื่อนไขโดยการใช้ If statement เพื่อการตรวจสอบเงื่อนไขบางอย่างว่าเป็นไปตามที่เราต้องการหรือไม่ ก่อนจะดำเนินการใด ๆ โดยการใช้คีย์เวิร์ด if

สำหรับการตรวจสอบเงื่อนไข เราสามารถใช้เครื่องหมายทางคณิตศาสตร์มาใช้ในการตรวจสอบได้ดังนี้

  • ตรวจสอบว่าตัวแปร 2 ตัว เท่ากัน หรือไม่ : x == y
  • ตรวจสอบว่าตัวแปร 2 ตัว ไม่เท่ากัน หรือไม่ : x != y
  • ตรวจสอบว่าตัวแปรด้านซ้าย น้อยกว่า ตัวแปรด้านขวา หรือไม่ : x < y
  • ตรวจสอบว่าตัวแปรด้านซ้าย น้อยกว่าหรือเท่ากับ ตัวแปรด้านขวา หรือไม่ : x <= y
  • ตรวจสอบว่าตัวแปรด้านซ้าย มากกว่า ตัวแปรด้านขวา หรือไม่ : x > y
  • ตรวจสอบว่าตัวแปรด้านซ้าย มากกว่าหรือเท่ากับ ตัวแปรด้านขวา หรือไม่ : a >= b

ตัวอย่างการใช้ If statement

การตรวจสอบเงื่อนไขด้วย If statement เราจะใช้คีย์เวิร์ด if ในการตรวจสอบ ดังตัวอย่าง

x = 100
y = 150
if x < y:
    print("x หน้อยกว่า y")
  • บรรทัดที่ 3 ใช้คีย์เวิร์ด if ตรวจสอบว่า ตัวแปร x มีค่าน้อยกว่าตัวแปร y หรือไม่
  • บรรทัดที่ 4 ถ้าเงื่อนไขเป็นจริง คือตัวแปร x มีค่าน้อยกว่าตัวแปร y ให้แสดงคำว่า “x หน้อยกว่า y” ออกทางหน้อจอ

ผลลัพธ์

x หน้อยกว่า y

การย่อหน้า

ใน Python จะใช้การย่อหน้า (โดยปกตินิยมใช้วิธีกดปุ่ม Tab บนคีย์บอร์ดเพื่อทำย่อหน้า) สำหรับการกำหนดขอบเขตของโค้ด ไม่เหมือนภาษาอื่น ๆ ที่โดยส่วนใหญ่จะใช้เครื่องหมายวงเล็บปีกกา {} ในการกำหนดขอบเขตของโค้ด

ถ้าเราใช้ If statement โดยไม่มีย่อหน้า จะเกิด Error ขึ้นมา

x = 100
y = 150
if x < y:
print('x หน้อยกว่า y')

จากตัวอย่างจะเห็นว่าเกิด IndentationError เนื่องจากเราใช้ If statement โดยไม่มีการกำหนดย่อหน้า ทำให้ Python ไม่รู้ว่าขอบเขตของโค้ดเริ่มจากตรงไหนและจบตรงไหนนั่นเอง

ดังนั้น เรื่องของย่อหน้าจึงเป็นเรื่องสำคัญที่เราต้องระมัดระวังเป็นพิเศษในการเขียนโปรแกรมภาษา Python

กรณีเงื่อนไขแรกไม่เป็นจริงและมีเงื่อนไขอื่นที่ต้องพิจารณาต่อ

ถ้าเรามีเงื่อนไขอื่น ๆ ที่ต้องพิจารณาต่อจากเงื่อนไขแรก ในกรณีที่เงื่อนไขแรกไม่เป็นจริง สามารถใช้คีย์เวิร์ด elif เพื่อตรวจสอบเงื่อนไขอื่น ๆ ต่อไปเรื่อย ๆ ได้

x = 100
y = 100
if x < y:
    print('x หน้อยกว่า y')
elif x == y:
    print("x เท่ากับ y")
  • บรรทัดที่ 3 ใช้คีย์เวิร์ด if เพื่อตรวจสอบว่าตัวแปร x มีค่าน้อยกว่าตัวแปร y หรือไม่
  • บรรทัดที่ 4 ถ้าเงื่อนไขเป็นจริงตามบรรทัดที่ 3 ให้แสดงข้อความ “x หน้อยกว่า y”
  • บรรทัดที่ 5 ถ้าเงื่อนไขตามบรรทัดที่ 3 ไม่เป็นจริง จะข้ามมาทำงานที่บรรทัดนี้ ใช้คีย์เวิร์ด elif ตรวจสอบว่า ตัวแปร x มีค่าเท่ากับตัวแปร y หรือไม่
  • บรรทัดที่ 6 ถ้าเงื่อนไขเป็นจริงตามบรรทัดที่ 5 ให้แสดงข้อความ “x เท่ากับ y”

จากโค้ด เนื่องจากตัวแปร x และตัวแปร y มีค่าเท่ากัน เงื่อนไขแรก (บรรทัดที่ 3) จึงไม่เป็นจริง จึงข้ามมาทำงานที่บรรทัดที่ 5 ต่อ ซึ่งตรวจสอบว่า ตัวแปร x มีค่าเท่ากับตัวแปร y หรือไม่ มาถึงตรงนี้เงื่อนไขเป็นจริงแล้ว โปรแกรมจึงทำงานตามเงื่อนไขนี้ คือแสดงข้อความ “x เท่ากับ y”

ผลลัพธ์

x เท่ากับ y

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

score = 66
if score >= 80:
    print('เกรด : 4')
elif score >= 75:
    print('เกรด : 3.5')
elif score >= 70:
    print('เกรด : 3')
elif score >= 65:
    print('เกรด : 2.5')
elif score >= 60:
    print('เกรด : 2')

จากโค้ด โปรแกรมจะทำการตรวจสอบเงื่อนไขไปเรื่อย ๆ จนกว่าจะพบเงื่อนไขที่เป็นจริง

  • ถ้าเงื่อนไขในบรรทัดที่ 2 ไม่เป็นจริง ก็จะข้ามไปตรวจสอบเงื่อนไขในบรรทัดที่ 4
  • ถ้าเงื่อนไขในบรรทัดที่ 4 ไม่เป็นจริง ก็จะข้ามไปตรวจสอบเงื่อนไขในบรรทัดที่ 6
  • ถ้าเงื่อนไขในบรรทัดที่ 6 ไม่เป็นจริง ก็จะข้ามไปตรวจสอบเงื่อนไขในบรรทัดที่ 8
  • ถ้าเงื่อนไขในบรรทัดที่ 8 ไม่เป็นจริง ก็จะข้ามไปตรวจสอบเงื่อนไขในบรรทัดที่ 10

ผลลัพธ์ เนื่องจากค่าในตัวแปร score เท่ากับ 66 ซึ่งตรงกับเงื่อนไขในบรรทัดที่ 8 คือ score มากกว่าหรือเท่ากับ 65 ดังนั้นจึงได้ผลลัพธ์เป็น

เกรด : 2.5

กรณีไม่มีเงื่อนไขใดเป็นจริง

ในกรณีที่ไม่มีเงื่อนไขใด ๆ เป็นจริงเลย ซึ่งสามารถเกิดขึ้นได้ เราสามารถใช้คีย์เวิร์ด else เพื่อดำเนินการใด ๆ ตามที่ต้องการ เช่น

score = 44
if score >= 80:
    print('เกรด : 4')
elif score >= 75:
    print('เกรด : 3.5')
elif score >= 70:
    print('เกรด : 3')
elif score >= 65:
    print('เกรด : 2.5')
elif score >= 60:
    print('เกรด : 2')
else:
    print('เกรด : 0')
  • บรรทัดที่ 12-13 ถ้าเงื่อนไขก่อนหน้านี้ไม่มีเงื่อนไขใดเป็นจริงเลย ให้แสดงข้อความ “เกรด : 0”

ผลลัพธ์

เกรด : 0

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

score = 44
if score >= 65:
    print('คุณสอบผ่าน')
else:
    print('คุณสอบไม่ผ่าน')
  • บรรทัดที่ 2-3 ถ้าได้คะแนนตั้งแต่ 65 ขึ้นไป ให้แสดงข้อความ “คุณสอบผ่าน”
  • บรรทัดที่ 4-5 ถ้าเงื่อนไขในบรรทัดที่ 2 ไม่เป็นจริง คือได้คะแนนน้อยกว่า 65 ให้แสดงข้อความ “คุณสอบไม่ผ่าน”

ผลลัพธ์

คุณสอบไม่ผ่าน

Short Hand If

ถ้าหลังจากการตรวจสอบเงื่อนไขแล้ว เรามี statement ที่ต้องดำเนินการเพียงแค่ statement เดียว เราสามารถเขียน statement นั้นไว้ในบรรทัดเดียวกับ If statement ได้เลย โดยจะไม่มี Error ใด ๆ

score = 99
if score >= 65: print('คุณสอบผ่าน')

ผลลัพธ์

คุณสอบผ่าน

Short Hand If … Else

ถ้าหลัง If statement มีคำสั่งที่ต้องดำเนินการเพียง statement เดียว และหลัง Else statement ก็มีคำสั่งที่ต้องดำเนินการเพียง statement เดียวเช่นกัน เราสามารถวางคำสั่งทั้งหมดไว้ในบรรทัดเดียวกันได้เลย โดยมีรูปแบบการใช้งานดังตัวอย่าง

score = 50
print('คุณสอบผ่าน') if score >= 65 else print('คุณสอบไม่ผ่าน')

ผลลัพธ์

คุณสอบไม่ผ่าน

เราสามารถเขียน else statement หลาย ๆ อันไว้ในบรรทัดเดียวกันก็ได้ ตราบใดที่คำสั่งการดำเนินการหลัง else มีเพียง statement เดียว ดังตัวอย่าง

score = 63
print('เกรด : 4') if score >= 80 else print('เกรด : 3.5') if score >= 75 else print('เกรด : 3') if score >= 70 else print('เกรด : 2.5') if score >= 65 else print('เกรด : 2') if score >= 60 else print("สอบตก")

ผลลัพธ์

เกรด : 2

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

การเขียน If statement ลักษณะนี้เรียกว่า Ternary Operators หรือ Conditional Expressions

การใช้คีย์เวิร์ด and ร่วมกัน If statement

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

score = 63
if score is not None and score > 60:
    print("คุณสอบผ่าน")
  • บรรทัดที่ 2 เป็นการตรวจสอบ 2 เงื่อนไข คือ score ต้องไม่เป็น None และต้องมากกว่า 60 ด้วย

จากโค้ดตัวอย่าง ค่าของตัวแปร score คือ 63 ไม่ไช่ค่า None และมากกว่า 60 ด้วย ถือว่าเป็นจริงทั้ง 2 เงื่อนไข จึงได้ผลลัพธ์เป็น

คุณสอบผ่าน

การใช้คีย์เวิร์ด or ร่วมกัน If statement

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

score = 40
if score is None or score < 60:
    print("คุณสอบไม่ผ่าน")
  • บรรทัดที่ 2 เป็นการตรวจสอบ 2 เงื่อนไข โดยถ้าเงื่อนไขใดเงื่อนไขหนึ่งเป็นจริงก็ถือว่าตรงตามเงื่อนไขที่ต้องการ คือ score เป็น None หรือน้อยกว่า 60 อย่างใดอย่างหนึ่ง

จากโค้ด score ไม่ใช่ None แต่น้อยกว่า 60 ถือว่าเข้าเงื่อนไข จึงไปทำงานที่ statement ภายในเงื่อนไข ทำให้ได้ผลลัพธ์เป็น

คุณสอบไม่ผ่าน

การใช้คีย์เวิร์ด not ร่วมกัน If statement

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

เราสามารถใช้คีย์เวิร์ด not ร่วมกับ If statement ดังแนวทางต่อไปนี้

fail = False
if not fail:
    print("คุณสอบผ่าน")
  • บรรทัดที่ 1 สร้างตัวแปร fail ขึ้นมา กำหนดค่าเป็น False
  • บรรทัดที่ 2 ใช้คีย์เวิร์ด not ร่วมกับคีย์เวิร์ด if ตรวจสอบว่า ถ้าไม่ fail แสดงว่าสอบผ่าน ให้ไปเรียก statement ในบรรทัดที่ 3 มาทำงาน

จากโค้ด ตัวแปร fail มีค่าเป็น False เมื่อมีคีย์เวิร์ด not นำหน้า ก็จะกลับค่าเป็น True จึงได้ผลลัพธ์เป็น

คุณสอบผ่าน

Nested If หรือ If statement ซ้อนกัน

เราสามารถใช้ If statement ซ้อนกันหลาย ๆ ชั้นได้ ดังแนวทางต่อไปนี้

score = 74
if score > 59:
    if score >= 80:
        print('เกรด : 4')
    elif score >= 75:
        print('เกรด : 3.5')
    elif score >= 70:
        print('เกรด : 3')
    elif score >= 65:
        print('เกรด : 2.5')
    elif score >= 60:
        print('เกรด : 2')
else:
    print('เกรด : 0')
  • บรรทัดที่ 3-12 เป็นการใช้ If statement ซ้อนอยู่ภายใน If statement อื่นอีกที

ผลลัพธ์

เกรด : 3

การใช้ If statement ซ้อนกันหลาย ๆ ชั้น ต้องระวังเรื่องย่อหน้าด้วย เพราะนั่นคือการกำหนดขอบเขตของโค้ด ถ้าย่อหน้าผิดพลาด การทำงานก็ผิดพลาด หรืออาจเกิด Error ขึ้นได้

The pass Statement

If statement ไม่สามารถปล่อยว่างได้ คือเมื่อมีการตรวจสอบเงื่อนไขด้วยคีย์เวิร์ด if แล้ว ต้องมี statement สำหรับทำงานภายในเงื่อนไขนั้นอย่างน้อย 1 บรรทัด ไม่เช่นนั้นจะเกิด Error

score = None
if score is None: #เขียนแบบนี้จะเกิด Error

แต่ถ้าเรายังไม่มีไอเดียว่าถ้าเงื่อนไขนั้นเป็นจริงจะให้ทำอะไร หรือไม่ต้องการให้ทำอะไรเลย เราสามารถเขียน pass statement ลงไปแทนได้ เพื่อหลีกเลี่ยงข้อผิดพลาด

พูดแบบชาวบ้าน ๆ ก็คือ ให้ผ่านไปก่อนนั่นเอง

ตัวอย่างการใช้ pass statement

score = None
if score is None:
    pass

จากโค้ด หมายความว่า ถ้า score เป็น None ไม่ต้องทำอะไร และหลีกเลี่ยง Error ได้