Category Archives: programming

วิทย์ม.ต้น: รู้จัก Simulation (การจำลองสถานการณ์ด้วยคอมพิวเตอร์) เพื่อตอบคำถามที่สนใจ

วันนี้เด็กๆม.ต้นรู้จักการพยายามตอบคำถามที่น่าสนใจแต่หาคำตอบตรงๆไม่เป็น จึงพยายามหาคำตอบด้วย simulation หรือการจำลองสถานการณ์ด้วยคอมพิวเตอร์ครับ

สมมุติว่ามีคนสองคนชื่อ A และ B มาเล่นเกมกัน แต่ละคนจะเลือกหัว (H) หรือก้อย (T) เรียงกันสามตัว เช่น A อาจเลือกก้อยหัวหัว (THH) และ B อาจเลือกหัวหัวหัว (HHH) จากนั้นผู้เล่นก็โยนเหรียญไปเรื่อยๆจนแบบที่เหรียญออกสามครั้งสุดท้ายตรงกับแบบที่ A หรือ B เลือกไว้ ถ้าตรงกับคนไหนคนนั้นก็ชนะ เช่นถ้าโยนเหรียญไปเรื่อยๆแล้วออก HHTHTTTHH จะพบว่าในการโยนแปดครั้งแรกยังไม่ตรงกับ THH หรือ HHH สักที แต่พอโยนครั้งที่ 9 ออก H ทำให้สามครั้งสุดท้ายเป็น THH ซึ่งตรงกับ A เลือกไว้ ในกรณีนี้ A ก็ชนะ

คำถามคือในกรณีเหล่านี้ใครจะมีโอกาสชนะมากกว่ากัน เป็นอัตราส่วนเท่าไร

  1. A เลือก THH, B เลือก HHT
  2. A เลือก HTT, B เลือก HHT

จริงๆเกมนี้เรียกว่า Penney’s Game และสามารถคำนวณด้วยวิธีความน่าจะเป็นได้ แต่ถ้าเราไม่รู้ว่าจะคำนวณอย่างไร เราสามารถจำลองการเล่นเกมนี้หลายๆครั้งแล้วนับจำนวนครั้งที่แต่ละคนชนะก็ได้

หน้าตาฟังก์ชั่นโยนเหรียญไปเรื่อยๆจนมีคนชนะจะเป็นประมาณนี้ครับ:

เราสามารถทดลองเอาคู่แข่งขันมาแข่งซ้ำๆกันหลายๆครั้งเพื่อดูอัตราส่วนการแพ้ชนะได้แบบนี้ครับ:

เราสามารถจับคู่แข่งขันที่เป็นไปได้ทั้งหมดมาแข่งกันแล้วดูอัตราส่วนการแพ้ชนะแบบนี้ก็ได้ครับ:

สามารถดาวน์โหลด Jupyter Notebook ที่มีตัวอย่างโค้ดได้ที่นี่ครับ

วิทย์ม.ต้น: หัดใช้การสุ่มใน Python (สับไพ่, ประมาณค่าพาย, โยนหัวก้อย)

วันศุกร์ที่ผ่านมาเด็กๆได้เรียนรู้เกี่ยวกับการสุ่มใน Python ครับ รู้จักใช้ random.shuffle( ) เพื่อสลับสิ่งของ, random.choice( ) และ random.sample( ) เพื่อสุ่มเลือกของ, random.random( ) เพื่อสร้างตัวเลขสุ่ม

เราลองใช้ random.shuffle สลับสำรับไพ่แล้วแจกไพ่ด้วย pop( ) หรือจะใช้ random.sample( ) แล้วตามด้วย remove( ) ก็ได้ครับ

เราลองประมาณค่า π ด้วยการสุ่มด้วย random.random( )


และใช้ random.choice( ) โยนหัวก้อยให้เราครับ สามารถแก้ปัญหาเช่นอยากรู้ว่าถ้าโยนเหรียญห้าเหรียญพร้อมๆกันสักกี่ครั้งถึงจะออกหัวหมด

สามารถดาวน์โหลด Jupyter Notebook ที่มีตัวอย่างโค้ดได้ที่นี่ครับ

วิทย์ม.ต้น: หัดต่อภาพทำ Collage ด้วย Pillow กัน

วันศุกร์ที่ผ่านมาเด็กๆหัดใช้ Pillow ต่ออีกครับ ครั้งที่แล้วต่อภาพสองภาพในแนวตั้งและแนวนอนได้แล้ว คราวนี้ลองต่อหลายๆภาพเข้าด้วยกันเป็น Collage เล่นดู การบ้านเด็กๆคือให้ไปพยายามรวมภาพเข้าด้วยกันให้ดูดีๆ หรือไม่ก็สร้างออกมาทีละหลายๆภาพแล้วเลือกเอาครับ

ตัวอย่างการใช้ Pillow ให้เด็กศึกษาเพิ่มเติมมีเช่นที่ https://automatetheboringstuff.com/chapter17/ และ https://pillow.readthedocs.io/en/stable/handbook/tutorial.html

ข้อมูลอ้างอิงเกี่ยวกับ Pillow ไว้ทำความเข้าใจให้ลึกขึ้น: https://pillow.readthedocs.io/en/stable/handbook/concepts.html

วิธีสลับของหรือเลือกของแบบสุ่มดูได้จากลิงก์เหล่านี้ครับ: https://pynative.com/python-random-shuffle/ และ https://pynative.com/python-random-choice/ และดูลิงก์ https://docs.python.org/3/library/random.html สำหรับฟังก์ชั่นเกี่ยวกับการสุ่มต่างๆใน Python

สามารถดาวน์โหลด Jupyter Notebook ที่มีตัวอย่างโค้ดได้ที่นี่ครับ