6: Function

6-2: Function Definition

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

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

จงเขียนฟังก์ชัน to_celsius(f) ที่รับอุณหภูมิในหน่วยองศาฟาเรนไฮต์ เพื่อแปลงและคืนผลกลับเป็นอุณหภูมิในหน่วยองศาเซลเซียส

def to_celsius( f ): return (f - 32)*5/9 func = Ex().check_function_def('to_celsius', missing_msg="ไม่พบฟังก์ชัน to\_celsius") func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์แค่ตัวเดียว') func.check_correct( multi( check_call("to_celsius(32)").has_equal_value(incorrect_msg="ได้ผลไม่ถูกต้อง เช่น เมื่อ f = 32"), check_call("to_celsius(0)").has_equal_value(incorrect_msg="ได้ผลไม่ถูกต้อง เช่น เมื่อ f = 0"), check_call("to_celsius(212)").has_equal_value(incorrect_msg="ได้ผลไม่ถูกต้อง เช่น เมื่อ f = 212") ), check_body().has_code("return", not_typed_msg="น่าจะต้องมี return ในฟังก์ชันนะ") )
แบบฝึกหัด 6-2 ข้อที่ 2

จงเขียนฟังก์ชัน triangle_area รับพารามิเตอร์สามตัวแทนความยาวด้านทั้งสามของสามเหลี่ยม ฟังก์ชันนี้คำนวณและคืนพื้นที่ของสามเหลี่ยมเป็นผลลัพธ์ หมายเหตุ: สามเหลี่ยมที่มีความยาวด้านทั้งสามเป็น \(a\), \(b\) และ \(c\) จะมีพื้นที่เท่ากับ \(\sqrt{s(s-a)(s-b)(s-c)}\) โดยที่ \(s=\frac{a+b+c}{2}\)

def triangle_area(a, b, c): s = (a+b+c)/2 area = (s*(s-a)*(s-b)*(s-c))**0.5 return area func = Ex().check_function_def('triangle_area', missing_msg="ไม่พบฟังก์ชัน triangle\_area") func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์ 3 ตัว') for v in ["3,4,5", "3,3,3", "7,7,3"]: func.check_call("triangle_area("+str(v)+")").\ has_equal_value(incorrect_msg = "ผิด เช่น " + v +", ดูสูตรการคำนวณพื้นที่สามเหลี่ยมในโจทย์")
แบบฝึกหัด 6-2 ข้อที่ 3

จงเขียนฟังก์ชัน is_prime รับจำนวนเต็มบวกเป็นพารามิเตอร์หนึ่งตัว ฟังก์ชันนี้ทดสอบและคืนผลว่าจำนวนเต็มที่รับมาเป็นจำนวนเฉพาะหรือไม่ ถ้าเป็น ก็คืนจริง ถ้าไม่เป็นจำนวนเฉพาะ ก็คืนเท็จ

def is_prime(n): if n == 1: return False for k in range(2, n): if n%k == 0: return False return True func = Ex().check_function_def('is_prime', missing_msg="ไม่พบฟังก์ชัน is\_prime") func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์ตัวเดียว') for n in [1,2,997,9851,38021]: func.check_call("is_prime("+str(n)+")").\ has_equal_value(incorrect_msg = "ผิด เช่น " + str(n))
1 ไม่ใช่จำนวนเฉพาะ, N เป็นจำนวนเฉพาะ ก็เมื่อ N หารด้วย 1 และตัวเองลงตัวเท่านั้น
แบบฝึกหัด 6-2 ข้อที่ 4

กำหนดให้มีฟังชัน is_prime(n) ซึ่งทดสอบว่า n เป็นจำนวนเฉพาะหรือไม่ ให้ใช้แล้ว จงเขียนฟังก์ชัน is_twin_prime ที่รับจำนวนเต็มบวก 2 จำนวน มาตรวจสอบว่า จำนวนเต็มทั้งสองเป็น twin primes หรือไม่ หมายเหตุ: a กับ b เป็น twin primes ก็เมื่อ a กับ b ต่างกัน 2 พอดี และทั้งคู่เป็นจำนวนเฉพาะ เช่น 3 กับ 5, 13 กับ 11 เป็นต้น

def is_prime(n): if n == 1: return False for k in range(2, n): if n%k == 0: return False return True def is_twin_prime(p1,p2): return abs(p1-p2)==2 and \ is_prime(p1) and \ is_prime(p2) func = Ex().check_function_def('is_twin_prime', missing_msg="ไม่พบฟังก์ชัน is\_twin\_prime") func.has_equal_part_len('args', 'ฟังก์ชันนี้รับพารามิเตอร์ตัวเดียว') # แปลกข้างล่างนี้ใช้ func.check_body().check_function("is_prime") ไม่ได้ func.check_body().has_code("is_prime", not_typed_msg="น่าจะใช้ is_prime ให้เป็นประโยชน์") for v in ["17, 19", "139, 137", "61, 63", "49, 47", "619, 617"]: func.check_call("is_twin_prime("+str(v)+")").\ has_equal_value(incorrect_msg = "ผิด เช่น " + str(v))