#!/usr/bin/env python # coding: utf-8 # # การออมเงินเป็นประจำ # # ถ้าเราออมเงินทุกปี ปีละ 100,000 บาท โดยที่ได้ดอกเบี้ยหรือผลตอบแทนอื่นๆทบต้น 5% ต่อปี เมื่อครบ 30 ปีเราจะมีเงินออมรวมเท่าไร # เราสามารถใช้สูตรคำนวณลำดับและอนุกรม (sequence and series) ได้ แต่ถ้าเด็กๆยังไม่รู้จัก ก็สามารถเขียนโปรแกรมรวมเองได้ตรงไปตรงมาครับ # # ก่อนอื่นเราสร้างฟังก์ชั่นคำนวณมูลค่าเงินในอนาคต (future value, FV) ถ้าเรารู้ค่าเงินปัจจุบัน (present value, PV), อัตราผลตอบแทนต่อปีหรือต่อเดือน (interest, r), และจำนวนปีหรือเดือน (periods, n) จากความสัมพันธ์นี้: # # $future\ value = (present\ value)(1+interest)^{periods}$ # # หรือ # # $FV = PV (1 + r)^n$ # # เขียนฟังก์ชั่นเป็นภาษาไพธอนได้ดังนี้: # In[1]: def future_value(present_value, interest, periods): """คำนวณมูลค่าเงินในอนาคต (future value) ถ้าเรารู้ค่าเงินปัจจุบัน (present value), อัตราผลตอบแทนต่อปีหรือต่อเดือน (interest), และจำนวนปีหรือเดือน (periods) ที่ออมเงินไว้ให้งอกเงย """ return present_value * (1+interest) ** periods # In[2]: # ลองพิมพ์ว่าเงิน 100 บาท ได้ดอกเบี้ยทบต้น 5% ต่อปีมีค่าเท่าไรเมื่อสิ้นปีที่ 1, 2, ..., 10 # อย่าลืมว่าเราต้องใส่ค่า 0.05 สำหรับดอกเบี้ย 5% for year in range(0,11): print(year, future_value(100, 0.05, year)) # In[3]: # หัดใช้ f-string เพื่อจัดรูปแบบข้อความ # \t คือเว้นวรรค for year in range(0,11): #print(year, future_value(100, 0.05, year)) print(f"{year}\t{future_value(100, 0.05, year)}") # In[4]: # ใช้ .2f ใน f-string เพื่อแสดงทศนิยมสองตำแหน่ง # ดูตัวอย่างและคำอธิบายเพิ่มเติมเรื่อง f-string ได้ที่ https://realpython.com/python-f-strings/ for year in range(0,11): #print(year, future_value(100, 0.05, year)) print(f"{year}\t{future_value(100, 0.05, year):.2f}") # ถ้าเราออมเงินเป็นก้อนเท่าๆกันทุกปี 30 ครั้ง เงินแต่ละก้อนก็จะเติบโตทบต้นปีละ 5% เงินก้อนแรกจะโต 30 ปี ก้อนที่สองจะโต 29 ปี ก้อนที่ 3 จะโต 28 ปี ... ก้อนที่ 30 ก็จะโต 1 ปี # # เงินรวมตอนจบจะเท่ากับ $(present\ value)(1+interest)^{30} + (present\ value)(1+interest)^{29} + (present\ value)(1+interest)^{28} + \dots + (present\ value)(1+interest)^{3} + (present\ value)(1+interest)^{2} + (present\ value)(1+interest)^{1}$ # # เราเขียนเป็นฟังก์ชั่นคำนวณมูลค่าเงินทั้งหมดเมื่อมูลค่าเงินที่ออมทุกปี = deposit อัตราผลตอบแทนต่อปีหรือต่อเดือน = interest และจำนวนปีหรือเดือน = n_periods ดังนี้: # In[5]: def total_future_value(deposit, interest, n_periods): """คำนวณค่าเงินในอนาคตทั้งหมด ถ้าออมเงินเท่าๆกันทุกปี = deposit ด้วยผลตอบแทนต่อปี = interest (เช่น 5% = 0.05) เป็นจำนวนปีทั้งหมด = n_periods """ sum = 0.0 for i in range(1,n_periods+1): sum = sum + future_value(deposit, interest, i) return sum # In[6]: # ทดสอบฟังก์ชั่นของเรา ถ้าออม 30 ปี ไม่มีดอกเบี้ย เงินตอนจบก็น่าจะเท่ากับ 30 คูณเงินที่ฝากแต่ละงวด total_future_value(1, 0.0, 30) # In[7]: # ทดสอบฟังก์ชั่นของเรา ถ้าออม 1 ปี ดอกเบี้ย 5% total_future_value(1, 0.05, 1) # In[8]: # ทดสอบฟังก์ชั่นของเรา ถ้าออม 3 ปี ดอกเบี้ย 5% total_future_value(1, 0.05, 3) # In[9]: # ค่าที่ได้ควรจะเท่ากับค่าข้างบน future_value(1,0.05,3) + future_value(1,0.05,2) + future_value(1,0.05,1) # In[10]: # แก้โจทย์ดั้งเดิมของเราที่ว่าถ้าเราออมเงินทุกปี ปีละ 100,000 บาท #โดยที่ได้ดอกเบี้ยหรือผลตอบแทนอื่นๆทบต้น 5% ต่อปี #เมื่อครบ 30 ปีเราจะมีเงินออมรวมเท่าไร total_future_value(100000, 0.05, 30) # เงินที่เราใส่เข้าไปทั้งหมด 30 x 100,000 บาท = 3 ล้านบาทจะงอกเงยเป็นประมาณ 7 ล้านบาทใน 30 ปี # # สมมุติเราเริ่มออมตั้งแต่เริ่มทำงาน และทำงานไป 40 ปี เงินรวมทั้งหมดจะเป็นประมาณ 13 ล้าน (ซึ่งงอกเงยจากเงินฝาก 40 x 100,000 บาท = 4 ล้านบาท) # In[11]: total_future_value(100000, 0.05, 40) # ถ้าออมเงินทุกปีๆละ 1 บาท ที่ผลตอบแทน 0%, 2%, 5%, 7%, 10%, 15%, 20% เป็นเวลา 10, 20, 30, 40, 50 ปี จะมีเงินรวมตอนจบดังนี้: # In[12]: ผลตอบแทน = (0,2,5,7,10,15,20) print("ปีที่ออม", end="") for i in ผลตอบแทน: print(f"\t{i}%", end="") print() for ปี in (10, 20, 30, 40, 50): print(f"{ปี}", end="") for i in ผลตอบแทน: print(f"\t{total_future_value(1,i/100,ปี):.0f}", end="") print()