จงเขียนฟังชัน 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 ไม่ถูกต้อง")
จงเขียนฟังชัน 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))
จงเขียนฟังชัน 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)+")")