Module 8 — ทบทวน (Review)

Iterations and Collections — แบบฝึกทบทวน

ทบทวน Module 8 📝

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

. . .

Note

ครอบคลุม: วนลูปบน collection · range(len()) · enumerate() · วนบน dict · collection หลายมิติ ทบทวนเนื้อหาเต็มได้ที่ Module 8 👈

Multiple Choice 🔘

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

คำถาม #1

for x in [10, 20, 30]: ตัวแปร x ได้ค่าใดในแต่ละรอบ?

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

Tip

ตอบ: B — วน for บน list ได้ ค่าสมาชิกโดยตรง

คำถาม #2

enumerate(['a', 'b']) ให้ข้อมูลในรูปแบบใด?

A. (0, 'a'), (1, 'b')
B. 'a', 'b'
C. 0, 1

Tip

ตอบ: Aenumerate() ให้คู่ (index, value)

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

d = {"a": 1, "b": 2}
for k in d:
    print(k)

พิมพ์อะไร?

A. 1 แล้ว 2
B. a แล้ว b
C. ('a',1)

Important

ตอบ: B — วน for บน dict โดยตรง จะได้ key (ไม่ใช่ value)

คำถาม #4

ต้องการวนเอา ทั้ง key และ value จาก dict ใช้คำสั่งใด?

A. d.keys()
B. d.values()
C. d.items()

Tip

ตอบ: Cfor k, v in d.items(): ได้ทั้ง key และ value

คำถาม #5

for i in range(len(data)): ใช้เพื่ออะไร?

A. วนตาม index ของ data
B. วนตามค่าใน data
C. นับจำนวน

Tip

ตอบ: Arange(len(data)) ให้ index 0..len-1 เพื่อเข้าถึง data[i]

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

students = [{"name":"A","score":80}, {"name":"B","score":90}]students[1]["score"] คือค่าใด?

A. 80
B. 90
C. "B"

Tip

ตอบ: Bstudents[1] = dict ตัวที่สอง แล้ว ["score"] = 90

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

for i, x in enumerate(["p", "q"]): ในรอบแรก i และ x เป็นอะไร?

A. i=0, x="p"
B. i=1, x="p"
C. i="p", x=0

Tip

ตอบ: Aenumerate เริ่ม index ที่ 0 → รอบแรก i=0, x="p"

คำถาม #8

วนลูปบน Set ได้หรือไม่ และได้อะไร?

A. ไม่ได้ — Set ไม่ใช่ sequence จึงวน loop ไม่ได้
B. ได้ — ได้สมาชิกทีละตัว (ไม่รับประกันลำดับ)
C. ได้ — และลำดับตรงกับที่ใส่เข้าไปเสมอ

Tip

ตอบ: Bfor x in my_set: วนได้ แต่ Set ไม่มีลำดับ จึงไม่รับประกันลำดับที่ออกมา

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

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

เติมคำ #9

วนบน list โดยตรง เพื่อพิมพ์สมาชิกทีละตัว

fruits = ["apple", "banana", "cherry"]
for f in fruits:
    print(f)
apple
banana
cherry

เติมคำ #10

ใช้ enumerate() พิมพ์ ลำดับ + ค่า

names = ["Ann", "Bob", "Cat"]
for i, name in enumerate(names):
    print(i, name)
0 Ann
1 Bob
2 Cat

เติมคำ #11

วนเอา key และ value จาก dict ด้วย .items()

scores = {"math": 80, "eng": 75}
for k, v in scores.items():
    print(f"{k}: {v}")
math: 80
eng: 75

เติมคำ #12

หา ผลรวมคะแนน โดยวนบน list

scores = [80, 90, 70]
total = 0
for s in scores:
    total += s
print(total)
240

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

คำนวณ ค่าเฉลี่ยคะแนน จาก List of Dict

students = [
    {"name": "A", "score": 80},
    {"name": "B", "score": 90},
]
total = 0
for s in students:
    total += s["score"]
print(total / len(students))
85.0

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

นับจำนวนคนที่ สอบผ่าน (score ≥ 50) ด้วย for + if

scores = [45, 80, 30, 60, 90]
count = 0
for s in scores:
    if s >= 50:
        count += 1
print(count)
3

ทำนายผล 🔮

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

ทำนายผล #15

for i, x in enumerate(["p", "q", "r"]):
    print(i, x)

Tip

ผลลัพธ์:

0 p
1 q
2 r

enumerate() ให้คู่ (index, value) เริ่ม index ที่ 0

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

d = {"a": 1, "b": 2}
for k in d:
    print(k, end=" ")

Important

ผลลัพธ์: a b — วน for บน dict โดยตรง จะได้ key (ไม่ใช่ value) · อยากได้ทั้งคู่ใช้ .items()

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

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

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

scores = [45, 80, 30, 60]
count = 0
for s in scores:
    if s >= 50:
        count += 1

เติมค่า count หลังพิจารณาแต่ละ s

s s >= 50 count
45 ? ?
80 ? ?
30 ? ?
60 ? ?

Tip

s s >= 50 count
45 เท็จ 0
80 จริง 1
30 เท็จ 1
60 จริง 2

นับได้ 2 คน ที่คะแนน ≥ 50

หา Bug 🐞

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

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

d = {"a": 1, "b": 2}
for k, v in d:          # อยากได้ทั้ง key และ value
    print(k, v)

ผิดตรงไหน?

Important

ผิด: วน for k, v in d ตรง ๆ ไม่ได้ (dict ให้ทีละ key) → ValueError แก้: for k, v in d.items(): เพื่อได้คู่ (key, value)

เจาะจุดยาก: เข้าถึงข้อมูลหลายชั้น 🎯

ฝึกเพิ่ม — nested access & วน dict

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

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

Important

ผลลัพธ์: 6 7m[1] = [4,5,6] แล้ว [2] = 6 · m[2] = [7,8,9] แล้ว [0] = 7

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

d = {"a": 1, "b": 2}
for k, v in d.items():
    print(k, v * 10)

Tip

ผลลัพธ์:

a 10
b 20

.items() ให้คู่ (key, value) → คำนวณ v*10 แต่ละรอบ

Engineering Application 🔧

วนลูปประมวลผลข้อมูลการวัดหลายชุด

Engineering #21

data = [{"id": 1, "value": 3.5},
        {"id": 2, "value": 4.1}]
for d in data:
    print(d["id"], d["value"])

Tip

ผลลัพธ์:

1 3.5
2 4.1

วน list ของ dict — เข้าถึงแต่ละ record ด้วย key

Engineering #22

เติมเงื่อนไขนับจำนวนค่าที่ เกินพิกัด (> 50)

readings = [12, 55, 48, 70, 33]
count = 0
for r in readings:
    if r > 50:
        count += 1
print(count)
2

Engineering #23: กำลังไฟรวมของอุปกรณ์

เติม key ให้รวมกำลังไฟ (W) ของทุกอุปกรณ์

devices = [{"name": "A", "watt": 60},
           {"name": "B", "watt": 100}]
total = 0
for d in devices:
    total += d["watt"]
print(total, "W")
160 W

ท้าทาย 🔥

รวม loop + dict + เงื่อนไข เป็นอัลกอริทึมจริง

ท้าทาย #24: นับความถี่

นับว่าแต่ละตัวปรากฏกี่ครั้ง เก็บใน dict — เติมโค้ด

items = ["a", "b", "a", "c", "a", "b"]
count = {}
for x in items:
    if x in count:
        count[x] += 1
    else:
        count[x] = 1
print(count)
{'a': 3, 'b': 2, 'c': 1}

ท้าทาย #25: หา key ที่ค่ามากสุด

scores = {"A": 80, "B": 95, "C": 88}
best = ""
high = -1
for k, v in scores.items():
    if v > high:
        high = v
        best = k
print(best)

Important

ผลลัพธ์: B — ไล่ทุกคู่ เก็บ key ที่ค่าสูงสุดไว้ใน best (95 ของ B ชนะ)

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

ไม่มี ____ ให้เติม · เลือกเองว่าจะวนแบบไหน และเก็บผลลง collection อะไร

เขียนเอง #26: จัดกลุ่มนักศึกษาตามเกรด

มี list ของ dict (ชื่อ + คะแนน) จงสร้าง dict of list ที่ key เป็นเกรด และ value เป็นรายชื่อคนในเกรดนั้น เกณฑ์: ≥80→A · ≥70→B · ≥60→C · ≥50→D · ต่ำกว่านั้น→F

คิดก่อน: วนแต่ละคน → หาเกรดด้วย if-elif → ถ้า key ยังไม่มีใน dict ต้องสร้าง [] ว่างก่อน แล้วค่อย append

students = [{"name": "Ann", "score": 82}, {"name": "Bee", "score": 55},
            {"name": "Cat", "score": 90}, {"name": "Dan", "score": 48},
            {"name": "Eve", "score": 73}, {"name": "Fay", "score": 66}]
groups = {}
for s in students:
    sc = s["score"]
    if sc >= 80:   g = "A"
    elif sc >= 70: g = "B"
    elif sc >= 60: g = "C"
    elif sc >= 50: g = "D"
    else:          g = "F"
    if g not in groups:
        groups[g] = []
    groups[g].append(s["name"])
print(groups)
{'A': ['Ann', 'Cat'], 'D': ['Bee'], 'F': ['Dan'], 'B': ['Eve'], 'C': ['Fay']}

เขียนเอง #27: วิชาที่คะแนนเฉลี่ยสูงสุด

มี dict of list: key เป็นชื่อวิชา, value เป็น list ของคะแนน จงหาวิชาที่ค่าเฉลี่ยสูงสุด พร้อมค่าเฉลี่ย

คิดก่อน: วนทุก key คำนวณ sum(...) / len(...) แล้วเก็บตัวที่มากสุดไว้ (เทคนิค running max — จำ “ตัวที่ดีที่สุดจนถึงตอนนี้”)

scores = {"Math": [80, 90, 70], "Physics": [60, 65, 55], "Coding": [95, 88, 92]}
best = None
best_avg = -1
for subj in scores:
    avg = sum(scores[subj]) / len(scores[subj])
    if avg > best_avg:
        best_avg = avg
        best = subj
print(best, round(best_avg, 2))
Coding 91.67

จบการทบทวน 🎉

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