วิทย์โปรแกรมมิ่งม.3 สัปดาห์ที่ผ่านมาผมเฉลยการบ้านที่ให้เด็กๆไปดัดแปลงฟังก์ชั่นเลือกคู่แบบ n/e ให้หาว่าโอกาสที่จะเลือกคู่ที่แย่ที่สุดเป็นเท่าไร พบว่าลดโอกาสไป 2-3 เท่าเมื่อเทียบกับการสุ่มเลือกครับ วิธีดัดแปลงก็เพียงพิมพ์เพิ่มไปสี่บรรทัดเพื่อนับจำนวนครั้งที่เลือกคนที่แย่ที่สุด ส่วนที่เปลี่ยนแปลงคือส่วนที่ไฮไลท์ไว้ในรูปครับ (โหลดไฟล์จากสัปดาห์ที่แล้วแล้วพิมพ์เพิ่มเข้าไปเองได้ครับ):
ผลที่ได้ ตัวเลขคือ (จำนวนคนที่คบได้, คนที่ลองคบแต่ยังไม่เลือก, ความน่าจะเป็นที่จะเลือกคนดีที่สุด, ความน่าจะเป็นที่จะเลือกคนแย่ที่สุด):
จากนั้นผมก็แนะนำให้เด็กๆรู้จักฟังก์ชั่นต่างๆในโมดูล random ของไพธอน เห็น randrange(), randint(), choice(), shuffle(), sample(), random(), uniform()
ผมแสดงให้เด็กๆเห็นว่าเราสามารถประมาณค่า π ด้วยการเลือกจุดสุ่มๆหลายๆจุดในสี่เหลี่ยมจตุรัสขนาด 2×2 แล้วนับว่าจุดไหนห่างจากศูนย์กลางไม่เกิน 1 ซึ่งแปลว่าจุดนั้นตกอยู่ในวงกลมรัศมี 1 อัตราส่วนจำนวนจุดที่ตกในวงกลมรัศมี 1 ต่อจำนวนจุดที่สุ่มในสี่เหลี่ยมจตุรัส 2×2 จะเท่ากับพื้นที่วงกลมรัศมี 1 ต่อพื้นที่สี่เหลี่ยม 2×2 = π/4 เราจึงประมาณค่า π อย่างนี้ได้ครับ
ผมสอนเด็กๆเรื่องการสุ่มตัวอย่าง (sampling) จากประชากรทั้งหมด และพยายามหาประมาณค่าเฉลี่ยของประชากรจากค่าเฉลี่ยจากกลุ่มตัวอย่าง และการบ้านให้ไปลองสุ่มตัวอย่างจากประชากรที่ผมให้ไปครับ