Tag Archives: ไพธอน

วิทย์ม.ต้น: รู้จัก List Comprehension ในไพธอน, ใช้ Pyplot วาดกราฟ, หัดใช้ Command Line ต่อ

วิทย์โปรแกรมมิ่งของม.2-3 สัปดาห์นี้ เราเริ่มด้วยการใช้ bisection method เฉลยการบ้านสัปดาห์ที่แล้วครับ การบ้านคือ

ถ้าเรามีเวลาออมเงิน 20, 30, 40 ปี,

  1. ถ้าผลตอบแทน = 0.08 (8%) ต่อปี และเราออมปีละ 100,000 บาท เราจะมีเงินตอนท้ายเท่าไร
  2. ถ้าเราต้องการเงินตอนท้ายเท่ากับ 40,000,000 และออมเงินปีละ 120,000 เราต้องหาผลตอบแทนเท่าไร
  3. ถ้าเราต้องการเงินตอนท้ายเท่ากับ 40,000,000 และได้ผลตอบแทนปีละ 10% เราต้องออมเงินปีละเท่าไร

ข้อ 1 ตรงไปตรงมา หาจาก future value ของเงินที่ลงทุนไปทุกๆปีรวมกัน

สำหรับข้อ 2 และ 3 วิธีแก้สมการก็คือสร้างฟังก์ชั่นที่รับตัวแปรที่เราต้องการหา กำหนดฟังก์ชั่นให้มันเป็นศูนย์ถ้าตัวแปรของเราแก้โจทย์ที่ต้องการ แล้วก็ป้อนฟังก์ชั่นไปให้ bisection method หาคำตอบให้ครับ

หน้าตาประมาณนี้:

จากนั้นเด็กๆรู้จักกับ list comprehension ซึ่งเป็นวิธีสร้างลิสต์ที่ง่ายและเร็วครับ ควรไปอ่านและทดลองเพื่อความเข้าใจเพิ่มเติมที่ Comprehending Python’s Comprehensions หรือดูที่ส่วน “การสร้างลิสต์จาก for” ที่หน้านี้ นะครับ

เด็กๆรู้จัก list comprehension เพื่อไปป้อนให้ PyPlot วาดกราฟให้ครับ ศึกษา PyPlot ได้โดยพิมพ์ตามตัวอย่างใน Pyplot Tutorial แต่ถ้าใช้ Jupyter notebook อย่าลืมพิมพ์

%matplotlib inline
import matplotlib.pyplot as plt

ก่อนเริ่มใช้ PyPlot ครับ

หน้าตาการวาดกราฟก็อาจเป็นประมาณนี้:

เราวาดกราฟเพื่อดูหน้าตาความสัมพันธ์ต่างๆที่เราสนใจ เช่นกราฟมันตัดแกน x แกน y ที่ไหนบ้าง เพิ่มขึ้นลดลงอย่างไร ฯลฯ

สามารถดาวน์โหลด Jupyter Notebook ที่มีโค้ดต่างๆไปลองเล่นได้ที่นี่นะครับ หรือจะดูออนไลน์ที่ https://nbviewer.jupyter.org/url/witpoko.com/wp-content/uploads/2019/08/2019-08-16_G8-9.ipynb ก็ได้

สำหรับม.1 เด็กๆก็นั่งทำแบบฝึกหัดพิมพ์โปรแกรมแล้ว run บน command line แบบ python program.py arg1 arg2 ต่อไปครับ

วิทย์ม.ต้น: “กฎของ 72”, ใช้ Bisection Method หาคำตอบสมการ, หัดใช้ command Line กับโปรแกรมไพธอน

สัปดาห์นี้เด็กๆม.2-3 ได้รู้จัก “กฎของ 72” ไว้ใช้ประมาณในใจว่าถ้าลงทุนมีผลตอบแทนทบต้นที่ r % ต่อปี จะใช้เวลาประมาณ 72/r ปีที่เงินจะงอกเงยเป็น 2 เท่า ยกตัวอย่างเช่นถ้าผลตอบแทนเท่ากับ 3% ต่อปีจะใช้เวลา 72/3 = 24 ปี ถ้าผลตอบแทนเท่ากับ 8% ต่อปีจะใช้เวลา 72/8 = 9 ปี

มีหลายคนเข้าใจผิดว่ากฎนี้เป็นกฎที่ไอน์สไตน์คิดขึ้น แต่จริงๆแล้วน่าจะมีมาก่อนไอน์สไตน์หลายร้อยปี แต่ไอน์สไตน์เคยพูดเรื่องดอกเบี้ยทบต้นไว้ว่า “Compound interest is the eighth wonder of the world. He who understands it earns it … he who doesn’t … pays it.” เลยอาจมีคนเข้าใจผิดว่าไอน์สไตน์เป็นคนคิด

สำหรับเด็กๆที่รู้จัก logarithm เราสามารถคำนวณเวลาที่ทำให้เงินงอกเป็นสองเท่าได้เป๊ะๆเท่ากับ log(2)/log(1+r/100) ถ้ารู้จัก logarithm และ calculus สามารถอ่านคำอธิบายความเป็นมาได้ที่  กฎของ “70” (หรือ “72”) ครับ เป็นผลลัพธ์จากการกระจาย Taylor’s series

การประมาณด้วยกฎของ 72 มีความใกล้เคียงกับคำตอบจริงๆดีทีเดียวสำหรับผลตอบแทน r ที่ไม่สูงเกินไปครับ

ถ้าเด็กๆไม่รู้จักสูตร  log(2)/log(1+r/100) ก็ยังสามารถใช้วิธีให้คอมพิวเตอร์ไล่หาคำตอบที่เป็นตัวเลขด้วยวิธี bisection อย่างที่เคยเห็นที่ วิทย์ม.ต้น: เขียนโปรแกรมไพธอนหาว่าพาราโบลาตัดแกน x ที่ไหน, วิธีหาคำตอบโดย Bisection Method ก็ได้ครับ

นอกจากนี้เรายังสามารถประยุกต์เอาวิธี bisection หาคำตอบเป็นตัวเลขให้เราในปัญหาที่เราไม่แน่ใจว่าคำตอบเป็นสูตรอย่างไรก็ได้ครับ เช่นถ้าเราต้องการทราบว่าเราต้องออมเงินปีละเท่าไรเป็นเวลา 40 ปี ด้วยผลตอบแทนทบต้นปีละ 8% ถึงจะมีเงินเมื่อสิ้นปีที่ 40 เท่ากับ 40,000,000 บาท คำตอบจาก bisection คือ 142,969 บาท:

ถ้าเราต้องการออมเงินทุกปีเป็นเวลา 20 ปี ปีละ 100,000 บาท แล้วเราต้องการให้เงินตอนจบเป็น 10 ล้านบาท เราต้องหาผลตอบแทนทบต้นปีละกี่เปอร์เซ็นต์ เราก็สามารถใช้ bisection หาให้เราได้ว่าต้องหาอัตราตอบแทน 13.7% ต่อปี:

สามารถโหลดโค้ดต่างๆใน Jupyter Notebook ไปเล่นได้ที่นี่ หรือดูโค้ดออนไลน์ได้ที่ https://nbviewer.jupyter.org/url/witpoko.com/wp-content/uploads/2019/08/2019-08-09_G8-9.ipynb นะครับ

สำหรับเด็กม.1 ผมให้หัดใช้ command line เรียกไพธอนมาทำงานให้ ที่ผ่านมาเด็กๆจะใช้ไพธอนผ่าน Jupyter Notebook ตลอด

เด็กๆลงโปรแกรมไพธอนด้วย Anaconda บน Windows กันจึงเรียก Anaconda Prompt ขึ้นมาแล้วพิมพ์คำสั่งประเภท python program_name.py arg1 arg2 arg3 (ถ้าใช้ macOS หรือ Linux ก็เรียก terminal ขึ้นมาพิมพ์เลยก็ได้ครับ)

แนะนำให้เด็กๆที่ใช้ Windows ไปอ่าน คำสั่ง Command Line พื้นฐาน และตัวอย่างการใช้คำสั่งต่างๆ ดูเพื่อเพิ่มความรู้และความเข้าใจนะครับ

สำหรับเด็กๆที่ใช้ macOS หรือ Linux ลองดู [Mac มือใหม่] มาเรียนรู้พื้นฐาน Linux + Command Line เบื้องต้นกันดีกว่า หรือหนังสือหัดใช้ Command-line Interface เถอะ ดูครับ

วิทย์ม.ต้น: การเติบโตของเงินออมเป็นประจำ, หัดใช้ Mu-Editor

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

เราปรับชื่อตัวแปรของฟังก์ชั่นหาค่าเงินในอนาคตให้เป็นสากลมากขึ้น:

หัดใช้ f-string เพื่อจัดรูปแบบข้อความหรือจำนวนทศนิยม:

และคำนวณเงินอนาคตทั้งหมดถ้าออมเท่าๆกันทุกปี:

ถ้าออมเงินทุกปีๆละ 1 บาท ที่ผลตอบแทน 0%, 2%, 5%, 7%, 10%, 15%, 20% เป็นเวลา 10, 20, 30, 40, 50 ปี จะมีเงินรวมตอนจบดังนี้:

สามารถโหลด Jupyter Notebook ไปเล่นได้ที่นี่ หรือดูโค้ดออนไลน์ได้ที่ https://nbviewer.jupyter.org/url/witpoko.com/wp-content/uploads/2019/08/2019-08-02_G8-9.ipynb นะครับ

นอกจากนี้เด็กๆม.1, 2, 3 ก็ได้รู้จัก Mu Editor สำหรับเขียนโปรแกรมไพธอนแล้วเก็บเป็นไฟล์ .py แยกต่างหากไม่อยู่ใน Jupyter Notebook ครับ สามารถโหลดได้ที่ https://codewith.mu

เด็กม. 1 ได้เห็น turtle graphics นิดหน่อย ในอนาคตเราคงเอามาใช้วาดนู่นวาดนี่กัน