6: Function

6-5: Common Mistake

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

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

ฟังก์ชัน mean_sd ข้างล่างนี้หาค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐาน (ที่ทำงานได้ถูกต้องแล้ว ไม่ต้องแก้ไข) จงเขียนคำสั่งเพิ่มเติมเพื่อหาค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานของข้อมูลในลิสต์ x แสดงบรรทัดละค่า (แสดงค่าเฉลี่ยก่อน)

def mean_sd(x): mean = sum(x)/len(x) s2 = 0 for e in x: s2 += (e-mean)**2 sd = (s2/len(x))**0.5 return mean,sd # เขียนคำสั่งเพิ่มข้างล่างนี้ x = [1,2,2,3,2,3,2,3,2,3,2,3,2,2,3,2] # ไม่ปรับเปลี่ยนคำสั่งใด ๆ ในฟังก์ชันข้างล่างนี้ def mean_sd(x): mean = sum(x)/len(x) s2 = 0 for e in x: s2 += (e-mean)**2 sd = (s2/len(x))**0.5 return mean,sd x = [1,2,2,3,2,3,2,3,2,3,2,3,2,2,3,2] m,s = mean_sd(x) print(m) print(s) Ex().check_function("mean_sd", missing_msg="ควรใช้ mean\_sd ให้เป็นประโยชน์").\ check_args("x").has_equal_value(incorrect_msg="ส่งข้อมูลให้ mean\_sd ที่ถูกต้องด้วย") Ex().has_equal_output(incorrect_msg = "แสดงผลไม่ถูกต้อง ตรวจการเรียกใช้ฟังก์ชัน mean_sd และรับผลมาใช้ให้ถูกต้อง")
แบบฝึกหัด 6-5 ข้อที่ 2

ฟังก์ชัน mean_sd ข้างล่างนี้หาค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐาน (ที่ทำงานได้ถูกต้องแล้ว ไม่ต้องแก้ไข) จงเขียนคำสั่งเพิ่มเติมเพื่อหาค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานของข้อมูลในลิสต์ x แสดงบรรทัดละค่า (แสดงค่าเฉลี่ยก่อน)

# ไม่ปรับเปลี่ยนคำสั่งใด ๆ ในฟังก์ชันข้างล่างนี้ def mean_sd(x): mean = sum(x)/len(x) s2 = 0 for e in x: s2 += (e-mean)**2 print(mean) print((s2/len(x))**0.5) # เขียนคำสั่งเพิ่มข้างล่างนี้ x = [1,2,2,3,2,3,2,3,2,3,2,3,2,2,3,2] def mean_sd(x): mean = sum(x)/len(x) s2 = 0 for e in x: s2 += (e-mean)**2 print(mean) print((s2/len(x))**0.5) x = [1,2,2,3,2,3,2,3,2,3,2,3,2,2,3,2] mean_sd(x) Ex().check_function("mean_sd", missing_msg="ควรใช้ mean\_sd ให้เป็นประโยชน์").\ check_args("x").has_equal_value(incorrect_msg="ส่งข้อมูลให้ mean\_sd ที่ถูกต้องด้วย") Ex().has_equal_output(incorrect_msg = "แสดงผลไม่ถูกต้อง ตรวจการเรียกใช้ฟังก์ชัน mean_sd ให้ถูกต้อง") Ex().check_not(has_code(r"=\s*\mean_sd"), msg="เรียก mean_sd ไม่มีผลคืนกลับมา จึงไม่ควรต้องรับผล")
แบบฝึกหัด 6-5 ข้อที่ 3

ฟังก์ชัน factorial(n), is_digit(c) และ guess_my_number() ทำงานได้ดีพอสมควร แต่ยังผิดนิดหน่อย จงแก้ไขทั้งสามฟังก์ชันให้ถูกต้อง เพื่อให้การเรียกใช้ทั้งสามฟังก์ชันตามที่เขียนไว้ข้างล่างของโปรแกรม ทำงานได้ถูกต้อง

___inp___ = ["1234", "4321"] def input(): t = ___inp___.pop(0) ___inp___.append(t) return t # ฟังก์ชันทั้งสามข้างล่างนี้ มีอะไรบางอย่างแปลก ๆ # จงแก้ไขให้ถูกต้องเพื่อให้การเรียกใช้ที่แสดงข้างล่างนี้ถูกต้อง import random def factorial(n): f = 1 for i in range(2,n+1): f *= i def is_digit(c): if "0" <= c <= "9": return True def guess_my_number(): n = random.randint(1000, 9999) print("You have two tries to guess my number") win = False num_tries = 2 for k in range(num_tries): if k == num_tries-1: print("Your last chance") print("Enter a 4-digit number") k = int(input()) print(k) if n == k: print("Very lucky !!!, you're right") win = True break if not win: print("You lose") return True #------------------------------------------------ # ไม่ปรับเปลี่ยนคำสั่งใด ๆ ข้างล่างนี้ for k in range(10,15): print("factorial("+str(k)+") =", factorial(k)) #------------------------------------------------ t = "Python101" for c in t: print("is_digit("+c+") =", is_digit(c)) #------------------------------------------------ guess_my_number() #------------------------------------------------ import random def factorial(n): f = 1 for i in range(2,n+1): f *= i return f def is_digit(c): if "0" <= c <= "9": return True else: return False def guess_my_number(): n = random.randint(1000, 9999) print("You have two tries to guess my number") win = False num_tries = 2 for k in range(num_tries): if k == num_tries-1: print("Your last chance") print("Enter a 4-digit number") k = int(input()) print(k) if n == k: print("Very lucky !!!, you're right") win = True break if not win: print("You lose") #------------------------------------------------ # ไม่ปรับเปลี่ยนคำสั่งใด ๆ ข้างล่างนี้ for k in range(10,15): print("factorial("+str(k)+") =", factorial(k)) #------------------------------------------------ t = "Python101" for c in t: print("is_digit("+c+") =", is_digit(c)) #------------------------------------------------ guess_my_number() #------------------------------------------------ func = Ex().check_function_def('factorial', missing_msg="ไม่พบฟังก์ชัน factorial") func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์แค่ตัวเดียว') func.check_call("factorial(10)").has_equal_value(incorrect_msg="factorial ต้องคืนค่าแฟกตอเรียลเป็นผลลัพธ์") func = Ex().check_function_def('is_digit', missing_msg="ไม่พบฟังก์ชัน is\_digit") func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์แค่ตัวเดียว') for v in ['"A"', '"5"']: func.check_call("is_digit("+v+")").has_equal_value(incorrect_msg="is\_digit ต้องคืนไม่จริงก็เท็จ") func = Ex().check_function_def('guess_my_number', missing_msg="ไม่พบฟังก์ชัน guess\_my\_number") func.has_equal_part_len('args', 'ฟังก์ชันนี้ไม่รับพารามิเตอร์ใด ๆ') func.check_call("guess_my_number()").has_equal_value(incorrect_msg="guess\_my\_number ไม่ต้องคืนค่าใด ๆ")