Module 7 — ทบทวน (Review)

for loop (Control Structure 3) — แบบฝึกทบทวน

ทบทวน Module 7 📝

  • Multiple Choice — เลือกคำตอบที่ถูก แล้วกดถัดไปเพื่อดูเฉลย
  • เติมคำในช่องว่าง — ลองพิมพ์ใน Live Code แล้วรัน
  • ทำนายผล · ไล่ค่าตัวแปร · หา Bug — ฝึกอ่านโค้ดให้เข้าใจจริง

. . .

Note

ครอบคลุม: range() · for · ลูปวนบน collection · ลูปซ้อน (nested for) · break/continue ทบทวนเนื้อหาเต็มได้ที่ Module 7 👈

Multiple Choice 🔘

เลือกคำตอบที่ถูกต้อง — เฉลยจะปรากฏเมื่อกดถัดไป

คำถาม #1

range(5) สร้างลำดับเลขใด?

A. 1,2,3,4,5
B. 0,1,2,3,4
C. 0,1,2,3,4,5

Tip

ตอบ: Brange(n) เริ่มที่ 0 ถึง n-1 (ไม่รวม n)

คำถาม #2

range(2, 5) สร้างลำดับเลขใด?

A. 2,3,4
B. 2,3,4,5
C. 3,4,5

Tip

ตอบ: Arange(start, stop) = start ถึง stop-1

คำถาม #3

range(0, 10, 2) สร้างลำดับเลขใด?

A. 0,2,4,6,8
B. 0,2,4,6,8,10
C. 2,4,6,8

Tip

ตอบ: A — argument ตัวที่ 3 คือ step → ก้าวทีละ 2 (ไม่รวม 10)

คำถาม #4

for i in range(3): วนทำงานกี่รอบ?

A. 2
B. 3
C. 4

Tip

ตอบ: Brange(3) = 0,1,2 → วน 3 รอบ

คำถาม #5: ชวนคิด

for x in [10, 20, 30]: ในแต่ละรอบ x มีค่าเป็นอะไร?

A. index (0,1,2)
B. ค่าสมาชิกแต่ละตัว (10,20,30)
C. ทั้ง index และค่าสมาชิกพร้อมกัน

Tip

ตอบ: Bfor วนบน list จะได้ ค่าสมาชิกโดยตรง (ไม่ใช่ index)

คำถาม #6

ควรใช้ for แทน while เมื่อใด?

A. รู้จำนวนรอบที่แน่นอน / วนบน collection
B. ไม่รู้ว่าจะวนกี่รอบ
C. ทุกกรณี — for และ while สลับกันได้เสมอโดยไม่มีข้อแตกต่าง

Tip

ตอบ: Afor เหมาะกับ จำนวนรอบที่ทราบ หรือวนบนข้อมูลใน collection

คำถาม #7: ชวนคิด

for i in range(2):
    for j in range(3):
        print(i, j)

พิมพ์ทั้งหมดกี่บรรทัด?

A. 5
B. 6
C. 3

Important

ตอบ: B — ลูปซ้อน: รอบนอก 2 × รอบใน 3 = 6 บรรทัด

คำถาม #8: ชวนคิด

len(range(1, 10, 2)) มีค่าเท่าใด? (1,3,5,7,9)

A. 4
B. 5
C. 9

Tip

ตอบ: B — ได้ 1,3,5,7,95 ตัว

เติมคำในช่องว่าง ✏️

เติมโค้ดในช่อง ____ แล้วกด Run

เติมคำ #9

พิมพ์เลข 1 ถึง 5 ด้วย for + range()

for i in range(1, 6):
    print(i, end=" ")
1 2 3 4 5

เติมคำ #10

หา ผลรวม ของเลข 1 ถึง 10

total = 0
for i in range(1, 11):
    total += i
print(total)
55

เติมคำ #11

พิมพ์เลขคู่ 0 ถึง 8 โดยใช้ step ของ range()

for i in range(0, 9, 2):
    print(i, end=" ")
0 2 4 6 8

เติมคำ #12

นับ ถอยหลัง จาก 5 ถึง 1 ด้วย range() (step ติดลบ)

for i in range(5, 0, -1):
    print(i, end=" ")
5 4 3 2 1

เติมคำ #13

วนบน list โดยตรง เพื่อหาผลรวมคะแนน

scores = [10, 20, 30]
total = 0
for s in scores:
    total += s
print(total)
60

เติมคำ #14: ชวนคิด

ลูปซ้อน — พิมพ์ตาราง i,j ขนาด 2×2

for i in range(1, 3):
    for j in range(1, 3):
        print(f"({i},{j})", end=" ")
    print()
(1,1) (1,2)
(2,1) (2,2)

ทำนายผล 🔮

โค้ดจะพิมพ์อะไร? — ทายก่อน แล้วกดถัดไปดูเฉลย

ทำนายผล #15

for i in range(1, 10, 2):
    print(i, end=" ")

Tip

ผลลัพธ์: 1 3 5 7 9range(1, 10, 2) เริ่มที่ 1 ก้าวทีละ 2 (ไม่รวม 10)

ทำนายผล #16: ชวนคิด

for i in range(2):
    for j in range(2):
        print(i * 10 + j, end=" ")

Important

ผลลัพธ์: 0 1 10 11 — รอบนอก i=0,1 · รอบใน j=0,1 → 0,1 แล้ว 10,11

ไล่ค่าตัวแปร 🔍

ไล่ค่าตัวแปรทีละรอบของลูป

ไล่ค่าตัวแปร #17: ชวนคิด

total = 0
for i in range(1, 5):
    total += i

เติมค่า total หลังแต่ละรอบ

รอบ (i) total
1 ?
2 ?
3 ?
4 ?

Tip

รอบ (i) total
1 1
2 3
3 6
4 10

range(1, 5) = 1,2,3,4 → ผลรวม 10

หา Bug 🐞

โค้ดผิดตรงไหน — ทำไม

หา Bug #18

for i in range(5)
    print(i)

ผิดตรงไหน?

Important

ผิด: ลืม : ท้ายบรรทัด for → SyntaxError แก้: for i in range(5): แล้วย่อหน้าบรรทัดถัดไป

หา Bug #19: ชวนคิด

# อยากได้เลข 1 ถึง 5
for i in range(1, 5):
    print(i, end=" ")

ได้ 1 2 3 4 — ขาด 5 ผิดตรงไหน?

Important

ผิด: range(1, 5) ไม่รวม 5 (หยุดที่ stop-1) แก้: range(1, 6) เพื่อให้ได้ถึง 5

เจาะจุดยาก: Nested Loop 🎯

ฝึกเพิ่ม — ลูปซ้อนและลำดับการทำงาน

ไล่ค่าตัวแปร #20: ชวนคิด

for i in range(3):
    for j in range(2):
        print(i, j)

พิมพ์คู่ (i, j) ตามลำดับใด? เติมตาราง

ลำดับ i j
1 0 0
2 0 ?
3 1 ?

Tip

ลำดับ: 0 0 · 0 1 · 1 0 · 1 1 · 2 0 · 2 1 — รอบใน (j) วนครบก่อน แล้ว i ค่อยขยับ (รวม 3×2 = 6 บรรทัด)

ทำนายผล #21

total = 0
for i in range(1, 4):
    for j in range(1, 4):
        total += 1
print(total)

Tip

ผลลัพธ์: 9 — รอบนอก 3 × รอบใน 3 = ทำ total += 1 ทั้งหมด 9 ครั้ง

ทำนายผล #22: ชวนคิด

for i in range(3):
    for j in range(3):
        if j == 1:
            break
        print(i, j)

break ออกจากลูปไหน? พิมพ์อะไร?

Important

ผลลัพธ์: 0 0 · 1 0 · 2 0break ออกจาก ลูปในเท่านั้น (รอบนอกยังทำต่อ) — จุดที่เข้าใจผิดบ่อย

Engineering Application 🔧

ใช้ for วนคำนวณข้อมูลเชิงวิศวกรรม

Engineering #23: ตัวต้านทานอนุกรม

resistors = [100, 220, 330]
total = 0
for r in resistors:
    total += r
print(total, "ohm")

Tip

ผลลัพธ์: 650 ohm — ตัวต้านทานต่ออนุกรม รวมค่าได้ \(R = R_1 + R_2 + R_3\)

Engineering #24

เติมโค้ดหาระยะทาง \(s = \tfrac12 a t^2\) ในแต่ละวินาที (\(a = 10\))

a = 10
for t in range(0, 4):
    s = 0.5 * a * t ** 2
    print(t, s)
0 0.0
1 5.0
2 20.0
3 45.0

Engineering #25: เฉลี่ยอุณหภูมิ

เติมโค้ดหาค่าเฉลี่ยอุณหภูมิที่วัดได้

temps = [30, 32, 31, 29]
total = 0
for t in temps:
    total += t
print(total / len(temps))
30.5

ท้าทาย 🔥

โจทย์คลาสสิก & bug ที่ซ่อนลึก

ท้าทาย #26: FizzBuzz

for i in range(1, 8):
    if i % 15 == 0:   print("FizzBuzz", end=" ")
    elif i % 3 == 0:  print("Fizz", end=" ")
    elif i % 5 == 0:  print("Buzz", end=" ")
    else:             print(i, end=" ")

พิมพ์อะไร? (ระวังลำดับ elif)

Important

ผลลัพธ์: 1 2 Fizz 4 Buzz Fizz 7 — หาร 3 ลงตัว → Fizz, หาร 5 → Buzz · ต้องเช็ก %15 ก่อน ไม่งั้นไม่มีวันเจอ FizzBuzz

ท้าทาย #27: หา Bug — ผลรวมไม่ถูก

nums = [1, 2, 3, 4]
for n in nums:
    total = 0
    total += n
print(total)

อยากได้ 10 แต่ได้ 4 — ผิดตรงไหน?

Important

ผิด: total = 0 อยู่ในลูป → ถูกรีเซ็ตทุกรอบ เหลือแค่ค่าสุดท้าย แก้: ย้าย total = 0 ออกไปก่อนลูป

เขียนเอง: ลูปซ้อน + เงื่อนไข 🛠️

ไม่มี ____ ให้เติม · ออกแบบเองว่าต้องซ้อนลูปกี่ชั้น และวางเงื่อนไข/break ตรงไหน

เขียนเอง #28: นับจำนวนเฉพาะ

นับว่ามี จำนวนเฉพาะ กี่ตัวในช่วง 2 ถึง n (จำนวนเฉพาะ = หารลงตัวด้วย 1 และตัวมันเองเท่านั้น)

คิดก่อน: ลูปนอกไล่ผู้สมัคร k · ลูปในลองหาตัวหารตั้งแต่ 2 ถึง k-1 — เจอตัวหารเมื่อไรใช้ break แล้วตั้งธง (flag) ว่า “ไม่ใช่จำนวนเฉพาะ”

n = 30
count = 0
for k in range(2, n+1):
    is_prime = True
    for d in range(2, k):
        if k % d == 0:
            is_prime = False
            break
    if is_prime:
        count += 1
print(count)
10

เขียนเอง #29: หา Pythagorean triples

หาชุด (a, b, c) ทั้งหมดที่ a ≤ b ≤ c ≤ n และ a² + b² = c² (เช่น 3 4 5)

คิดก่อน: ลูป 3 ชั้น · ให้ b เริ่มที่ a และ c เริ่มที่ b เพื่อไม่ให้ได้ชุดซ้ำหรือสลับที่กัน

n = 20
for a in range(1, n+1):
    for b in range(a, n+1):
        for c in range(b, n+1):
            if a*a + b*b == c*c:
                print(a, b, c)
3 4 5
5 12 13
6 8 10
8 15 17
9 12 15
12 16 20

จบการทบทวน 🎉

ทบทวนเนื้อหาเต็มได้ที่ Module 7