
เขียนโปรแกรมภาษา 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
ไว้ก่อน ทำให้เวลารันโค้ดจะไม่เกิดข้อผิดพลาด