for loop (Control Structure 3) — แบบฝึกทบทวน
. . .
Note
ครอบคลุม: range() · for · ลูปวนบน collection · ลูปซ้อน (nested for) · break/continue ทบทวนเนื้อหาเต็มได้ที่ Module 7 👈
เลือกคำตอบที่ถูกต้อง — เฉลยจะปรากฏเมื่อกดถัดไป
range(5) สร้างลำดับเลขใด?
A. 1,2,3,4,5
B. 0,1,2,3,4
C. 0,1,2,3,4,5
Tip
ตอบ: B — range(n) เริ่มที่ 0 ถึง n-1 (ไม่รวม n)
range(2, 5) สร้างลำดับเลขใด?
A. 2,3,4
B. 2,3,4,5
C. 3,4,5
Tip
ตอบ: A — range(start, stop) = start ถึง stop-1
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)
for i in range(3): วนทำงานกี่รอบ?
A. 2
B. 3
C. 4
Tip
ตอบ: B — range(3) = 0,1,2 → วน 3 รอบ
for x in [10, 20, 30]: ในแต่ละรอบ x มีค่าเป็นอะไร?
A. index (0,1,2)
B. ค่าสมาชิกแต่ละตัว (10,20,30)
C. ทั้ง index และค่าสมาชิกพร้อมกัน
Tip
ตอบ: B — for วนบน list จะได้ ค่าสมาชิกโดยตรง (ไม่ใช่ index)
ควรใช้ for แทน while เมื่อใด?
A. รู้จำนวนรอบที่แน่นอน / วนบน collection
B. ไม่รู้ว่าจะวนกี่รอบ
C. ทุกกรณี — for และ while สลับกันได้เสมอโดยไม่มีข้อแตกต่าง
Tip
ตอบ: A — for เหมาะกับ จำนวนรอบที่ทราบ หรือวนบนข้อมูลใน collection
พิมพ์ทั้งหมดกี่บรรทัด?
A. 5
B. 6
C. 3
Important
ตอบ: B — ลูปซ้อน: รอบนอก 2 × รอบใน 3 = 6 บรรทัด
len(range(1, 10, 2)) มีค่าเท่าใด? (1,3,5,7,9)
A. 4
B. 5
C. 9
Tip
ตอบ: B — ได้ 1,3,5,7,9 → 5 ตัว
เติมโค้ดในช่อง ____ แล้วกด Run
พิมพ์เลข 1 ถึง 5 ด้วย for + range()
หา ผลรวม ของเลข 1 ถึง 10
พิมพ์เลขคู่ 0 ถึง 8 โดยใช้ step ของ range()
นับ ถอยหลัง จาก 5 ถึง 1 ด้วย range() (step ติดลบ)
วนบน list โดยตรง เพื่อหาผลรวมคะแนน
ลูปซ้อน — พิมพ์ตาราง i,j ขนาด 2×2
โค้ดจะพิมพ์อะไร? — ทายก่อน แล้วกดถัดไปดูเฉลย
Tip
ผลลัพธ์: 1 3 5 7 9 — range(1, 10, 2) เริ่มที่ 1 ก้าวทีละ 2 (ไม่รวม 10)
Important
ผลลัพธ์: 0 1 10 11 — รอบนอก i=0,1 · รอบใน j=0,1 → 0,1 แล้ว 10,11
ไล่ค่าตัวแปรทีละรอบของลูป
เติมค่า 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
โค้ดผิดตรงไหน — ทำไม
ผิดตรงไหน?
Important
ผิด: ลืม : ท้ายบรรทัด for → SyntaxError แก้: for i in range(5): แล้วย่อหน้าบรรทัดถัดไป
ได้ 1 2 3 4 — ขาด 5 ผิดตรงไหน?
Important
ผิด: range(1, 5) ไม่รวม 5 (หยุดที่ stop-1) แก้: range(1, 6) เพื่อให้ได้ถึง 5
ฝึกเพิ่ม — ลูปซ้อนและลำดับการทำงาน
พิมพ์คู่ (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 บรรทัด)
Tip
ผลลัพธ์: 9 — รอบนอก 3 × รอบใน 3 = ทำ total += 1 ทั้งหมด 9 ครั้ง
break ออกจากลูปไหน? พิมพ์อะไร?
Important
ผลลัพธ์: 0 0 · 1 0 · 2 0 — break ออกจาก ลูปในเท่านั้น (รอบนอกยังทำต่อ) — จุดที่เข้าใจผิดบ่อย
ใช้ for วนคำนวณข้อมูลเชิงวิศวกรรม
Tip
ผลลัพธ์: 650 ohm — ตัวต้านทานต่ออนุกรม รวมค่าได้ \(R = R_1 + R_2 + R_3\)
เติมโค้ดหาระยะทาง \(s = \tfrac12 a t^2\) ในแต่ละวินาที (\(a = 10\))
เติมโค้ดหาค่าเฉลี่ยอุณหภูมิที่วัดได้
โจทย์คลาสสิก & bug ที่ซ่อนลึก
พิมพ์อะไร? (ระวังลำดับ elif)
Important
ผลลัพธ์: 1 2 Fizz 4 Buzz Fizz 7 — หาร 3 ลงตัว → Fizz, หาร 5 → Buzz · ต้องเช็ก %15 ก่อน ไม่งั้นไม่มีวันเจอ FizzBuzz
อยากได้ 10 แต่ได้ 4 — ผิดตรงไหน?
Important
ผิด: total = 0 อยู่ในลูป → ถูกรีเซ็ตทุกรอบ เหลือแค่ค่าสุดท้าย แก้: ย้าย total = 0 ออกไปก่อนลูป
ไม่มี ____ ให้เติม · ออกแบบเองว่าต้องซ้อนลูปกี่ชั้น และวางเงื่อนไข/break ตรงไหน
นับว่ามี จำนวนเฉพาะ กี่ตัวในช่วง 2 ถึง n (จำนวนเฉพาะ = หารลงตัวด้วย 1 และตัวมันเองเท่านั้น)
คิดก่อน: ลูปนอกไล่ผู้สมัคร k · ลูปในลองหาตัวหารตั้งแต่ 2 ถึง k-1 — เจอตัวหารเมื่อไรใช้ break แล้วตั้งธง (flag) ว่า “ไม่ใช่จำนวนเฉพาะ”
หาชุด (a, b, c) ทั้งหมดที่ a ≤ b ≤ c ≤ n และ a² + b² = c² (เช่น 3 4 5)
คิดก่อน: ลูป 3 ชั้น · ให้ b เริ่มที่ a และ c เริ่มที่ b เพื่อไม่ให้ได้ชุดซ้ำหรือสลับที่กัน
ทบทวนเนื้อหาเต็มได้ที่ Module 7
🏠 259201 — Module 7 ทบทวน | ภาควิชาวิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเชียงใหม่