Functions — แบบฝึกทบทวน
. . .
Note
ครอบคลุม: def · parameter/return · นิยามก่อนเรียก · คืนหลายค่า · return หลายแห่ง · Scope (local/global) ทบทวนเนื้อหาเต็มได้ที่ Module 9 👈
เลือกคำตอบที่ถูกต้อง — เฉลยจะปรากฏเมื่อกดถัดไป
คีย์เวิร์ดใดใช้นิยามฟังก์ชัน ใน Python?
A. func
B. def
C. function
D. define
Tip
ตอบ: B — def function_name(parameters): แล้วย่อหน้าเขียนโค้ดของฟังก์ชัน
คำสั่ง return ทำหน้าที่อะไร?
A. พิมพ์ค่าออกจอ
B. ส่งค่าผลลัพธ์คืนให้โค้ดที่เรียกใช้
C. รับค่าจากผู้ใช้
Tip
ตอบ: B — return = เอาต์พุต ของฟังก์ชัน ส่งค่ากลับไปยังจุดที่เรียก (ต่างจาก print ที่แค่แสดงผล)
ใน def f(x, y): — x และ y คืออะไร?
A. ผลลัพธ์
B. พารามิเตอร์ (อินพุต) ของฟังก์ชัน
C. ตัวแปร global
Tip
ตอบ: B — parameter_list คือข้อมูลที่ต้องส่งให้ฟังก์ชัน (อินพุต) และเป็นตัวแปร local
ในไฟล์โปรแกรม การนิยามฟังก์ชันต้องอยู่ตรงไหนเทียบกับการเรียกใช้?
A. ที่ไหนก็ได้
B. ก่อนบรรทัดที่เรียกใช้เสมอ
C. หลังบรรทัดที่เรียกใช้
Important
ตอบ: B — ต้องนิยามก่อนบรรทัดที่เรียก (หลักการเดียวกับประกาศตัวแปรก่อนใช้)
ฟังก์ชันคืนค่า 2 ค่าได้อย่างไร? return sm, avg
A. คืนได้ค่าเดียวเท่านั้น
B. return sm, avg แล้วรับด้วย s, a = f(...)
C. ต้องเขียน 2 ฟังก์ชัน
Tip
ตอบ: B — return sm, avg คืนได้หลายค่า รับพร้อมกันด้วย s, a = mySumAvg(...)
ตัวแปร local (ประกาศในฟังก์ชัน) เรียกใช้ได้ที่ไหน?
A. ทุกที่ในโปรแกรม
B. เฉพาะภายในฟังก์ชันที่สร้างมัน
C. เฉพาะหลังฟังก์ชัน
Important
ตอบ: B — local ใช้ได้เฉพาะในขอบเขตที่สร้าง และถูกทำลายเมื่อฟังก์ชันจบ — เรียกใช้นอกฟังก์ชัน → NameError
ฟังก์ชันที่มี return หลายแห่ง จะจบการทำงานเมื่อใด?
A. รันครบทุก return
B. จบทันทีที่พบ return ตัวแรกที่ทำงานถึง
C. จบที่บรรทัดสุดท้ายเสมอ
Tip
ตอบ: B — พบ return เมื่อไร ฟังก์ชันจบและส่งค่าคืนทันที บรรทัดที่เหลือไม่ถูกรัน
โค้ดจะพิมพ์อะไร? — ทายก่อน แล้วกดถัดไปดูเฉลย
Tip
ผลลัพธ์: 107.0 — 100 * 1.07 = 107.0 (ค่าที่ return ถูกเก็บใน total แล้ว print)
Important
ผลลัพธ์: 26 — area(2,3)=6, area(4,5)=20 → ค่าที่ return ถูกส่งเข้า total(6, 20) = 26 (ฟังก์ชันเรียกใช้ฟังก์ชันอื่นได้)
Tip
ผลลัพธ์: A B F — แต่ละครั้งฟังก์ชันจบทันทีที่พบ return ที่เงื่อนไขเป็นจริงเป็นครั้งแรก
global กับ local — ตัวไหนเปลี่ยน ตัวไหนไม่เปลี่ยน
พิมพ์อะไร 3 บรรทัด?
Important
ผลลัพธ์:
10
in f: 3
10
x ในฟังก์ชันเป็น local (คนละตัวกับ global x) → global x ยังเป็น 10 เหมือนเดิม
Tip
ผลลัพธ์:
10
26
ในฟังก์ชัน x = 10+3 = 13 → คืน 26 · global x เปลี่ยนตอน x = f(x) นอกฟังก์ชัน → 26
โค้ดผิดตรงไหน — ทำไม
ผิดตรงไหน?
Important
ผิด: เรียกใช้ area() ก่อนนิยาม → NameError (ยังไม่รู้จักฟังก์ชัน) แก้: ย้าย def area(r): ... ขึ้นไปก่อนบรรทัดที่เรียกใช้
ได้ error — ผิดตรงไหน?
Important
ผิด: result เป็นตัวแปร local ของ square → เรียกใช้นอกฟังก์ชันไม่ได้ (NameError) แก้: ให้ฟังก์ชัน return result แล้วรับค่าไว้ใช้ เช่น x = square(4)
เติมโค้ดในช่อง ____ แล้วกด Run
เติมโค้ดนิยามฟังก์ชัน area_circle ที่รับ r แล้วคืนค่า พื้นที่ (\(3.14 r^2\))
เติมโค้ดให้ฟังก์ชันคืน 2 ค่า (ผลรวมและค่าเฉลี่ย) แล้วรับพร้อมกัน
เติมโค้ดให้ myGrade คืนเกรดตามเงื่อนไข (>=80→A, >=50→B, นอกนั้น→F)
Note
ทบทวน: if-elif-else (Module 5)
ฝึกเพิ่ม — local vs global คือจุดที่พลาดบ่อยสุด
num เป็นเท่าไร?
Important
ผลลัพธ์: 5 — n เป็น local ของฟังก์ชัน การเพิ่มค่าเกิดกับ n ไม่ใช่ num · แถมไม่ได้เก็บค่าที่ return → num คงเดิม (ถ้าอยากเปลี่ยนต้อง num = add_one(num))
Tip
ผลลัพธ์:
in: 10
out: 0
count ในฟังก์ชันเป็น local คนละตัว กับ global count → global ยังเป็น 0
ผิดตรงไหน?
Important
ผิด: a เป็น local ของ f → ใน g ไม่รู้จัก → NameError แก้: ส่งค่าเข้าไปเป็น parameter เช่น def g(a): return a
ห่อสูตรวิศวกรรมเป็นฟังก์ชันเรียกใช้ซ้ำ
เติมฟังก์ชันพลังงานจลน์ \(E_k = \tfrac12 m v^2\)
Tip
ผลลัพธ์: 220 — โมเมนต์ \(M = F \times d\) · เรียกฟังก์ชันเดิมซ้ำ 2 จุด (แรง 50 ที่ 2 m + แรง 30 ที่ 4 m)
เติมโค้ดฟังก์ชันหาพื้นที่วงกลม \(A = \pi r^2\) (ใช้ \(\pi \approx 3.14\))
เขียนฟังก์ชันที่มี algorithm อยู่ข้างใน
เติมสูตรวนซ้ำ \(x \leftarrow \dfrac{x + a/x}{2}\) (ลู่เข้าหา \(\sqrt{a}\))
Important
ผลลัพธ์: (1, 9) — ไล่ทุกค่า อัปเดต lo/hi เอง (ไม่ใช้ min/max) แล้ว คืน 2 ค่า
ทบทวนเนื้อหาเต็มได้ที่ Module 9 · ไปต่อ Module 10
🏠 259201 — Module 9 ทบทวน | ภาควิชาวิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเชียงใหม่