Module 7

for loop (Control Structure 3)

วันนี้เราจะเรียนรู้ 🚀

  1. ทบทวนส่วนประกอบของการทำซ้ำ
  2. range() function — สร้างลำดับตัวเลข
  3. for statement
  4. Nested loop (ลูปซ้อน)
  5. break และ continue ในลูปซ้อน
print("Multiplication Table")
n = int(input("Enter n: "))
col = 5
for i in range(1, 13):
    print(f"{i*n:4}", end="")
    if i % col == 0:
        print()

ทบทวนส่วนประกอบของการทำซ้ำ 🔁

การทำซ้ำมี 3 ส่วนประกอบเสมอ

ส่วนประกอบของการทำซ้ำ

ส่วนประกอบของการทำซ้ำ มี 3 ส่วน

  1. การทดสอบเงื่อนไข (Condition testing)
    • ทดสอบเงื่อนไขในการทำซ้ำ ว่ายังเป็นจริง (True) หรือไม่
    • วนเข้าไปทำซ้ำในคำสั่งที่กำหนด หากเงื่อนไขยังเป็น True
    • จบการทำซ้ำ เมื่อผลการทดสอบเงื่อนไขเป็น False
    • เช่น x<10, x>-5, x<=99, ans!="y"
  2. การกำหนดค่าเริ่มต้น (Initialization)
    • กำหนดค่าตั้งต้นให้กับตัวแปร ซึ่งจะใช้เป็นเงื่อนไขในการทำงาน
    • เช่น x=0, y=100, ans="n"
  3. การปรับปรุงค่า (Update: Increment / Decrement / Input)
    • เพิ่มค่า (Increment) หรือลดค่า (Decrement) ของตัวแปรซึ่งใช้เป็นเงื่อนไข รวมถึงการรับค่าจาก input ใหม่
    • เช่น x=x+1, x+=10, x-=1, ans = input()

range() function 📏

สร้างลำดับตัวเลขจำนวนเต็มไว้ล่วงหน้า

range() function

จากส่วนประกอบทั้งสามของการทำซ้ำ ซึ่งเป็นรูปแบบที่ใช้คู่กับคำสั่ง while ดังตัวอย่างที่พิมพ์เลข 1 3 5 7

i = 1         # Initialization (START)
while i < 9:  # Condition testing (STOP)
    print(i, end=" ")
    i += 2    # Increment/Decrement (STEP)
  • ตัวแปร i เก็บค่าตัวเลขที่เป็นลำดับ ซึ่งถูกเปลี่ยนค่าไปในแต่ละรอบของลูป
  • ฟังก์ชัน range() สามารถสร้างลำดับเลขเดียวกันนี้ (1 3 5 7) ไว้ล่วงหน้าได้
range(1, 9, 2)

Important

ฟังก์ชัน range() ใช้สร้างลำดับตัวเลขจำนวนเต็มเท่านั้น

range() แบบที่ 1

ค่าแรกเริ่มที่ START เพิ่มค่าขึ้นทีละ STEP โดยค่าสุดท้ายคือค่าจำนวนเต็มก่อนถึงค่า STOP (ไม่รวม STOP)

range(START, STOP, STEP)

ตัวอย่าง: range(5, 20, 2) ได้ลำดับ 5, 7, 9, 11, 13, 15, 17, 19

(START=5, STOP=20, STEP=2)

เห็นภาพ: range() ทำงานยังไง

range(1, 9, 2) — เริ่มที่ START ก้าวทีละ STEP จนก่อนถึง STOP (ไม่รวม STOP)

START 1 +2 3 +2 5 +2 7 +2 9 STOP (ไม่รวม)

ได้ลำดับ 1, 3, 5, 7 — ค่า 9 (STOP) ถูกตัดทิ้ง ไม่รวมในลำดับ

range() ↔︎ Slice: โครงเดียวกัน

range() ใช้ start : stop : step แบบเดียวกับ slice ที่เคยเรียนกับ List — และ ไม่รวม STOP เหมือนกัน!

Slice — ตัดช่วงจาก list ที่มีอยู่

data[1:9:2]
data = [0,1,2,3,4,5,6,7,8,9]
print(data[1:9:2])
[1, 3, 5, 7]

range() — สร้างลำดับเลขใหม่

range(1, 9, 2)
print(list(range(1, 9, 2)))
[1, 3, 5, 7]

start · stop (ไม่รวม) · step — เหมือนกันทั้งคู่!

Note

โจทย์ #1a

จงใช้ range() สร้างลำดับเลข 2, 6, 10, 14, 18

a = range(2, 20, 4)
print(a)
print(list(a))
range(2, 20, 4)
[2, 6, 10, 14, 18]

โจทย์ #1b

จงใช้ range() สร้างลำดับเลข 10, 7, 4

Tip

คิดก่อน: ลำดับนี้ค่าลดลง → STEP ต้องเป็นค่าใด?

print(list(range(10, 1, -3)))
[10, 7, 4]

range() แบบที่ 2

ค่าแรกเริ่มที่ START เพิ่มค่าขึ้นทีละ 1 (STEP=1) ไปจนถึงค่าจำนวนเต็มก่อนถึงค่า STOP (ไม่รวม STOP)

range(START, STOP)

ตัวอย่าง: range(3, 6) คือ 3, 4, 5

(START=3, STOP=6, STEP=1)

โจทย์ #1c

จงใช้ range() โดยละการกำหนด STEP ในการสร้างลำดับเลข 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

print(list(range(1, 10+1)))
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

range() แบบที่ 3

ค่าแรกเริ่มที่ 0 (START=0) เพิ่มค่าขึ้นทีละ 1 (STEP=1) ไปจนถึงค่าจำนวนเต็มก่อนถึงค่า STOP (ไม่รวม STOP)

range(STOP)

ตัวอย่าง: range(6) คือ 0, 1, 2, 3, 4, 5

โจทย์ #1d

จงใช้ range() โดยละการกำหนด START และ STEP ในการสร้างลำดับเลข 0, 1, 2, ..., 10

print(list(range(10+1)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

จำนวนค่าที่ได้

จำนวนค่าที่ได้จากคำสั่ง range() คำนวณได้จากสูตร

\[ \text{จำนวนค่า} = \bigg\lceil\frac{\text{STOP} - \text{START}}{\text{STEP}}\bigg\rceil \]

โดย \(\lceil\cdot\rceil\) หมายถึงปัดขึ้น เช่น

  • range(2,20,4) ได้ \(\lceil\frac{20-2}{4}\rceil = 5\)
  • range(2,20,3) ได้ \(\lceil\frac{20-2}{3}\rceil = 6\)
  • range(10,1,-3) ได้ \(\lceil\frac{1-10}{-3}\rceil = 3\)

ตรวจสอบจำนวนค่าได้ด้วย len()

for statement 🔂

ทำซ้ำตามลำดับค่า (iterable)

คำสั่ง for

for เป็นคำสั่งที่ใช้ในการทำซ้ำ แต่มีรูปแบบการใช้ต่างจาก while

  • นิยมใช้เมื่อทราบจำนวนรอบของการทำซ้ำล่วงหน้า
  • สามารถใช้ทดแทน while statement ได้
  • จำนวนรอบถูกกำหนดด้วย iterable (ลำดับค่าที่ไล่ดึงเป็นลำดับได้) ซึ่งอาจสร้างจาก range(), เป็น list หรือ str ก็ได้
for i in iterable:
    statement1
    statement2
    ...
next-statement
  • iterable ได้แก่ range(10), [5,6,7,8,9], "Engineer" เป็นต้น
  • ตัวแปร i รับค่าจาก iterable รอบละ 1 ค่า ตามลำดับ จนครบทุกค่า

เห็นภาพ: for ดึงค่าทีละตัว

for i in [10, 20, 30]: — ตัวแปร i รับค่าจาก iterable รอบละ 1 ค่า ตามลำดับ

iterable = [10, 20, 30] รอบ 1 i = 10 ถัดไป รอบ 2 i = 20 ถัดไป รอบ 3 i = 30 จบ ทำ statement ทำ statement ทำ statement

ครบทุกค่าใน iterable แล้ว → ออกจากลูป (ไม่ต้องเขียน i += 1 เอง!)

for กับส่วนประกอบของลูป

ส่วน Initialization, Condition, และ Update ของลูป for แฝงตัวอยู่ในบรรทัด for i in iterable

เทียบกับแผนภาพของลูป while จะได้ว่า

for — 3 ส่วนซ่อนในบรรทัดเดียว

for i in range(1, n+1, 1):
  • 🟢 START = initi เริ่มที่ 1
  • 🔵 STOP = cond — วนขณะ i < n+1
  • 🟠 STEP = updatei รับค่าถัดไป

while — เขียนแยก 3 ส่วน

i = 1
while i <= n:
    print(i)
    i += 1

สีเดียวกัน = ส่วนเดียวกันfor แค่ย่อ 3 ส่วนไว้บรรทัดเดียว

Note

ทบทวน: while-loop (Module 6)

โจทย์ #2: พิมพ์ 1 ถึง n

โปรแกรมแสดงเลข 1 ถึง n ด้วย while เป็นดังนี้

n = int(input("Enter n: "))
i = 1
while i <= n:
    print(i, end=" ")
    i += 1

จงเขียนโปรแกรมที่ให้ผลลัพธ์เดียวกัน โดยใช้คำสั่ง for

คิดก่อน: ต้องสร้างลำดับ 1, 2, ..., n ด้วย range() อย่างไร?

print("Counting from 1 to n")
n = int(input("Enter n: "))     # สมมติป้อน 10
for i in range(1, n+1):         # [1, 2, 3, ..., n]
    print(i, end=" ")
Counting from 1 to n
1 2 3 4 5 6 7 8 9 10

โจทย์ #2: ส่วนประกอบที่ยังคงอยู่

โปรแกรมที่ใช้ลูป for ยังคงส่วนประกอบ ดังนี้

  • Initialization: i = 1
  • Condition: i <= n
  • Update: i += 1

Note

ส่วนประกอบเหล่านี้แฝงในคำสั่ง for i in range(1, n+1) จึงต้องอาศัยการตีความ

โจทย์ #3: สูตรคูณแม่ n

โปรแกรมแสดงสูตรคูณแม่ n (\(1\times n\) ถึง \(12\times n\)) ด้วย while

n = int(input("Enter n: "))
i = 1
col = 5
while i < 13:
    print(f"{i*n:4}", end="")
    if i % col == 0:
        print()
    i += 1

จงเขียนโปรแกรมที่ให้ผลลัพธ์เดียวกัน โดยใช้คำสั่ง for (พิมพ์ขึ้นบรรทัดใหม่ทุก 5 ค่า)

print("Multiplication Table")
n = int(input("Enter n: "))     # สมมติป้อน 4
col = 5
for i in range(1, 13):
    print(f"{i*n:4}", end="")
    if i % col == 0:
        print()
Multiplication Table
   4   8  12  16  20
  24  28  32  36  40
  44  48

โจทย์ #3: ส่วนประกอบที่ยังคงอยู่

โปรแกรมที่ใช้ลูป for ยังคงส่วนประกอบ ดังนี้

  • Initialization: i = 1
  • Condition: i < 13
  • Update: i += 1

โจทย์ #4: ผลบวกกำลังสองของเลขคี่

หาผลบวกกำลังสองของเลขคี่ระหว่าง 1 ถึง n

\[ \text{Sum} = n^2 + (n-2)^2 + ... + 5^2 + 3^2 + 1^2 \]

โปรแกรมเดิมเขียนด้วย while (ไล่ค่า n ลงมาทีละ 1)

จงเขียนใหม่โดยใช้ลูป for ที่ไล่ค่าจาก n ลงมาถึง 1

print("Sum of squared odd numbers between 1 - n")
n = int(input("Enter n: "))     # สมมติป้อน 10
Sum = 0
print("Odd number n(n^2):")
for i in range(n, 0, -1):       # i = n, n-1, ..., 1
    if i % 2 == 1:
        print(f"{i}({i**2}) ", end="")
        Sum += i**2
print("\nSummation:", Sum)
Sum of squared odd numbers between 1 - n
Odd number n(n^2):
9(81) 7(49) 5(25) 3(9) 1(1)
Summation: 165

โจทย์ #4: ส่วนประกอบที่ยังคงอยู่

โปรแกรมที่ใช้ลูป for มีส่วนประกอบ ดังนี้

  • Initialization: i = n (n = input())
  • Condition: i > 0
  • Update: i -= 1

โจทย์ #5a: ค่าเฉลี่ย

จงเขียนโปรแกรมหาค่าเฉลี่ย (Average) ของข้อมูล n ตัว

\[ \text{avg} = \frac{\text{Sum}}{n} = \frac{\text{data}_1 + \text{data}_2 + ... + \text{data}_n}{n} \]

สร้างตัวแปร Sum = 0.0

วนลูป for รับค่า data แต่ละตัว (แปลงเป็น float) แล้วบวกทบ Sum

คิดก่อน: คำนวณค่าเฉลี่ยจาก Sum และ n อย่างไร?

n = int(input("Enter n: "))
Sum = 0.0
for i in range(n):           # [0,1,2,...,n-1]
    data = float(input(f"[{Sum:7.4f}], Data({i+1}): "))
    Sum += data
avg = Sum / n
print(f" sum: {Sum:.4f},  avg: {avg:.4f}")
Enter n: 3
[ 0.0000], Data(1): 10
[10.0000], Data(2): 20
[30.0000], Data(3): 30
 sum: 60.0000,  avg: 20.0000

ลูปซ้อน (Nested loop) 🪆

ลูปภายในลูป — ลูปในจบก่อน ลูปนอกจบทีหลัง

รูปแบบของลูปซ้อน

หัวข้อที่ผ่านมาใช้ลูปเพียงชั้นเดียว ในทางปฏิบัติสามารถเรียกใช้แบบลูปซ้อนกันได้ ทั้ง while และ for ผสมกัน

while condition1:
    statement1
    while condition2:
        statement2
    next_statement1
next_statement2
while condition:
    statement1
    for i in iterable:
        statement2
    next_statement1
next_statement2
for i in iterable:
    statement1
    while condition:
        statement2
    next_statement1
next_statement2
for i in iterable1:
    statement1
    for j in iterable2:
        statement2
    next_statement1
next_statement2

เห็นภาพ: ลูปซ้อนวิ่งยังไง

for i in range(1,4): (นอก) · for j in range(1,4): (ใน) → ลูปในวิ่งครบ ก่อนลูปนอกขยับ 1 ขั้น

j=1 j=2 j=3 i=1 i=2 i=3 (1,1)1 (1,2)2 (1,3)3 (2,1)4 (2,2)5 (2,3)6 (3,1)7 (3,2)8 (3,3)9

🔴 เลขในวงกลม = ลำดับการทำงาน (1→9) · แต่ละแถว (สี) = ลูปใน j วิ่งครบก่อน ลูปนอก i จึงเปลี่ยนแถว

โจทย์ #5b: ค่าเฉลี่ยหลายชุด

จากโจทย์ #5a จงเพิ่มความสามารถให้คำนวณค่าเฉลี่ยได้หลายชุด

เมื่อคำนวณค่าเฉลี่ย 1 ชุดเสร็จ ให้รับค่า n ใหม่เพื่อคำนวณชุดถัดไป (ไม่ออกโปรแกรม)

หากค่า n ที่รับมาเป็น n <= 0 ให้จบการทำงาน

คิดก่อน: จะนำโค้ดจาก #5a มาครอบด้วยลูปอะไร? เงื่อนไขใด?

n = int(input("Enter n: "))
while n > 0:                    # outer loop
    Sum = 0.0
    for i in range(n):          # inner loop
        data = float(input(f"[{Sum:7.4f}], Data({i+1}): "))
        Sum += data
    avg = Sum / n
    print(f" sum: {Sum:.4f}, avg: {avg:.4f}")
    n = int(input("Enter n: "))
print("See you later ... ")
Enter n: 3
[ 0.0000], Data(1): 10
[10.0000], Data(2): 20
[30.0000], Data(3): 30
 sum: 60.0000, avg: 20.0000
Enter n: 2
[ 0.0000], Data(1): 200
[200.0000], Data(2): 100
 sum: 300.0000, avg: 150.0000
Enter n: -1
See you later ...

โจทย์ #5b: ส่วนประกอบที่ใช้วนลูป

Outer while-loop

  • Initialization: n = input()
  • Condition: n > 0
  • Update: n = input()

Inner for-loop

  • Initialization: i = 0
  • Condition: i < n
  • Update: i += 1

โจทย์ #6: nested for

จงเขียนโปรแกรมพิมพ์อักษรภาพต่อไปนี้ โดยใช้ลูป for 2 อันซ้อนกัน

* 1 2 3 4 5 6 7
0 * 2 3 4 5 6 7
0 1 * 3 4 5 6 7
0 1 2 * 4 5 6 7
0 1 2 3 * 5 6 7
0 1 2 3 4 * 6 7
0 1 2 3 4 5 * 7
0 1 2 3 4 5 6 *

วิธีคิด: พิมพ์ให้จบทีละบรรทัด (ลูปใน ไล่คอลัมน์) แล้วขึ้นบรรทัดใหม่ทีละแถว (ลูปนอก ไล่แถว) — ตำแหน่งแนวทแยง (r == c) พิมพ์ * มิฉะนั้นพิมพ์เลขคอลัมน์ c

nrow, ncol = 8, 8
for r in range(nrow):
    for c in range(ncol):
        if r == c:
            print("*", end=" ")
        else:
            print(c, end=" ")
    print()
* 1 2 3 4 5 6 7
0 * 2 3 4 5 6 7
0 1 * 3 4 5 6 7
0 1 2 * 4 5 6 7
0 1 2 3 * 5 6 7
0 1 2 3 4 * 6 7
0 1 2 3 4 5 * 7
0 1 2 3 4 5 6 *

Note

ข้อสังเกต: ทุก 1 รอบของ outer loop จะมี inner loop ทำงาน ncol รอบ

โจทย์ #7: nested for with break

จากโจทย์ #6 จงดัดแปลงโดยใช้ break ให้พิมพ์เฉพาะส่วนสามเหลี่ยมล่าง (ค่าด้านขวาของ * หายไป)

*
0 *
0 1 *
0 1 2 *
0 1 2 3 *
0 1 2 3 4 *
0 1 2 3 4 5 *
0 1 2 3 4 5 6 *

วิธีคิด: หลังพิมพ์ * ภายใต้เงื่อนไข r == c ให้ break ออกจากลูปในทันที เพื่อไปขึ้นบรรทัดใหม่

nrow, ncol = 8, 8
for r in range(nrow):
    for c in range(ncol):
        if r == c:
            print("*", end=" ")
            break  # stop printing
        else:
            print(c, end=" ")
    print()
*
0 *
0 1 *
0 1 2 *
0 1 2 3 *
0 1 2 3 4 *
0 1 2 3 4 5 *
0 1 2 3 4 5 6 *

เห็นภาพ: break ในลูปซ้อน ออกแค่ลูปใน

break หยุด เฉพาะลูปใน (c) ของแถวนั้น — ลูปนอก (r) เดินต่อ ไปแถวถัดไป

c=0c=1c=2c=3 r=0r=1r=2r=3 *break ข้าม ข้าม ข้าม 0 *break ข้าม ข้าม 0 1 *break ข้าม 0 1 2 *break
  • 🟢 พิมพ์ค่า c
  • 🔴 เจอ r==c → พิมพ์ * แล้ว break
  • ⬜ ที่เหลือในแถว ถูกข้าม
  • 🔵 ลูปนอก r เดินต่อ ลงแถวถัดไป

สรุป: break ในลูปซ้อน ออกจากลูปในสุดชั้นเดียว ไม่ได้ออกทั้งหมด

โจทย์ #8: nested for with continue

จากโจทย์ #6 จงดัดแปลงโดยใช้ continue เพื่อข้ามการพิมพ์อักษร * (ดอกจันแนวทแยงหายไป)

1 2 3 4 5 6 7
0 2 3 4 5 6 7
0 1 3 4 5 6 7
0 1 2 4 5 6 7
0 1 2 3 5 6 7
0 1 2 3 4 6 7
0 1 2 3 4 5 7
0 1 2 3 4 5 6

วิธีคิด: ขณะวนลูปในและอยู่ภายใต้เงื่อนไข r == c ให้แทรก continue ก่อนที่จะพิมพ์ * ลูปในจะกลับไปรับค่า c ค่าใหม่ทันที

nrow, ncol = 8, 8
for r in range(nrow):
    for c in range(ncol):
        if r == c:
            continue # skip line
            print("*", end=" ")
        else:
            print(c, end=" ")
    print()
1 2 3 4 5 6 7
0 2 3 4 5 6 7
0 1 3 4 5 6 7
0 1 2 4 5 6 7
0 1 2 3 5 6 7
0 1 2 3 4 6 7
0 1 2 3 4 5 7
0 1 2 3 4 5 6

เห็นภาพ: continue ในลูปซ้อน ข้ามแค่รอบเดียว

continue ข้าม เฉพาะช่องแนวทแยง (r==c) — แถวยังพิมพ์ต่อจนครบ (ต่างจาก break)

c=0c=1c=2c=3 r=0r=1r=2r=3 ข้ามcontinue 1 2 3 0 ข้ามcontinue 2 3 0 1 ข้ามcontinue 3 0 1 2 ข้ามcontinue
  • 🟢 พิมพ์ค่า c ตามปกติ
  • 🟠 เจอ r==ccontinue ข้ามช่องนี้
  • ✅ ช่อง c ที่เหลือ ยังพิมพ์ต่อ

ต่างจาก break: break ตัดท้ายแถว · continue เว้นแค่ช่องเดียว

โจทย์ #9: nested loop with break + continue

จากโจทย์ #7 จงดัดแปลงโดยใช้ continue เพิ่ม เพื่อพิมพ์แถวเว้นแถว (ข้ามแถวที่ r เป็นเลขคี่)

*
0 1 *
0 1 2 3 *
0 1 2 3 4 5 *

วิธีคิด: สั่ง continue ที่ ลูปนอก แต่ก่อนลูปใน ถ้าค่า r เป็นเลขคี่ ให้ข้ามการพิมพ์ทั้งบรรทัด

nrow, ncol = 8, 8
for r in range(nrow):
    if r % 2 != 0:        # skip odd rows
        continue
    for c in range(ncol):
        if r == c:
            print("*", end=" ")
            break
        else:
            print(c, end=" ")
    print()
*
0 1 *
0 1 2 3 *
0 1 2 3 4 5 *

Important

break และ continue ใน Nested-Loop มีผลเฉพาะกับลูปที่มีคำสั่งนั้นเท่านั้น

เห็นภาพ: break + continue คนละระดับ

continue ที่ ลูปนอก → ข้ามทั้งแถว (แถวคี่) · break ที่ ลูปใน → ตัดท้ายแถว (แถวคู่)

r=0r=1r=2r=3r=4r=5r=6r=7 *← break ตัดท้ายแถว 0 1 *← break ตัดท้ายแถว 0 1 2 3 *← break ตัดท้ายแถว 0 1 2 3 4 5 *← break ตัดท้ายแถว ข้ามทั้งแถว — r คี่ → continue (ลูปนอก) ข้ามทั้งแถว — r คี่ → continue (ลูปนอก) ข้ามทั้งแถว — r คี่ → continue (ลูปนอก) ข้ามทั้งแถว — r คี่ → continue (ลูปนอก)

🟠 continue (ลูปนอก) จัดการ ระดับแถว · 🔴 break (ลูปใน) จัดการ ระดับคอลัมน์ — แต่ละคำสั่งมีผลเฉพาะลูปของตัวเอง

โจทย์ #9: ส่วนประกอบที่ใช้วนลูป

Outer for-loop (นับแถว)

  • Initialization: r = 0
  • Condition: r < nrow
  • Update: r += 1
  • Continue (skip): r คี่

Inner for-loop (นับคอลัมน์)

  • Initialization: c = 0
  • Condition: c < ncol
  • Update: c += 1
  • Break: r == c

พักสมอง 😄

ความฝัน vs ความจริงของการ automate ด้วยลูป

ที่มา: xkcd #1319 — “Automation” (CC BY-NC 2.5)

Summary 🎯

สรุป Module 7 🎉

range()

  • ใช้สร้างลำดับตัวเลขจำนวนเต็ม
  • range(START, STOP, STEP)
  • range(START, STOP)STEP=1
  • range(STOP)START=0, STEP=1
  • ไม่รวมค่า STOP
  • จำนวนค่า = \(\lceil\frac{\text{STOP}-\text{START}}{\text{STEP}}\rceil\)

for

  • ใช้แทน while ได้
  • นิยมใช้เมื่อทราบจำนวนรอบล่วงหน้า
  • รวม init / condition / update ไว้ด้วยกัน

Nested loop (ลูปซ้อน)

  • ผสม while / for ซ้อนกันได้
  • ลูปใน (Inner) จบก่อน
  • ลูปนอก (Outer) จบทีหลัง

break / continue

  • ใช้กับ nested loop ได้
  • มีผลเฉพาะลูปที่มีคำสั่งนั้น
  • break — ออกจากลูป
  • continue — ข้ามไปรอบถัดไป