Category Archives: programming

วิทย์ม.ต้น: หัดไพธอน (Lists, permutations), หัดใช้ TRACKER

1. คลาสรุ่นพี่ เรียน Python จากหนังสือฟรีบนเว็บชื่อ Automate the Boring Stuff with Python โดยเขียนโปรแกรมใน Mu-Editor เราคุยกันเรื่อง Lists และ ทดลองเรื่องต่างๆเกี่ยวกับ list เช่น len, การ index, append, pop, การเอา list มารวมกัน, sort, การเปลี่ยน list เป็น tuple และ set และเปลี่ยนกลับ, การใช้ in และ not in, การใช้ count, join, split

2. เฉลยการบ้านสัปดาห์ที่แล้ว:

def convert_C_to_F(c):
    "แปลงอุณหภูมิ c เซลเซียสเป็นฟาเรนไฮต์"
    return c*9/5+32

def convert_F_to_C(f):
    "แปลงอุณหภูมิ f ฟาเรนไฮต์เป็นเซลเซียส"
    return (f-32)*5/9
    
def GCD(a,b):
    "หา ห.ร.ม. ของ a และ b"
    #Euclid GCD algorithm
    while(a != b):
        if b > a:
            a, b = b, a

        a, b = a-b, b

    return(a)

3. แนะนำให้เด็กๆรู้จัก itertools.permutations มาลองหาความน่าจะเป็นที่เลขเจ็ดหลักที่มีเลข 1-7 ครบทุกตัวสามารถหารด้วย 11 ลงตัว (มีวิธีทำด้วยมือที่แสดงว่าความน่าจะเป็น = 4/35)

#ดูว่าเลข 7 หลักที่เอาเลข 1,2,3..,7 มาเรียงกันแบบไม่ซ้ำกัน
#จะหารด้วย 11 ลงตัวกี่ตัว
#มีวิธีทำด้วยมือที่แสดงว่าความน่าจะเป็นที่จะหารด้วย 11 ลงตัว
#เท่ากับ 4/35

import itertools

digits = []
for d in range(1,8):
    digits.append(str(d))

total = 0
divisible = 0

for i in itertools.permutations(digits):
    total = total + 1
    #print(i)
    number = int("".join(i))
    #print(i, number)
    if number % 11 == 0:
        print(number)
        divisible = divisible + 1

print("Total numbers: " + str(total))
print("Divisible by 11: " + str(divisible))


4. การบ้านสัปดาห์นี้คือไปอ่านบทต่อไปเรื่อง Dictionaries

5. คลาสรุ่นน้องหัดใช้โปรแกรม Tracker โดยดาวน์โหลดและติดตั้งจาก https://physlets.org/tracker/ เราถ่ายวิดีโอการตกของลูกบาสแล้วให้ Tracker บันทึกตำแหน่งดู วิธีใช้ก็เหมือนๆกับที่ผมบันทึกไว้ที่คลิปนี้ครับ:

วิดีโอและไฟล์ .trk ดาวน์โหลดได้ที่นี่ครับ

วิทย์ม.ต้น: หัดไพธอน (Functions), รู้จัก Tracker, ดูลูกตุ้มทราย, หัด Scratch (วาด Lissajous Figures)

1. คลาสรุ่นพี่ เรียน Python จากหนังสือฟรีบนเว็บชื่อ Automate the Boring Stuff with Python โดยเขียนโปรแกรมใน Mu-Editor เราคุยกันเรื่อง Functions และหัดเขียนฟังก์ชั่นง่ายๆในชั้นเรียนกัน เช่น:

def add(a,b):
    "บวก a และ b เข้าด้วยกัน"
    return a+b
    
def หารลงตัว(a,b):
    "เช็คว่า a หารด้วย b ลงตัวหรือไม่"
    if a % b == 0:
        return True
    else:
        return False
    
def number_of_digits(x):
    "บอกว่าเลขจำนวนเต็มบวก x มีกี่หลัก"
    xstr = str(x)
    return len(xstr)
    
def contain_digit(a,b):
    "ดูว่ามีเลขโดด b ในจำนวนเต็มบวก a หรือไม่"
    astr = str(a)
    bstr = str(b)
    return bstr in astr
    
def contain_digit_1(a,b):
    "ดูว่ามีเลขโดด b ในจำนวนเต็มบวก a หรือไม่"
    return str(b) in str(a)
    
def contain_1_to_n(a):
    "a เป็นจำนวนเต็ม n หลัก, เช็คว่า a มีเลขโดด 1, 2, 3,..., n ครบหรือไม่"
    num_digits = number_of_digits(a)
    for digit in range(1,num_digits+1):
        #print("digit = " + str(digit))
        if not contain_digit(a,digit):
            return False
            
    return True

2. การบ้านรุ่นพี่คือไปอ่านบทที่ 4 เรื่อง Lists ในหนังสือ Automate the Boring Stuff with Python และ เขียนฟังก์ชั่นเหล่านี้ให้ทำงานได้ถูกต้อง:

def convert_C_to_F(c):
    "แปลงอุณหภูมิ c เซลเซียสเป็นฟาเรนไฮต์"
    pass
def convert_F_to_C(f):
    "แปลงอุณหภูมิ f ฟาเรนไฮต์เป็นเซลเซียส"
    pass
    
def GCD(a,b):
    "หา ห.ร.ม. ของ a และ b"
    #Euclid GCD algorithm
    pass

3. คลาสรุ่นน้องได้เห็นว่ามีโปรแกรมชื่อ Tracker (https://physlets.org/tracker/) ที่สามารถใช้วัดการเคลื่อนที่ต่างๆจากวิดีโอได้ เช่นวันนี้เอาคลิปลูกแก้ววิ่งเป็นวงกลมในกาละมังจากการเล่นวันพุธมาดูกัน จะเห็นว่าการเคลื่อนที่ในแนวตั้ง (แกน y) และแนวนอน (แกน x) จะเป็นคลื่น (พวก sine, cosine):

4. ได้ดูลูกตุ้มทรายแกว่ง และรู้จัก Lissajous Figures

5. ดูตัวอย่าง Scratch ว่าวาดรูปพวก Lissajous Figures อย่างไร แล้วดัดแปลงทดลองเอง:

6. เด็กๆดูคลิป Moire Pattern และหาใน Scratch ว่าทำอย่างไร:

วิทย์ม.ต้น: หัดไพธอน (Flow Control), หัด Scratch (ให้บวกเลข, ประมาณค่าพาย Pi)

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

1. คลาสรุ่นพี่ เรียน Python จากหนังสือฟรีบนเว็บชื่อ Automate the Boring Stuff with Python โดยเขียนโปรแกรมใน Mu-Editor เราคุยกันเรื่อง Boolean values, comparison operator, Boolean operators, flow control, if-else, while, break, continue, for loop, range, import, sys.exit()

2. คลาสรุ่นพี่ได้เล่นเกมทายเลขช่วง 1-100 ถ้ารู้ว่าคำตอบมากกว่าหรือน้อยกว่าที่ทายไป จะไม่ต้องทายเกินกว่า 7 ครั้ง เพราะถ้าเราแบ่งครึ่งช่วงที่เป็นไปได้เรื่อยๆช่วงใหญ่ๆ 1-100 จะหดลงเหลือช่วงขนาด 1 ในไม่เกิน 7 ครั้ง ทั้งนี้เพราะ 2 ** 7 = 128 ซึ่งมากกว่า 100

ทำนองเดียวกัน การทาย 10 ครั้งจะสามารถทายเลขในช่วง 1-1024 หรือทาย 20 ครั้งจะสามารถทายเลขในช่วง 1-1,048,576

3. รู้จักใช้เว็บ http://pythontutor.com/visualize.html เพื่อกดดูการทำงานทีละขั้นตอนของโปรแกรมไพธอนที่เราเขียน

การบ้านคือไปอ่านและพิมพ์ตาม Chapter 3 ต่อและแก้ปัญหาเหล่านี้โดยเขียนโปรแกรมไพธอนครับ: 1) โจทย์ข้อ 1 ของ Project Euler และ 2) ถ้าเขียนเลข 7 หลักโดยใช้ตัวเลข 1, 2, 3, 4, 5, 6, 7 ทุกตัว ตัวละหนึ่งครั้ง โอกาสที่เลข 7 หลักที่เขียนจะหารลงตัวด้วย 11 เท่ากับเท่าไร (ยกตัวอย่างเช่น 1235476, 2345761, และ 7645132 หารด้วย 11 ลงตัว แต่ 1234567, 234716, หรือ 7645123 หาร 11 ไม่ลงตัว)

3. คลาสรุ่นน้องหัดสอน Scratch ให้คำนวณตัวเลขให้เรา เช่นหาค่า 1+2+3+…+100, บวกเลขคี่บวกที่ไม่เกิน 100, หาค่าของ 1+1/2+1/4+1/8+…+1/1024, และประมาณค่า π (พาย) = 4/1 – 4/3 + 4/5 – 4/7 + 4/9 – 4/11 +…

บวกเลข 1, 2, 3…, 100 ตัวอย่างนี้อยู่ที่ https://scratch.mit.edu/projects/431724939/
บวกเลขคี่ 1, 3, 5, …, 99 ตัวอย่างนี้อยู่ที่ https://scratch.mit.edu/projects/431728786/
บวกเลข 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + … + 1/1024 ตัวอย่างนี้อยู่ที่ https://scratch.mit.edu/projects/431731894/
ประมาณค่า π ด้วยสูตร Gregory-Liebniz (https://en.wikipedia.org/wiki/Leibniz_formula_for_π ):
π = 4/1 – 4/3 + 4/5 – 4/7 + 4/9 – 4/11 +…
ตัวอย่างนี้อยู่ที่  https://scratch.mit.edu/projects/431738509/

4. คลาสรุ่นน้องได้รู้จักเว็บหาวันเกิดตัวเองใน π ที่ https://www.piday.org/find-birthday-in-pi/

การบ้านรุ่นน้องคือให้ไปสั่งให้ Scratch คำนวณค่า π  จากสูตรนี้ดูครับ: