6: Function

6-4: Modifying List Parameter

** ถ้าใช้งานบนมือถือหรือ tablet แนะนำให้ใช้ Chrome หรือ Safari เท่านั้น **

แบบฝึกหัด 6-4 ข้อที่ 1

จงเขียนฟังชัน fill(x,e) ที่รับ x เป็นลิสต์ และ e เป็นอะไรก็ได้ fill จะทำให้ทุกช่องใน x เก็บ e (fill ไม่คืนผลใด ๆ) (หมายเหตุ: หลีกเลี่ยงการใช้คำสั่ง return โดด ๆ เพราะตัวตรวจในปัจจุบันยังมีปัญหากับคำสั่งนี้)

# อย่าเปลี่ยนแปลงหัวฟังก์ชันข้างล่างนี้ def fill(x, e): # อย่าเปลี่ยนแปลงหัวฟังก์ชันข้างล่างนี้ def fill(x, e): for i in range(len(x)): x[i] = e func = Ex().check_function_def('fill', missing_msg="ไม่พบฟังก์ชัน fill") func.check_body().check_not(has_code(r"x\s*\="), msg="ไม่ควรเปลี่ยนค่าของ x, ควรเปลี่ยนแค่ค่าภายในลิสต์ x") func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์สองตัว') func.check_call("fill([9],0)").has_equal_value(incorrect_msg="ฟังก์ชันนี้ต้องไม่คืนอะไรเลย") for v in [[-1]*5, []]: func.check_body().set_context(v, 3).has_equal_value(name = "x", incorrect_msg = "ยังเติม e ใน x ไม่ถูกต้อง")
แบบฝึกหัด 6-4 ข้อที่ 2

จงเขียนฟังชัน clip(x) ที่รับ x เป็นลิสต์ของจำนวนเต็ม ฟังก์ชันนี้จะเปลี่ยนทุกข้อมูลใน x ที่ติดลบให้เป็น 0 และเปลี่ยนทุกตัวลิสต์ที่เกิน 255 ให้เป็น 255 (ฟังก์ชันนี้อาจเปลี่ยนค่าในลิสต์ x ที่รับมา ฟังก์ชันไม่คืนผลใด ๆ) (หมายเหตุ: หลีกเลี่ยงการใช้คำสั่ง return โดด ๆ เพราะตัวตรวจในปัจจุบันยังมีปัญหากับคำสั่งนี้)

# อย่าเปลี่ยนแปลงหัวฟังก์ชันข้างล่างนี้ def clip(x): def clip(x): for i in range(len(x)): if x[i] < 0: x[i] = 0 elif x[i] > 255: x[i] = 255 func = Ex().check_function_def('clip', missing_msg="ไม่พบฟังก์ชัน clip") func.check_body().check_not(has_code(r"x\s*\="), msg="ไม่ควรเปลี่ยนค่าของ x, ควรเปลี่ยนแค่ค่าภายในลิสต์ x") func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์ตัวเดียว') func.check_call("clip([1,2,3,4])").has_equal_value(incorrect_msg="ฟังก์ชันนี้ต้องไม่คืนอะไรเลย") for v in [[1,2,0,255], [2,-1,0,3,-4,256,1000]]: func.check_body().set_context(v).has_equal_value(name = "x", incorrect_msg = "ผิด เช่น กรณี x = " + str(v))
แบบฝึกหัด 6-4 ข้อที่ 3

จงเขียนฟังชัน replace(x,old,new,count) ที่รับ x เป็นลิสต์, old กับ new เป็นข้อมูลอะไรก็ได้ และ count เป็นจำนวนเต็ม ฟังก์ชันนี้จะเปลี่ยนข้อมูลใน x ที่มีค่า old ให้เป็น new เป็นจำนวนอย่างมาก count ตัว (นับจากซ้ายไปขวา) เช่น x = [1,2,3,3,3,2,3], replace(x,3,9,2) จะทำให้ x เปลี่ยนเป็น [1,2,9,9,3,2,3] (หมายเหตุ: หลีกเลี่ยงการใช้คำสั่ง return โดด ๆ เพราะตัวตรวจในปัจจุบันยังมีปัญหากับคำสั่งนี้)

# อย่าเปลี่ยนแปลงหัวฟังก์ชันข้างล่างนี้ def replace(x, old, new, count): def replace(x, old, new, count): c = 0; i = 0 while i < len(x) and c < count: if x[i] == old: x[i] = new c += 1 i += 1 func = Ex().check_function_def('replace', missing_msg="ไม่พบฟังก์ชัน replace") func.check_body().check_not(has_code(r"x\s*\="), msg="ไม่ควรเปลี่ยนค่าของ x, ควรเปลี่ยนแค่ค่าภายในลิสต์ x") func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์ 3 ตัว') func.check_call("replace([1],1,2,1)").has_equal_value(incorrect_msg="ฟังก์ชันนี้ต้องไม่คืนอะไรเลย") for v in [[[1,1,1,1],1,2,2], [[1,2,1,2,1,2,3],2,0,9]]: func.check_body().set_context(v[0],v[1],v[2],v[3]).has_equal_value(name = "x", incorrect_msg = "ยังแทนค่าใน x ไม่ถูกต้อง เช่น replace("+str(v)+")")