Iterations and Collections — แบบฝึกทบทวน
. . .
Note
ครอบคลุม: วนลูปบน collection · range(len()) · enumerate() · วนบน dict · collection หลายมิติ ทบทวนเนื้อหาเต็มได้ที่ Module 8 👈
เลือกคำตอบที่ถูกต้อง — เฉลยจะปรากฏเมื่อกดถัดไป
for x in [10, 20, 30]: ตัวแปร x ได้ค่าใดในแต่ละรอบ?
A. index (0,1,2)
B. ค่าสมาชิก (10,20,30)
C. ทั้ง index และค่าสมาชิกพร้อมกันในทุก loop
Tip
ตอบ: B — วน for บน list ได้ ค่าสมาชิกโดยตรง
enumerate(['a', 'b']) ให้ข้อมูลในรูปแบบใด?
A. (0, 'a'), (1, 'b')
B. 'a', 'b'
C. 0, 1
Tip
ตอบ: A — enumerate() ให้คู่ (index, value)
พิมพ์อะไร?
A. 1 แล้ว 2
B. a แล้ว b
C. ('a',1) …
Important
ตอบ: B — วน for บน dict โดยตรง จะได้ key (ไม่ใช่ value)
ต้องการวนเอา ทั้ง key และ value จาก dict ใช้คำสั่งใด?
A. d.keys()
B. d.values()
C. d.items()
Tip
ตอบ: C — for k, v in d.items(): ได้ทั้ง key และ value
for i in range(len(data)): ใช้เพื่ออะไร?
A. วนตาม index ของ data
B. วนตามค่าใน data
C. นับจำนวน
Tip
ตอบ: A — range(len(data)) ให้ index 0..len-1 เพื่อเข้าถึง data[i]
students = [{"name":"A","score":80}, {"name":"B","score":90}] — students[1]["score"] คือค่าใด?
A. 80
B. 90
C. "B"
Tip
ตอบ: B — students[1] = dict ตัวที่สอง แล้ว ["score"] = 90
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
ตอบ: A — enumerate เริ่ม index ที่ 0 → รอบแรก i=0, x="p"
วนลูปบน Set ได้หรือไม่ และได้อะไร?
A. ไม่ได้ — Set ไม่ใช่ sequence จึงวน loop ไม่ได้
B. ได้ — ได้สมาชิกทีละตัว (ไม่รับประกันลำดับ)
C. ได้ — และลำดับตรงกับที่ใส่เข้าไปเสมอ
Tip
ตอบ: B — for x in my_set: วนได้ แต่ Set ไม่มีลำดับ จึงไม่รับประกันลำดับที่ออกมา
เติมโค้ดในช่อง ____ แล้วกด Run
วนบน list โดยตรง เพื่อพิมพ์สมาชิกทีละตัว
ใช้ enumerate() พิมพ์ ลำดับ + ค่า
วนเอา key และ value จาก dict ด้วย .items()
หา ผลรวมคะแนน โดยวนบน list
คำนวณ ค่าเฉลี่ยคะแนน จาก List of Dict
นับจำนวนคนที่ สอบผ่าน (score ≥ 50) ด้วย for + if
โค้ดจะพิมพ์อะไร? — ทายก่อน แล้วกดถัดไปดูเฉลย
Tip
ผลลัพธ์:
0 p
1 q
2 r
enumerate() ให้คู่ (index, value) เริ่ม index ที่ 0
Important
ผลลัพธ์: a b — วน for บน dict โดยตรง จะได้ key (ไม่ใช่ value) · อยากได้ทั้งคู่ใช้ .items()
ไล่ค่าตัวแปรทีละรอบของลูป
เติมค่า 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
โค้ดผิดตรงไหน — ทำไม
ผิดตรงไหน?
Important
ผิด: วน for k, v in d ตรง ๆ ไม่ได้ (dict ให้ทีละ key) → ValueError แก้: for k, v in d.items(): เพื่อได้คู่ (key, value)
ฝึกเพิ่ม — nested access & วน dict
Important
ผลลัพธ์: 6 7 — m[1] = [4,5,6] แล้ว [2] = 6 · m[2] = [7,8,9] แล้ว [0] = 7
Tip
ผลลัพธ์:
a 10
b 20
.items() ให้คู่ (key, value) → คำนวณ v*10 แต่ละรอบ
วนลูปประมวลผลข้อมูลการวัดหลายชุด
Tip
ผลลัพธ์:
1 3.5
2 4.1
วน list ของ dict — เข้าถึงแต่ละ record ด้วย key
เติมเงื่อนไขนับจำนวนค่าที่ เกินพิกัด (> 50)
เติม key ให้รวมกำลังไฟ (W) ของทุกอุปกรณ์
รวม loop + dict + เงื่อนไข เป็นอัลกอริทึมจริง
นับว่าแต่ละตัวปรากฏกี่ครั้ง เก็บใน dict — เติมโค้ด
Important
ผลลัพธ์: B — ไล่ทุกคู่ เก็บ key ที่ค่าสูงสุดไว้ใน best (95 ของ B ชนะ)
ไม่มี ____ ให้เติม · เลือกเองว่าจะวนแบบไหน และเก็บผลลง collection อะไร
มี 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']}
มี dict of list: key เป็นชื่อวิชา, value เป็น list ของคะแนน จงหาวิชาที่ค่าเฉลี่ยสูงสุด พร้อมค่าเฉลี่ย
คิดก่อน: วนทุก key คำนวณ sum(...) / len(...) แล้วเก็บตัวที่มากสุดไว้ (เทคนิค running max — จำ “ตัวที่ดีที่สุดจนถึงตอนนี้”)
ทบทวนเนื้อหาเต็มได้ที่ Module 8
🏠 259201 — Module 8 ทบทวน | ภาควิชาวิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเชียงใหม่