Python ตอนที่ 139 การใช้ for loop

ลูป for ใช้สำหรับวนเข้าถึงข้อมูลประเภท Sequence เช่น ข้อมูลประเภท List, Tuple, Dictionary, Set หรือ String และการใช้ลูป for ไม่จำเป็นต้องกำหนดอินเด็กซ์เพื่อระบุลำดับของข้อมูลที่ต้องการเข้าถึง

ตัวอย่างการใช้งานลูป for

phones = ["iPhone 11", "iPhone 12", "iPhone 14", "iPhone 15", "vivo V29 5G", "OPPO Reno 10 Pro"]
for x in phones:
  print(x)
  • บรรทัดที่ 1 สร้างข้อมูลประเภท List ขึ้นมา 1 ชุด เก็บรายการ Smart Phone พักข้อมูลไว้ที่ตัวแปร phones
  • บรรทัดที่ 2-3 ใช้ลูป for วนเข้าถึงข้อมูลในตัวแปร phones ทีละลำดับและแสดงผลออกมา

ผลลัพธ์

iPhone 11
iPhone 12
iPhone 14
iPhone 15
vivo V29 5G
OPPO Reno 10 Pro

ใช้ลูป for เข้าถึงอักขระใน String

เนื่องจากข้อมูลประเภท String เป็นข้อมูลประเภท iterable object เก็บข้อมูลเป็นลำดับของอักขระ ดังนั้น เราจึงสามารถใช้ลูป for เพื่อวนเข้าถึงอักขระแต่ละตัวใน String ได้ ดังตัวอย่าง

for x in "www.crub.com":
    print(x)
  • จากตัวอย่าง เราใช้ลูป for วนเข้าถึงอักขระทุกตัวในข้อความ "www.dcrub.com" โดยแต่ละรอบให้พักข้อมูลไว้ที่ตัวแปร x แล้วแสดงผลออกมา

ได้ผลลัพธ์ดังนี้

w
w
w
.
c
r
u
b
.
c
o
m

ออกจากลูปกลางคันด้วยคำสั่ง break

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

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

phones = ["iPhone 11", "iPhone 12", "iPhone 14", "iPhone 15", "vivo V29 5G", "OPPO Reno 10 Pro"]
for x in phones:
    if x.startswith("i"):
        print(x)
    else:
        break
  • บรรทัดที่ 1 สร้างข้อมูลประเภท List ขึ้นมา 1 ชุด เก็บรายการ Smart Phone พักข้อมูลไว้ที่ตัวแปร phones
  • บรรทัดที่ 2 ใช้ลูป for วนเข้าถึงข้อมูลในตัวแปร phones โดยทุกรอบให้พักข้อมูลไว้ที่ตัวแปร x
  • บรรทัดที่ 3-6 ตรวจสอบว่าข้อมูลในแต่ละลำดับที่เข้าถึงเริ่มต้นด้วยตัวอักษร “i” หรือไม่ ถ้าใช่ ให้แสดงผลออกมา แต่ถ้าไม่ใช่ ให้ออกจากลูปทันที ไม่ต้องทำงานต่อ

ผลลัพธ์ จะได้ข้อมูล 4 ลำดับแรกซึ่งขึ้นต้นด้วยตัวอักษร “i” ข้อมูลลำดับถัดไปขึ้นต้นด้วยตัวอักษร “v” ไม่เข้าเงื่อนไข จึงไม่แสดงผล และออกจากลูปทันที ไม่ทำงานต่อ

iPhone 11
iPhone 12
iPhone 14
iPhone 15

อีกตัวอย่างหนึ่ง

phones = ["iPhone 11", "iPhone 12", "iPhone 14", "iPhone 15", "vivo V29 5G", "OPPO Reno 10 Pro"]
for x in phones:
    if x == ("iPhone 15"):
        print("มี iPhone 15 อยู่ในรายการสินค้า")
        break
  • บรรทัดที่ 2 ใช้ลูป for เข้าถึงข้อมูลในตัวแปร phones ทีละลำดับ โดยพักข้อมูลไว้ที่ตัวแปร x
  • บรรทัดที่ 3 -5 ตรวจสอบดูว่าข้อมูลที่เข้าถึงใช่ iPhone 15 หรือไม่
    • ถ้าใช่ ให้แสดงคำว่า “มี iPhone 15 อยู่ในรายการสินค้า” แล้วออกจากลูปทันที

ผลลัพธ์

มี iPhone 15 อยู่ในรายการสินค้า

ข้ามการทำงานในลูปด้วยคำสั่ง continue

คำสั่ง continue ใช้สำหรับกระโดดข้ามหรือหยุดการทำงานในรอบปัจจุบันแล้วข้ามไปรอบถัดไป ดังตัวอย่าง

phones = ["iPhone 11", "iPhone 12", "iPhone 14", "iPhone 15", "vivo V29 5G", "OPPO Reno 10 Pro"]
for x in phones:
    if x == ("iPhone 15"):
        continue
    print(x)
  • บรรทัดที่ 3-5 ตรวจสอบดูว่าในแต่ละรอบ ข้อมูลที่เข้าถึงเป็น “iPhone 15” หรือไม่
    • ถ้าใช่ ให้ข้ามไปเลย ไม่ต้องทำอะไร
    • แต่ถ้าไม่ใช่ ให้แสดงผลออกมา

ผลลัพธ์ จะแสดลผลเป็นข้อมูลทุกลำดับที่ไม่ใช่ “iPhone 15”

iPhone 11
iPhone 12
iPhone 14
vivo V29 5G
OPPO Reno 10 Pro

ใช้ฟังก์ชัน range() ร่วมกับลูป for

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

  • ฟังก์ชัน range() จะคืนค่าเป็นช่วงตัวเลขตั้งแต่ 0 บวกขึ้นเรื่อย ๆ จนครบจำนวนที่ระบุ -1 ไม่ใช่ 0 ถึงจำนวนที่ระบุ เช่น range(10) จะคืนค่าเป็นช่วงตัวเลข ตั้งแต่ 0 ถึง 10 ลบ 1 (เท่ากับ 9) ไม่ใช่ 0 ถึง 10

ตัวอย่างการใช้ฟังก์ชัน range() ร่วมกับลูป for

for x in range(10):
  print(x)
  • บรรทัดที่ 1-2 ใช้ลูป for วนเข้าถึงข้อมูลในช่วงตัวเลขที่ได้จากฟังก์ชัน range() และแสดงผลข้อมูลที่เข้าถึงออกทางหน้าจอจนครบทุกตัว

จะได้ผลลัพธ์เป็นตัวเลข 0 ถึง 10 ลบ 1 (0 ถึง 9)

0
1
2
3
4
5
6
7
8
9

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

range(_start, _stop)
  • _start คือ ค่าเริ่มต้น
  • _stop คือ ค่าสิ้นสุด (ไม่รวม)
for x in range(2, 10):
    print(x)
  • บรรทัดที่ 1-2 วนลูปเข้าถึงข้อมูลในช่วงตัวเลขตั้งแต่ 2 ถึง 10 ลบ 1 แล้วแสดงผลออกมาทางหน้าจอ

จะได้ผลลัพธ์เป็นตัวเลข 2 – 9 เพราะเราระบุค่าเริ่มต้นเป็น 2 และค้าสิ้นสุดเป็น 10

2
3
4
5
6
7
8
9

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

range(_start, _stop, _step)
  • _start คือ ค่าเริ่มต้น
  • _stop คือ ค่าสิ้นสุด (ไม่รวม)
  • _step คือ ค่าที่ต้องการให้เพิ่มในแต่ละรอบ (ค่าเริ่มต้นเป็น 1)
for x in range(2, 10, 2):
    print(x)
  • บรรทัดที่ 1-2 วนลูปเข้าถึงข้อมูลในช่วงตัวเลขตั้งแต่ 2 ถึง 10 ลบ 1 แล้วแสดงผลออกมาทางหน้าจอ โดยแต่ละรอบ ให้เพิ่มค่าตัวเลขขึ้นทีละ 2

