Category Archives: programming

วิทย์ม.ต้น: เรื่องน่ารู้เกี่ยวกับการนอน, เฉลยข้อสอบ Python, คลิป Immune System

วันนี้ผมเล่าเรื่องน่ารู้เกี่ยวกับการนอนหลับให้เด็กๆม.ต้นฟังครับ ปกติเราจะคิดว่าเราต้องนอนเพราะสมองเราต้องพักผ่อนเท่านั้น แต่มีงานวิจัยพบว่าสัตว์ที่ไม่มีสมองเช่นฟองน้ำหรือแมงกระพรุนก็แสดงพฤติกรรมประเภทนอนเหมือนกัน และนอกจากนี้ยังมีงานวิจัยที่ทดลองว่าการอดนอนจนตายในแมลงหวี่นั้น พบสารเคมีตระกูลที่มีออกซิเจนอิสระ (ROS, = reactive oxygen species) ในลำไส้เพิ่มขึ้นเรื่อยๆตามการอดนอนจนอายุขัยสั้นเหลือ 10 วันจากปกติ 30 วัน และถ้าลดปริมาณ ROS ในลำไส้โดยกินสารต้านอนุมูลอิสระหรือให้แมลงหวี่นอน แมลงหวี่ก็จะไม่ตายเร็ว ทำให้เราเข้าใจมากขึ้นว่าการนอนน่าจะวิวัฒนาการมาก่อนสมอง และน่าจะมีหน้าที่เกี่ยวกับเมแทบอลิซึมในเซลล์ต่างๆมาก่อน

รายละเอียดจะเป็นประมาณในลิงก์เหล่านี้ครับ:

  1. Sleep Evolved Before Brains. Hydras Are Living Proof.
  2. The Simplest of Slumbers
  3. การศึกษาสาเหตุของการอดนอนที่ทำให้เสียชีวิต พบว่าไม่ได้เกิดจากสมองแต่อาจเกิดในลำไส้
  4. Sleep Loss Can Cause Death through Accumulation of Reactive Oxygen Species in the Gut
  5. การนอน

จากนั้นเราคุยกันเรื่องข้อสอบที่เด็กๆทำไป ส่วนใหญ่ทำได้ไม่มีปัญหาอะไร แต่มีข้อเขียนโปรแกรมที่เด็กๆทำไม่ค่อยครบกัน เลยทำเฉลยไว้ไห้ดู คำถามคือ:

ผมเฉลยเป็นโปรแกรมบน Colab อยู่ที่นี่

เราดูคลิปและคุยกันเรื่องระบบภูมิคุ้มกัน:

จากนั้นผมให้เด็กๆลองเล่นกลจับแบงค์กัน คือให้วางแขนไว้กับโต๊ะให้มืออยู่นอกโต๊ะ แล้วให้เพื่อนปล่อยแบงค์ให้ตกผ่านมือ เด็กๆจะจับแบงค์ไม่ค่อยได้เพราะเวลาที่ตา-สมอง-มือทำงานร่วมกันเพื่อจับแบงค์นั้นนานเกินกว่าเวลาที่แบงค์ตกผ่านมือ การบ้านคือให้เด็กๆไปคิดว่าจะประมาณเวลาการตัดสินใจจับแบงค์อย่างไร แล้วอีกสองสัปดาห์เราจะทำการทดลองกัน

วิทย์ม.ต้น: Perseverance Rover จอดที่ดาวอังคาร, หัดไพธอนต่อ

วันนี้เราคุยกันเรื่องเหล่านี้ครับ:

1. ข่าวการลงจอดที่ดาวอังคารโดยยานเพอร์เซเวอแรนซ์ (Perseverance Rover) หรือเพอร์ซี่ ข้อมูลประมาณดังในลิงก์และคลิปเหล่านี้ครับ:

ภาพแรกสุดจากยานสำรวจ Perseverance หลังจากที่ได้ลงจอดบนพื้นผิวของดาวอังคาร เวลาประมาณตีสี่ของเช้าวันที่ 19 กุมภาพันธ์…

Posted by มติพล ตั้งมติธรรม on Thursday, February 18, 2021

2. เด็กรุ่นพี่หัดเขียนโปรแกรมไพธอนต่อ วันนี้เรียนรู้เรื่องการสุ่ม เรื่องพวกนี้: import random, random.randint(), random.choice(), random.random(), random.randrange()

การบ้านให้ไปศึกษา Turtle Graphics แล้วทำแบบฝึกหัด

3. เด็กรุ่นน้องเริ่มหัดเขียนโปรแกรมภาษาไพธอน โหลด Thonny มาใช้เขียนโปรแกรม วันนี้หัดเซฟไฟล์งาน โหลดไฟล์งาน หัดใช้ print(), input(), x = int(input(…)), เอาข้อความ (สตริง) ต่อกัน, หัดใช้ f-string, รู้จัก new line character (\n)

การบ้านให้ไปเขียนโปรแกรมให้ใส่เลขสองตัวแล้วคำนวณผลบวก/ลบ/คูณ/หาร/ยกกำลัง

วิทย์ม.ต้น: หัดไพธอน, เปรียบเทียบการตกลูกบอล

วันนี้เราคุยกันเรื่องพวกนี้ครับ:

1. รุ่นพี่ฝึกไพธอนกันต่อ เขียนโปรแกรมแก้ปัญหาเล็กๆหลายๆอัน มีเฉลยการบ้านจากสัปดาห์ที่แล้วให้เด็กๆไปค้นคว้าหาทางคำนวณด้วยเศษส่วน หน้าตาประมาณนี้ (โปรแกรมเบื้องต้น ไม่มี error handling เพื่อให้เข้าใจง่าย)

# เขียนโปรแกรมรับ เศษและส่วน ตัวที่ 1 และตัวที่ 2
# หาค่า +, -, *, / ของเศษส่วน 1 และ 2

from fractions import Fraction as frac

x1 = int(input("ใส่เศษตัวแรก: "))
x2 = int(input("ใส่ส่วนตัวแรก: "))

y1 = int(input("ใส่เศษตัวที่สอง: "))
y2 = int(input("ใส่ส่วนตัวที่สอง: "))
 
x = frac(x1,x2)
y = frac(y1,y2)

print(f"{x} + {y} = {x+y}")
print(f"{x} - {y} = {x-y}")
print(f"{x} * {y} = {x*y}")
print(f"{x} / {y} = {x/y}")

นอกจากนี้ผมแสดงให้เด็กๆดูว่าใช้ฟังก์ชั่น limit_denominator ในโมดูล fractions หาเศษส่วนมาประมาณค่าต่างๆอย่างไร เช่นอันนี้ประมาณค่าพาย = 3.141592653… ให้ใกล้เคียงที่สุดด้วยเศษส่วนที่ส่วนมีขนาดไม่เกิน 1, 10, 100, … ครับ:

# ประมาณค่าพายด้วยเศษส่วน

from fractions import Fraction as frac

#ค่าพาย 200 หลัก
my_pi = "3.14159265358979323846264338327950288419716939937510582097494459230781\
6406286208998628034825342117067982148086513282306647093844609550582231\
7253594081284811174502841027019385211055596446229489549303820"


for e in range(10):
    #print(frac(my_pi).limit_denominator(10 ** e))
    x = frac(my_pi).limit_denominator(10 ** e)
    print(f"ประมาณค่าพายเป็นเศษส่วน โดยส่วนไม่เกิน {10**e:,}: {x} ≈ {float(x)}")
    

ได้ผลลัพธ์หน้าตาแบบนี้:

ประมาณค่าพายเป็นเศษส่วน โดยส่วนไม่เกิน 1: 3 ≈ 3.0
ประมาณค่าพายเป็นเศษส่วน โดยส่วนไม่เกิน 10: 22/7 ≈ 3.142857142857143
ประมาณค่าพายเป็นเศษส่วน โดยส่วนไม่เกิน 100: 311/99 ≈ 3.1414141414141414
ประมาณค่าพายเป็นเศษส่วน โดยส่วนไม่เกิน 1,000: 355/113 ≈ 3.1415929203539825
ประมาณค่าพายเป็นเศษส่วน โดยส่วนไม่เกิน 10,000: 355/113 ≈ 3.1415929203539825
ประมาณค่าพายเป็นเศษส่วน โดยส่วนไม่เกิน 100,000: 312689/99532 ≈ 3.1415926536189365
ประมาณค่าพายเป็นเศษส่วน โดยส่วนไม่เกิน 1,000,000: 3126535/995207 ≈ 3.1415926535886505
ประมาณค่าพายเป็นเศษส่วน โดยส่วนไม่เกิน 10,000,000: 5419351/1725033 ≈ 3.1415926535898153
ประมาณค่าพายเป็นเศษส่วน โดยส่วนไม่เกิน 100,000,000: 245850922/78256779 ≈ 3.141592653589793
ประมาณค่าพายเป็นเศษส่วน โดยส่วนไม่เกิน 1,000,000,000: 2549491779/811528438 ≈ 3.141592653589793

แนะนำให้เด็กๆศึกษาตัวอย่างเรื่อง fractions ที่ https://www.tutorialspoint.com/fraction-module-in-python และเรื่อง f-string ที่ https://careerkarma.com/blog/python-f-string/ นะครับ

2. ให้โจทย์รุ่นน้องสังเกตดูว่าลูกบอลต่างๆ (ลูกบอลยาง, ลูกบาส, ลูกปิงปอง, ลูกบอลโฟม) ตกลงพื้นเร็วเท่ากันไหม ลูกไหนตกเร็วหรือตกช้า เด็กๆก็จัดการถ่ายวิดีโอแล้วใส่เข้าไปในโปรแกรม Tracker เพื่อนับการเคลื่อนที่แต่ละเฟรม หรือบางคลิปก็วัดตำแหน่งที่เวลาต่างๆด้วยครับ

บรรยากาศตอนทดลองเป็นแบบนี้:

ให้เด็กๆสังเกตดูว่าลูกบอลต่างๆ (ลูกบอลยาง, ลูกบาส, ลูกปิงปอง, ลูกบอลโฟม) ตกลงพื้นเร็วเท่ากันไหม ลูกไหนตกเร็วหรือตกช้า…

Posted by Pongskorn Saipetch on Thursday, December 17, 2020

ผมเล่าให้เด็กๆฟังว่าเวลามีของตกจากที่สูง มันจะตกเร็วขึ้นเรื่อยๆเนื่องจากแรงดึงดูดของโลก แต่ขณะเดียวกันยิ่งมันตกเร็วเท่าไร แรงต้านอากาศก็จะเพิ่มขึ้นตาม ทำให้ของแต่ละอย่างตกลงมาด้วยความเร็วต่างกันขึ้นอยู่กับรูปร่างความสามารถในการแหวกอากาศและความหนาแน่นของมัน ความเร็วสูงสุดที่ของแต่ละชิ้นที่จะตกลงมาได้เรียกว่า Terminal Velocity สำหรับคนที่กระโดดมาจากเครื่องบินแต่ร่มไม่กางความเร็วสูงสุดจะประมาณ 200-300 กิโลเมตรต่อชั่วโมง (ขึ้นกับว่ากางแขนขาเพื่อต้านลมหรือเปล่า)  แม้ว่าความเร็วการตกจะเร็วแบบนั้น แต่ก็มีคนรอดชีวิตหลายคนด้วยความโชคดีต่างๆเช่นตกโดนต้นไม้อ่อน ตกโดนสายไฟ ตกลงน้ำ

ไฟล์วิดีโอต่างๆที่ถ่ายวันนี้โหลดได้ที่นี่เผื่อใครต้องการใช้ Tracker จับตำแหน่งการตกนะครับ