Category Archives: programming

วิทย์ม.ต้น: แนะนำและทบทวน Python เทอมใหม่

วันนี้เราเรียน Python กันต่อครับ เด็กใหม่ที่ไม่เคยเรียนมาก่อนได้รู้วิธีไปโหลด Python มาจากเว็บ Anaconda และได้หัดเปิด Jupyter Notebook ที่ติดตั้งมาใน Anaconda แล้วใช้ Python เป็นเครื่องคิดเลข เด็กๆตื่นเต้นมากเมื่อใช้ math.gcd(a, b) เพื่อหาห.ร.ม.ของเลข a และ b

แนะนำลิงก์หัดใช้ Jupyter Notebook ครับ

เด็กๆหัดใช้ใช้ Python เป็นเครื่องคิดเลข

สำหรับเด็กที่เคยเรียนในปีที่แล้วผมสอนว่าของทุกอย่างมันจะยากครั้งแรกๆ ให้ฝึกหัดต่อเนื่องแล้วจะง่ายขึ้นเรื่อยๆและเราจะเก่งขึ้นเรื่อยๆ ความยากและอุปสรรคเป็นเรื่องปกติ ให้ฝึกวิชาไปเรื่อยๆ และได้แนะนำลิงก์ทบทวนดังนี้ครับ:

ลิงก์แนะนำภาษา Python เบื้องต้น เป็นภาษาไทย

เว็บ Real Python สำหรับหัวข้อน่าสนใจหลายๆอันที่ควรเข้าไปเรียนรู้ครับ

ผมลองเขียนโปรแกรมสดๆให้เด็กๆดูว่าขบวนการเขียนทีละนิดและตรวจสอบแต่ละขั้นเป็นอย่างไร เวลาจำอะไรไม่ได้ให้ค้นหาบนเว็บอย่างไร และให้ทบทวนการใช้ list และลองสร้างฟังก์ชั่นแปลงเลขฐานสิบเป็นเลขฐานสอง (ซึ่งจริงๆใน Python ก็คำนวณให้ได้อยู่แล้วแต่ทำเป็นแบบฝึกหัดเพื่อเรียนรู้ครับ)

การอ้างอิงบางส่วนของ list (เรียกว่า list slicing)

ใช้ join เพื่อต่อสมาชิกใน list มาเป็นก้อน string เดียวกัน
แปลงเลขฐานสิบเป็นฐานสองเป็นตัวอย่างการเขียนโปรแกรม จริงๆ Python มี bin(x) อยู่แล้ว

วิทย์ม.ต้น: รู้จัก 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 ที่มีตัวอย่างโค้ดได้ที่นี่ หรือเปิดดูออนไลน์ได้ที่นี่ครับ