จะได้ผลลัพธ์เป็นตัวเลขเริ่มจาก 2 และเพิ่มขึ้นทีละ 2 จนถึงตัวเลขสุดท้ายที่มีค่าน้อยกว่าหรือเท่ากับ 10 ลบ 1

2
4
6
8

ใช้คีย์เวิร์ด else ในลูป for

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

phones = ["iPhone 11", "iPhone 12", "iPhone 14", "iPhone 15", "vivo V29 5G", "OPPO Reno 10 Pro"]
for x in phones:
    print(x)
else:
    print("สิ้นสุดลูป for แล้ว")
  • บรรทัดที่ 2-3 ใช้ลูป for วนเข้าถึงข้อมูลทุกตัวในตัวแปร phones แล้วแสดงผลออกทางหน้าจอ
  • บรรทัดที่ 4-5 เมื่อสิ้นสุดการทำงานของลูป for แล้ว ให้แสดงข้อความ “สิ้นสุดลูป for แล้ว”

ผลลัพธ์

iPhone 11
iPhone 12
iPhone 14
iPhone 15
vivo V29 5G
OPPO Reno 10 Pro
สิ้นสุดลูป for แล้ว

แต่ถ้าในลูป for มีคำสั่ง break และลูปหยุดการทำงานด้วยคำสั่ง break คำสั่งในบล็อก else จะไม่ทำงาน ดังตัวอย่าง

phones = ["iPhone 11", "iPhone 12", "iPhone 14", "iPhone 15", "vivo V29 5G", "OPPO Reno 10 Pro"]
for x in phones:
    if x == ("iPhone 15"):
        break
    print(x)
else:
    print("สิ้นสุดลูป for แล้ว")

จากตัวอย่าง คำสั่งในบรรทัดที่ 6-7 จะไม่มีผล เพราะลูปถูกหยุดการทำงานกลางคัน

ผลลัพธ์

iPhone 11
iPhone 12
iPhone 14

ลูปซ้อนลูป

เราสามารถใช้ลูป for ซ้อนกันได้หลายชั้น โดยลูปชั้นในจะทำงาน 1 ครั้งในแต่ละรอบของลูปชั้นนอก ดังตัวอย่าง

colors = ["Red", "Green", "Gold"]
phones = ["iPhone 12", "iPhone 14", "iPhone 15"]
for x in colors:
    for y in phones:
        print(x, y)
  • บรรทัดที่ 1-2 สร้างตัวแปรขึ้นมา 2 ตัว คือ
    • ตัวแปร colors เก็บชื่อสีในรูปแบบ List
    • ตัวแปร phones เก็บชื่อ iPhone ในรูปแบบ List
  • บรรทัดที่ 3 วันลูปเข้าถึงค่าในตัวแปร colors ทุกค่า โดยพักข้อมูลไว้ที่ตัวแปร x
  • บรรทัดที่ 4 ในแต่ละรอบการทำงานของลูปในบรรทัดที่ 3 วนลูปเข้าถึงค่าทุกค่าในตัวแปร phones โดยพักข้อมูลไว้ที่ตัวแปร y
  • บรรทัดที่ 5 แสดงผลที่เก็บอยู่ในตัวแปร x และ y ออกทางหน้าจอ

ผลลัพธ์

Red iPhone 12
Red iPhone 14
Red iPhone 15
Green iPhone 12
Green iPhone 14
Green iPhone 15
Gold iPhone 12
Gold iPhone 14
Gold iPhone 15

ใช้คำสั่ง pass ในลูป for

เราไม่สามารถสร้างลูป for ขึ้นมาเฉย ๆ โดยไม่มีการทำงานใด ๆ ในลูปได้ เพราะจะทำให้เกิดข้อผิดพลาดขึ้น

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

phones = ["iPhone 12", "iPhone 14", "iPhone 15", "vivo V29 5G", "OPPO Reno 10 Pro"]
for x in phones:
    pass

จากตัวอย่าง ภายในลูป for ไม่มีการทำงานใด ๆ จึงวางคำสั่ง pass ไว้ก่อน ทำให้เวลารันโค้ดจะไม่เกิดข้อผิดพลาด