Category Archives: มัธยม

วิทย์ม.ต้น: ฝึกไพธอน, จับเวลาลูกบอลตก

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#สร้างโปรแกรมให้เราใส่วันที่เข้าไป แล้วคำนวณว่าวันนั้นห่างจากปัจจุบันเป็นเวลาเท่าไร
import datetime
year = int(input('ใส่ปี (ค.ศ.): '))
month = int(input('ใส่เดือน (1-12): '))
day = int(input('ใส่วัน (1-31): '))
date = datetime.date(year, month, day)
today = date.today()
time_difference = today - date
days_diff= time_difference.days
print('จำนวนวันระหว่าง ' + str(date) + ' ' + 'และ ' + str(today) + ' คือ ' + str(days_diff) + ' วัน')
#ใช้ f-string (https://realpython.com/python-f-strings/
#หรือ https://careerkarma.com/blog/python-f-string/) เพื่อสามารถจัดรูปแบบได้ง่ายและตรงใจมากขึ้น
print(f"จำนวนวันระหว่าง {date} และ {today} คือ {days_diff:,} วัน")
#สร้างโปรแกรมให้เราใส่วันที่เข้าไป แล้วคำนวณว่าวันนั้นห่างจากปัจจุบันเป็นเวลาเท่าไร import datetime year = int(input('ใส่ปี (ค.ศ.): ')) month = int(input('ใส่เดือน (1-12): ')) day = int(input('ใส่วัน (1-31): ')) date = datetime.date(year, month, day) today = date.today() time_difference = today - date days_diff= time_difference.days print('จำนวนวันระหว่าง ' + str(date) + ' ' + 'และ ' + str(today) + ' คือ ' + str(days_diff) + ' วัน') #ใช้ f-string (https://realpython.com/python-f-strings/ #หรือ https://careerkarma.com/blog/python-f-string/) เพื่อสามารถจัดรูปแบบได้ง่ายและตรงใจมากขึ้น print(f"จำนวนวันระหว่าง {date} และ {today} คือ {days_diff:,} วัน")
#สร้างโปรแกรมให้เราใส่วันที่เข้าไป แล้วคำนวณว่าวันนั้นห่างจากปัจจุบันเป็นเวลาเท่าไร

import datetime

year = int(input('ใส่ปี (ค.ศ.): '))
month = int(input('ใส่เดือน (1-12): '))
day = int(input('ใส่วัน (1-31): '))
date = datetime.date(year, month, day)
today = date.today()

time_difference = today - date
days_diff= time_difference.days

print('จำนวนวันระหว่าง ' + str(date) + ' ' + 'และ ' + str(today) +  ' คือ ' + str(days_diff) + ' วัน')

#ใช้ f-string (https://realpython.com/python-f-strings/ 
#หรือ https://careerkarma.com/blog/python-f-string/) เพื่อสามารถจัดรูปแบบได้ง่ายและตรงใจมากขึ้น

print(f"จำนวนวันระหว่าง {date} และ {today} คือ {days_diff:,} วัน")

แนะนำให้เด็กๆไปค้นคว้าและหัดใช้เรื่อง f-string ดังในบรรทัดสุดท้ายในโปรแกรมข้างบน หาอ่านได้ที่ https://careerkarma.com/blog/python-f-string/ หรือ https://realpython.com/python-f-strings/

เด็กๆรู้จักไปค้นคว้าเรื่องโมดูล datetime ผมแนะนำให้ไปดูตัวอย่างเพิ่มเติมที่ https://www.programiz.com/python-programming/datetime และ https://pymotw.com/3/datetime/

2. รุ่นพี่มีการบ้านไปเขียนโปรแกรมข้อนี้:

โปรแกรมเศษส่วน

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

(hints: หาเรื่องเกี่ยวกับ fractions ใน Python)

3. ให้โจทย์รุ่นน้องดังนี้:

หาเวลาการตกถึงพื้นของวัตถุจากความสูงต่างๆ วาดกราฟความสูง vs. เวลา

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

สเปรดชีตอยู่ที่นี่ครับ

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

ผมชี้ให้เด็กๆเห็นว่าเมื่อความสูงเพิ่มขึ้นสองเท่า เวลาไม่ได้เพิ่มเป็นสองเท่าตาม แต่จะเพิ่มแค่ประมาณ √2 เท่า (สแควรูทสอง เท่ากับประมาณ 1.4 เท่า) ถ้าจะให้เวลาเพิ่มเป็นสองเท่า ความสูงต้องเพิ่มเป็นสี่เท่า หรือสรุปได้ว่าเวลาแปรผันตรงกับสแควรูทของความสูงนั่นเอง

บรรยากาศกิจกรรมวันนี้ครับ:


วิทย์ม.ต้น: ประดิษฐ์และสังเกตโฮโมโพลาร์มอเตอร์แบบต่างๆ

วันนี้ในกิจกรรมวิทย์ม.ต้น เราดูคลิป The Human Era ของ Kurzgesagt และผมเล่าเรื่องความหวังของผมที่เผ่าพันธุ์มนุษย์จะไม่ทำอะไรโง่ๆแล้วสูญพันธุ์:

อยากให้เด็กๆดูอีกสองคลิปนี้ด้วยครับ แต่ไม่ได้เปิดในชั้นเรียน:

จากนั้นเด็กๆก็ดัดลวดทองแดงทำโฮโมโพลาร์มอเตอร์แบบต่างๆ สังเกตว่าแบบไหนหมุนเร็ว หมุนช้า หมุนนาน แบบไหนอาจประดับบ้านได้ บรรยากาศและคลิปวิดีโอมีดังนี้ครับ:

วิธีทำโฮโมโพลาร์มอเตอร์เส้นลวดทำอย่างนี้ครับ:

วิทย์ม.ต้น: ฝึกไพธอน, แก้ปัญหาด้วยตัวเองด้วยวิดีโอและ Tracker

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#เขียนโปรแกรมรับจำนวนตัวเลขที่จะป้อน แล้วรับตัวเลขไปเรื่อยๆเท่ากับจำนวนครั้งนั้น แล้วโปรแกรมจะคำนวณค่ามากที่สุด น้อยที่สุด (ใช้ for และ list)
count = int(input("ใส่จำนวนตัวเลขที่จะป้อน: "))
numbers = []
for i in range(count):
x = float(input("ใ่ส่ตัวเลขตัวที่ " + str(i+1) + " จากทั้งหมด " + str(count) + " ตัว: "))
numbers.append(x)
print("ตัวเลขที่มากที่สุดคือ " + str(max(numbers)))
print("ตัวเลขที่น้อยที่สุดคือ " + str(min(numbers)))
#เขียนโปรแกรมรับจำนวนตัวเลขที่จะป้อน แล้วรับตัวเลขไปเรื่อยๆเท่ากับจำนวนครั้งนั้น แล้วโปรแกรมจะคำนวณค่ามากที่สุด น้อยที่สุด (ใช้ for และ list) count = int(input("ใส่จำนวนตัวเลขที่จะป้อน: ")) numbers = [] for i in range(count): x = float(input("ใ่ส่ตัวเลขตัวที่ " + str(i+1) + " จากทั้งหมด " + str(count) + " ตัว: ")) numbers.append(x) print("ตัวเลขที่มากที่สุดคือ " + str(max(numbers))) print("ตัวเลขที่น้อยที่สุดคือ " + str(min(numbers)))
#เขียนโปรแกรมรับจำนวนตัวเลขที่จะป้อน แล้วรับตัวเลขไปเรื่อยๆเท่ากับจำนวนครั้งนั้น  แล้วโปรแกรมจะคำนวณค่ามากที่สุด น้อยที่สุด (ใช้ for และ list)

count = int(input("ใส่จำนวนตัวเลขที่จะป้อน: "))
numbers = []
for i in range(count):
    x = float(input("ใ่ส่ตัวเลขตัวที่ " + str(i+1) + " จากทั้งหมด " + str(count) + " ตัว: "))
    numbers.append(x)

print("ตัวเลขที่มากที่สุดคือ " + str(max(numbers)))
print("ตัวเลขที่น้อยที่สุดคือ " + str(min(numbers)))
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#เขียนโปรแกรมรับจำนวนตัวเลขที่จะป้อน แล้วรับตัวเลขไปเรื่อยๆเท่ากับจำนวนนั้น แล้วโปรแกรมจะเรียงลำดับตัวเลขเหล่านั้นจากมากไปน้อย
#และน้อยไปมาก (ใช้ for และ list)
count = int(input("ใส่จำนวนตัวเลขที่จะป้อน: "))
numbers = []
for i in range(count):
x = float(input("ใ่ส่ตัวเลขตัวที่ " + str(i+1) + " จากทั้งหมด " + str(count) + " ตัว: "))
numbers.append(x)
print("ตัวเลขที่ใส่เข้ามาคือ " + str(numbers))
print("ตัวเลขเรียงจากน้อยไปมากคือ " + str(sorted(numbers)))
print("ตัวเลขเรียงจากมากไปน้อยคือ " + str(sorted(numbers, reverse=True) ))
#เขียนโปรแกรมรับจำนวนตัวเลขที่จะป้อน แล้วรับตัวเลขไปเรื่อยๆเท่ากับจำนวนนั้น แล้วโปรแกรมจะเรียงลำดับตัวเลขเหล่านั้นจากมากไปน้อย #และน้อยไปมาก (ใช้ for และ list) count = int(input("ใส่จำนวนตัวเลขที่จะป้อน: ")) numbers = [] for i in range(count): x = float(input("ใ่ส่ตัวเลขตัวที่ " + str(i+1) + " จากทั้งหมด " + str(count) + " ตัว: ")) numbers.append(x) print("ตัวเลขที่ใส่เข้ามาคือ " + str(numbers)) print("ตัวเลขเรียงจากน้อยไปมากคือ " + str(sorted(numbers))) print("ตัวเลขเรียงจากมากไปน้อยคือ " + str(sorted(numbers, reverse=True) ))
#เขียนโปรแกรมรับจำนวนตัวเลขที่จะป้อน แล้วรับตัวเลขไปเรื่อยๆเท่ากับจำนวนนั้น  แล้วโปรแกรมจะเรียงลำดับตัวเลขเหล่านั้นจากมากไปน้อย
#และน้อยไปมาก (ใช้ for และ list)

count = int(input("ใส่จำนวนตัวเลขที่จะป้อน: "))
numbers = []
for i in range(count):
    x = float(input("ใ่ส่ตัวเลขตัวที่ " + str(i+1) + " จากทั้งหมด " + str(count) + " ตัว: "))
    numbers.append(x)


print("ตัวเลขที่ใส่เข้ามาคือ " + str(numbers))
print("ตัวเลขเรียงจากน้อยไปมากคือ " + str(sorted(numbers)))
print("ตัวเลขเรียงจากมากไปน้อยคือ " + str(sorted(numbers, reverse=True) ))

2. รุ่นพี่มีการบ้านไปเขียนโปรแกรมสองข้อนี้:

–หาจำนวนวันที่เราเกิดมา โดยใช้ฟังก์ชั่นเกี่ยวกับวันเวลาของไพธอน
–สร้างโปรแกรมให้เราใส่วันที่เข้าไป แล้วคำนวณว่าวันนั้นห่างจากปัจจุบันเป็นเวลาเท่าไร

3. รุ่นน้องผมให้แก้ปัญหาสองข้อโดยผมไม่บอกว่าต้องทำอย่างไร ให้เด็กๆร่วมกันคิดและทำเอง ข้อแรกคือให้หาความเร็วว่ามอเตอร์โฮโมโพลาร์เหล่านี้หมุนเร็วแค่ไหน:

เด็กๆหาวิธีโหลดวิดีโอจากเฟซบุ๊ค เอาวิดีโอใส่โปรแกรม Tracker แล้วดูว่าการหมุนแต่ละรอบต้องใช้ภาพกี่เฟรม เมื่อเทียบกับจำนวนเฟรมต่อวินาทีของวิดีโอก็สามารถคำนวณความเร็วการหมุนได้ เด็กบางคนใช้ Tracker จับตำแหน่งวัตถุแล้วพล็อตกราฟด้วย

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

4. บรรยากาศเป็นดังนี้ครับ: