The words you are searching are inside this book. To get more targeted content, please make full-text search by clicking here.
Discover the best professional documents and content resources in AnyFlip Document Base.
Search
Published by suriyan, 2022-09-17 23:25:38

139_1-Python-Book-2022-Edit_share

139_1-Python-Book-2022-Edit_share

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

4.6 ใชล้ ูป for เพื่อคำนวณหาเลขยกกำลงั หากไดผ้ ลลพั ธเ์ ป็นจำนวนเตม็ ก็จะตัดเศษท้ิง
import math
base = float(input('เลขฐาน: '))
power = int(input('เลขช้ีกำลงั (จำนวนเต็มบวก): '))
if power >= 0:

result = 1
for i in range(0, power):

result *= base
'''
เนอ่ื งจากเลขฐานและผลลพั ธ์เป็นชนดิ float ดงั นน้ั หากใส่หรือไดผ้ ลลพั ธเ์ ป็นเลขจำนวน
เต็ม
เม่ือแสดงเป็นเลขที่มที ศนิยม(.0) ซง่ึ เราอาจปรบั แตง่ การแสดงผลใหม่
ใหต้ รงตามข้อมูลจรงิ ดว้ ยการตรวจสอบดังตอ่ ไปนี้
'''
#ถา้ หารดว้ ย 1 ลงตวั แสดงวา่ เป็นจำนวนเตม็ (หรอื ทศนิยมเป็น .0) หรอื ใช้วธิ อี น่ื ก็ได้
if result % 1 == 0:

result = math.trunc(result)

if base % 1 == 0:
base = math.trunc(base)

print(f'{base} ** {power} = {format(result, ",")}')
else:

print('กรณุ าใส่เลขช้กี ำลังเปน็ จำนวนเตม็ บวก')

บี ที ีทีี5ีีคีาีสีงีคีวีบีคีมีทีศีทีาีงีกีาีรีทีาีงีาีนีขีอีงีโีปีรีแีกีรีม 143

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

4.7 สร้างตารางสตู รคณู จากการใช้ลูป for ซอ้ นกันสองชั้น
text = 'ตารางสูตรคณู \n'
text += '*************\n'

for i in range(1, 6): #ลูปชน้ั นอก (i) สำหรบั ตวั เลขซ่ึงจดั เรียงในแนวตัง้

for j in range(1, 11): #ลูปชน้ั ใน (j) สำหรับเลขตวั คูณ
if j == 1: #ไมต่ อ้ งเวน้ ช่องว่างก่อนเรมิ่ แต่ละแถว
text += '' #ถา้ ผลคณู เป็นเลขตัวเดยี ว ให้เวน้ ชอ่ งว่าง 4 ช่อง
elif i * j < 10: #ถา้ ผลคูณเป็นเลขมากกว่า 1 ตวั ให้เว้นชอ่ งวา่ ง 2
text += ' '
else:
text += ' '

ช่อง

text += str(i * j)

#ถา้ ครบลปู j ใหข้ ้นึ แถวใหม่
text += '\n'

print(text)

144 ีบีทที ีี5ีคี ีาีสีงีคีวีบีคีมีทีศีทีาีงีกีาีรีทีาีงีาีนีขีอีงีโีปีรีแีกีรีม

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

5. แบบฝึกหดั ทา้ ยบท

5.1 จงเขียนโปรแกรมคำนวณหาดัชนมี วลกาย (Body Mass Index: BMI)

สูตร BMI = น้ำหนักตวั /สว่ นสงู 2

โดยนำ้ หนักมหี นว่ ยเป็นกิโลกรัม และสว่ นสงู มีหนว่ ยเปน็ เมตร แล้วเทยี บภาวะน้ำหนกั ตัวดงั นี้

BMI ภาวะนำ้ หนกั ตัว

> 30 โรคอว้ นอนั ตราย

>= 25 โรคอ้วน

>= 23 น้ำหนักเกิน

>= 18.5 สมส่วน

< 18.5 นำ้ หนกั ตำ่ กว่าเกณฑ์

Output

5.2 จงเขยี นโปรแกรมคำนวณภาษีเงนิ ไดบ้ คุ คลธรรมดาแบบง่าย โดยทโ่ี จทย์กำหนดให้

รบั ค่าจ้างเปน็ รายเดือนให้คณู ดว้ ย 12 จะไดเ้ ปน็ เงินเดือนสุทธิ (30,000 x 12)
- หักค่าลดหย่อนส่วนตวั อัตรา 4% สงู สุดไมเ่ กนิ 60,000 บาท
- หกั คา่ ประกันสังคมลดหยอ่ นภาษีได้ 5% สงู สดุ ไมเ่ กนิ 9,000 บาท

(ประกนั สงั คมคิดในอัตรา 5% ของเงนิ เดอื น ทกุ เดือน) (30,000 x 5/100) x 12 =
15,000 แต่กฎหมายใหส้ ูงสดุ ไม่เกนิ 9,000 บาท

ีบที ีทีี5ีีคีาีสีงีคีวีบีคีมีทีศีทีาีงีกีาีรีทีาีงีาีนีขีอีงีโีปีรีแีกีรีม 145

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

Output

5.3 จงเขียนโปรแกรมเพื่อรบั คา่ ขอ้ มลู จากคยี บ์ อรด์ เปน็ ตัวเลข 0-9 เพยี งตัวเดยี ว จากนั้นแสดง
คำอา่ นเป็นเลขตัวนั้นพรอ้ มคำอ่านเป็นเลขไทย โดยอาจใช้ if - elif ในการเปรียบเทียบ เช่น

If gigit == 0:


elif digit == 1:


5.4 จงเขยี นโปรแกรมเพือ่ รบั คา่ ขอ้ มลู จากคยี ์บอรด์ ให้รับขอ้ มูลตวั เลข 0-9 จากน้นั ตรวจวสอบ
วา่ ตวั เลขใดที่มีค่ามากท่สี ุดและผลรวมของตวั เลข

146 บี ีทีทีี5ีคี ีาีสีงีคีวีบีคีมีทีศีทีาีงีกีาีรีทีาีงีาีนีขีอีงีโีปีรีแีกีรีม

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

5.5 ถ้าลิฟต์รับน้ำหนกั ของนกั ศกึ ษาไมเ่ กิน 6 คน ไมเ่ กิน 450 กโิ ลกรมั ให้เขยี นโปรแกรมเพ่ือรบั
ค่าข้อมูลนำ้ หนกั จากคีย์บอร์ด และถ้านำ้ หนกั เกินกวา่ ทก่ี ำหนดให้แสดงคำแจง้ เตอื น ดงั ตัวอย่าง
ผลลัพธ์

5.6 จงสร้างสมาเหลย่ี มจากการเรียงลำดบั ตวั เลขให้ไดร้ ูปแบบเหมอื น pattern A และ B โดยใช้
ลูป ดังภาพ

บี ที ีทีี5ีีคีาีสีงีคีวีบีคีมีทีศีทีาีงีกีาีรีทีาีงีาีนีขีอีงีโีปีรีแีกีรีม 147

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

บทท่ี 6
ฟังก์ชนั และโมดูล

ในการพัฒนาโปรแกรมขนาดใหญแ่ ละมซี ับซอ้ นมากขน้ึ กม็ คี วามจำเป็นตอ้ งแบ่งขั้นตอนการ
ทำงานแตล่ ะอยา่ งออกเป็นส่วนย่อยๆ ให้มหี นา้ ทกี่ ารทำงานอยา่ งใดอยา่ งหนึ่ง เพอื่ เรยี กใชง้ านในแต่
ละส่วน โดยไม่ต้องเขยี นโคด้ ซำ้ ๆ เรยี กวา่ ฟงั ก์ชนั (Function) หมายถงึ สว่ นของโค้ดหรอื โปรแกรม
ทีท่ ำงานเพอ่ื วัตถปุ ระสงค์บางอย่าง ในภาษาไพทอนสามารถสรา้ งฟงั กช์ ันเองเพอ่ื ใหท้ ำงานท่ตี ้องการ
ในการเขยี นโปรแกรมเรามักจะแยกโคด้ ทม่ี ีการทำงานเหมอื นๆ กนั เป็นฟงั กช์ ันเอาไว้ และเรียกใช้
ฟงั ก์ชันนัน้ ซ้ำๆ ซึง่ เปน็ แนวคิดของการนำโค้ดกลบั มาใช้ใหม่ (Code reuse) นเ่ี ป็นรูปแบบของการ
ประกาศฟังกช์ ันในภาษาไพทอน ในบทน้ีจะเก่ยี วขอ้ ง ได้แก่ พารามิเตอร์ อาร์กิวเมนต์ แลมบด์ า
และโมดลู

1. ลักษณะของฟงั ก์ชนั ในภาษาไพทอนแบง่ ฟงั กช์ นั ออกเปน็ 2 ประเภทหลักๆ คอื

1.1 Pre-defined function (หรอื Built in function) ฟงั กช์ นั กลุม่ นี้ถกู สรา้ งไวล้ ่วงหน้าจาก
ผู้พัฒนาไพทอนแลว้ และเปน็ ส่วนหนงึ่ ของตวั ภาษา จงึ สามารถเรียกใช้งานได้ทันที เช่น print(),
int(), input(), rang() เปน็ ตน้

1.2 User-defined function ฟังกช์ ันทผ่ี ู้เขียนโปรแกรมพฒั นาขน้ึ ตามวตั ถุประสงค์ของตนเอง
โดยแบง่ ฟังกช์ นั ออกเปน็ 2 ประเภทดงั น้ี

1.2.1 ฟังก์ชันแบบไมส่ ่งคา่ กลับ (void function) ฟงั ก์ชนั แบบน้ีจะกำหนดเพียงการ
กระทำ เแต่ไม่ส่งค่าใดๆออกจากฟังก์ชัน

1.2.2 ฟงั กช์ ันแบบสง่ ค่ากลบั (value-returning function) ฟงั ก์ชันแบบนีจ้ ะกำหนด
เพียงการกระทำ เม่อื ไดผ้ ลลพั ธ์ออกมาจะ เราจะส่งค่าทไ่ี ดก้ ลับไปให้สว่ นท่ีเรยี กใช้ฟังกช์ ันนั้นๆดว้ ย

2. การสร้างฟงั ก์ชันแบบไมส่ ่งค่ากลบั

ในไพทอนมีการกำหนดฟงั กช์ นั โดยใช้ คำสำคัญ def :

รูปแบบ
def ชื่อฟงั ก์ชัน(พารามิเตอร)์ :
คำส่งั ต่างๆ

- Def มาจากคำวา่ define เป็นคียเ์ วิรด์ ในการประกาศเพอ่ื สรา้ งฟังก์ชัน
- ชอ่ื ฟงั ก์ชนั มหี ลกั เกณฑ์คลา้ ยกับการตง้ั ช่อื ตัวแปร เชน่ display , calculate,

show_message เปน็ ตน้

- พารามเิ ตอร(์ parameter) ขอ้ มูลท่ีนำมาใช้ในฟงั ก์ชัน แต่อาจไม่มีก็ได้ ตามความจำเป็น

ของงานท่ีจะทำ

148 ีบีทที ีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

- คำส่งั ต่างๆทีก่ ำหนดการกระทำภายในฟงั กช์ ัน โดยทกุ คำสัง่ จะตอ้ งเยือ้ งโค้ดเข้าไปให้อยู่แนว

เดยี วกันกับคำสงั่ ในบล็อก เชน่

def my_function():
print("Hello from a function")

- การเรยี กใชฟ้ งั ก์ชนั ใหใ้ ชช้ อ่ื ฟังก์ชนั ตามดว้ ย ()

ตวั อย่างที่ 6.1 การเรียกใช้ฟังกช์ ัน
def my_function():
print("Hello from a function")

my_function()
Output
Hello from a function

3. พารามิเตอร์หรืออารก์ ิวเมนต์

พารามิเตอร์ คือ ตัวแปรท่ีแสดงอยใู่ นวงเล็บในนิยามฟงั กช์ นั ถ้ามีมากกวา่ 1 ตวั ให้ค่นั ดว้ ย ,
อาร์กิวเมนต์ คือ ค่าที่ส่งไปยงั ฟงั กช์ นั เมื่อถูกเรียกใช้ หรอื ค่าของพารามเิ ตอร์ อารก์ วิ เมนต์ถกู
ระบไุ ว้หลังชอ่ื ฟงั ก์ชนั ภายในวงเลบ็ สามารถเพมิ่ อาร์กิวเมนตไ์ ดม้ ากเท่าที่ต้องการเพียงคน่ั ด้วย
เครื่องหมาย , เงื่อนไขของพารามิเตอร์ และอาร์กิวเมนต์ สามารถใช้สำหรบั สง่ิ เดยี วกัน: ข้อมลู ท่ี
สง่ ผ่านไปยงั ฟังก์ชนั จำนวนอาร์กิวเมนต์จะตอ้ งเท่ากบั จำนวนของพารามเิ ตอร์
3.1 การจัดลำดบั ของอารก์ ิวเมนต์(Ordering Arguments)

3.1.1 ลำดับของอารก์ วิ เมนต์ ต้องตรงกบั ลำดบั ของของพารามิเตอร์ที่ส่งขอ้ มลู ระหวา่ งกนั
เมื่อจัดลำดับอาร์กิวเมนต์ภายในฟังก์ชนั หรอื การเรยี กใช้ฟังก์ชันอาร์กวิ เมนต์จะตอ้ งเกิดข้ึนตามลำดับ
เฉพาะ:

1. Formal positional arguments
2. *args
3. Keyword arguments
4. **kwarg

ตัวอยา่ งต่อไปนี้มฟี ังกช์ ัน 1 อาร์กวิ เมนต์ (fname) เม่ือฟงั ก์ชนั ถูกเรียกใชเ้ ราจะส่งต่อช่ือจรงิ ซง่ึ ใช้
ในฟังกช์ นั เพอื่ พิมพ์ชอื่ เตม็ :

บี ที ีทีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล 149

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

ตวั อยา่ งท่ี 6.2 การเรยี กใชฟ้ ังก์ชัน 1 อารก์ ิวเมนต์
def my_function(fname):
print(fname + " Piriya")

my_function("Lawan")
my_function("Prim")
my_function("Poom")
Output
Lawan Piriya
Prim Piriya
Poom Piriya

โดยค่าเรมิ่ ต้นจะต้องเรยี กใช้ฟังก์ชนั ดว้ ยจำนวนอาร์กวิ เมนต์ที่ถกู ต้อง หมายความวา่ ถ้า
ฟังก์ชนั คาดหวัง 2 อารก์ วิ เมนตต์ อ้ งเรียกใชฟ้ ังกช์ นั ดว้ ย 2 อารก์ วิ เมนตไ์ มม่ ากและไม่นอ้ ยกว่าน้ี

ตวั อยา่ งที่ 6.3 ฟังก์ชันนี้ต้องการ 2 อาร์กิวเมนต์ และรับ 2 อารก์ ิวเมนต์:
def my_function(fname, lname):
print(fname + " " + lname)

my_function("Lawan", "Piriya")
Output
Lawan Piriya

• Arguments, * args
หากไม่ทราบจำนวนอาร์กวิ เมนต์ทจ่ี ะถกู ส่งไปยงั ฟังก์ชันให้เพิ่ม a *กอ่ นชือ่ พารามิเตอร์

ในนยิ ามฟงั กช์ ัน วธิ นี ีฟ้ งั กช์ นั จะได้รับ tuple ของอากวิ เมนท์ และสามารถเขา้ ถึงรายการตามลำดับ:

ตวั อยา่ งท่ี 6.3 หากไมท่ ราบจำนวนอารก์ ิวเมนต์ให้เพิม่ a *หนา้ ชือ่ พารามิเตอร:์
def my_function(*kids):
print("The youngest child is " + kids[2])

my_function("Malee", "Manee", "Mana")
Output
The youngest child is Mana

150 บี ีทีทีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

ตัวอย่างท่ี 6.4 arguments, * args
def some_args(arg_1, arg_2, arg_3):

print("arg_1:", arg_1)
print("arg_2:", arg_2)
print("arg_3:", arg_3)
args = ("Malee", "Manee", "Mana")
some_args(*args)
Output
arg_1: Malee
arg_2: Manee
arg_3: Mana

ตัวอยา่ งที่ 6.5 arguments, * args
def some_args(arg_1, arg_2, arg_3):

print("arg_1:", arg_1)
print("arg_2:", arg_2)
print("arg_3:", arg_3)
my_list = [2, 3]
some_args(1, *my_list)
Output
arg_1: 1
arg_2: 2
arg_3: 3

ตัวอย่างท่ี 6.6 **kwargs
def some_kwargs(kwarg_1, kwarg_2, kwarg_3):

print("kwarg_1:", kwarg_1)
print("kwarg_2:", kwarg_2)
print("kwarg_3:", kwarg_3)
kwargs = {"kwarg_1": "Malee", "kwarg_2": "Manee", "kwarg_3": "Mana"}
some_kwargs(**kwargs)
Output

kwarg_1: Malee
kwarg_2: Manee
kwarg_3: Mana

ีบที ีทีี6ีีฟีงีกีชีนีแีลีะีโีมีดีล 151

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

ตัวอยา่ งท่ี 6.7 *args
def multiply(*args):

z=1
for num in args:

z *= num
print(z)

multiply(4, 5)
multiply(10, 9)
multiply(2, 3, 4)
multiply(3, 5, 10, 6)
Output
20
90
24
900

• Keyword Arguments
สามารถสง่ อารก์ วิ เมนต์ดว้ ยไวยากรณ์ key = value (ชื่อพารามิเตอร์ = อารก์ วิ เมนต)์

วิธีน้ีลำดบั ในอาร์กวิ เมนตไ์ มม่ ีความสำคญั

ตัวอย่างที่ 6.8 keyword Arguments
def my_function(child3, child2, child1):
print("The youngest child is " + child3)

my_function(child1="Emmy", child2="Tob", child3="Lin")
Output
The youngest child is Lin

• Keyword Arguments, **kwargs
หากไมท่ ราบจำนวน Keyword Argument ที่จะถกู ส่งไปยงั ฟังก์ชนั ใหเ้ พ่มิ เครอ่ื งหมาย

ดอกจนั สองตัว: **ก่อนชื่อพารามิเตอร์ ในขอ้ กำหนดฟงั ก์ชัน

152 บี ีทที ีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

ตัวอย่างที่ 6.9 **kwargs
def print_values(**kwargs):

for key, value in kwargs.items():
print("The value of {} is {}".format(key, value))

print_values(
name_1="Prim",
name_2="Poom",
name_3="Par",
name_4="Peach",
name_5="Pony",
name_6="Paint"

)
Output
The value of name_1 is Prim
The value of name_2 is Poom
The value of name_3 is Par
The value of name_4 is Peach
The value of name_5 is Pony
The value of name_6 is Paint

ดว้ ยวิธีนฟ้ี ังกช์ นั จะไดร้ ับ dictionary ของอาร์กวิ เมนตแ์ ละสามารถเขา้ ถงึ รายการ
ตามลำดบั :

ตัวอยา่ งที่ 6.10 หากไม่ทราบจำนวน Keyword Argument ให้เพม่ิ **หนา้ ช่ือ
พารามิเตอร์:
def my_function(**kid):

print("His last name is " + kid["lname"])
my_function(fname = "Poompat", lname = "Piriya")
Output
His last name is Piriya

• Default Parameter Value
หากเราเรียกใช้ฟงั กช์ นั โดยไมม่ อี ารก์ วิ เมนตจ์ ะใช้ค่าเร่มิ ต้น(default):
- รปู แบบ ชื่อพารามิเตอร์ = ค่าดีฟอลต์

ีบที ีทีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล 153

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

- หากในฟงั กช์ ันเดยี วกนั มพี ารามเิ ตอร์ทั้งแบบมคี า่ ดีฟอลต์ และแบบไม่มคี า่ ดีฟอลต์
ต้องจัดให้ตัวท่ีไม่มคี า่ ดีฟอลตอ์ ยูก่ อ่ นเสมอ

ตวั อย่างท่ี 6.11 ค่าดีฟอลตพ์ ารามิเตอร์
def my_function(country = "Thailand"):
print("I am from " + country)

my_function("Lao")
my_function("Cambodia")
my_function()
my_function("Myanmar")
Output

I am from Lao
I am from Cambodia
I am from Thailand
I am from Myanmar

• Passing a List as an Argument
สามารถสง่ ประเภทข้อมลู ของอารก์ ิวเมนต์ ไปยงั ฟังกช์ ัน (string, number, list,

dictionaryฯลฯ ) และจะถือว่าเป็นประเภทขอ้ มลู เดยี วกนั ภายในฟังกช์ ัน เช่น ถา้ ส่ง List เป็น
อารก์ วิ เมนต์มนั จะยังคงเป็น List เมอ่ื ถงึ ฟังก์ชัน:

ตวั อยา่ งท่ี 6.12 สง่ ประเภทขอ้ มลู ของอาร์กวิ เมนตไ์ ปยงั ฟงั กช์ นั
def my_function(food):
for x in food:

print(x)

fruits = ["apple", "banana", "cherry"]

my_function(fruits)

Output
apple
banana
cherry

154 บี ีทีทีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

4. ฟงั กช์ นั แบบส่งค่ากลับ

หากตอ้ งการให้ฟงั กช์ นั สง่ คืนคา่ ใหใ้ ช้คำส่ัง return:

รปู แบบ
def ช่อื ฟงั กช์ ัน (พารามเิ ตอร)์ :

คำส่งั ตา่ งๆ ภายในฟังก์ชัน
return ขอ้ มลู ทจี่ ะส่งกลบั

ตวั อยา่ งท่ี 6.13 คำสง่ั return:
def my_function(x):
return 5 * x

print(my_function(3))
print(my_function(5))
print(my_function(9))

Output
15
25
45

ฟงั กช์ ันไมส่ ามารถเปน็ คา่ ว่างได้ แตส่ ามารถนิยามฟงั ก์ชนั แบบไมม่ เี นื้อหาได้ โดย pass
statement ใหใ้ ส่คำสง่ั pass เพอ่ื หลกี เลยี่ งข้อผดิ พลาด

def myfunction():
pass

5. การเรียกใช้ฟงั ก์ชนั แบบ Recursion

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

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

ีบที ีทีี6ีีฟีงีกีชีนีแีลีะีโีมีดีล 155

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

ในตวั อย่างนี้ tri_recursion () เป็นฟงั กช์ นั ท่ีเราได้กำหนดไว้เพอ่ื เรยี กตัวเองว่า ("recurse") เรา
ใชต้ ัวแปร k เป็นข้อมลู ซง่ึ จะลดลง ( -1 ) ทกุ ครงั้ ทีเ่ ราเรียกคืน การเรยี กซ้ำจะสิน้ สุดเมอื่ เงอื่ นไขไม่
เกิน 0 (กล่าวคอื เมื่อเป็น 0)

ตัวอย่างที่ 6.14 การเรียกซำ้ (Recursion)
def tri_recursion(k):
if(k > 0):

result = k + tri_recursion(k - 1)
print(result)
else:
result = 0
return result

print("\n\nRecursion Example Results")
tri_recursion(6)
Output
Recursion Example Results
1
3
6
10
15
21

6. ฟังก์ชันแบบแลมบด์ า (Lampda function)

นอกจากการสร้างฟงั กช์ นั ด้วยคำส่งั def ทก่ี ลา่ วมาแลว้ ยงั มฟี ังกช์ นั แบบ แลมป์ดา โดยมี
ลักษณะดงั น้ี

- ฟังก์ชันแลมบด์ าเปน็ ฟังก์ชันท่ีไม่มชี อ่ื อาจเรยี กได้วา่ anonymous function
- ฟังกช์ นั แลมบด์ าสามารถรบั อาร์กิวเมนตจ์ ำนวนเท่าใดก็ได้ แตส่ ามารถมไี ดเ้ พียงนิพจน์เดยี ว

รปู แบบ

lambda arguments : expression

156 บี ีทที ีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

ตัวอย่างที่ 6.15 นพิ จน์ถกู ดำเนินการและผลลพั ธจ์ ะถูกสง่ กลบั : เพมิ่ 10 ในอารก์ วิ เมนต์
a และส่งกลับผลลพั ธ์: ฟังก์ชนั Lambda สามารถรบั อาร์กวิ เมนต์จำนวนเทา่ ใดก็ได:้

x = lambda a : a + 10
print(x(5))
Output
15

ตวั อยา่ งที่ 6.16 คณู อารก์ ิวเมนต์ a ด้วยอาร์กิวเมนต์ b และส่งกลบั ผลลัพธ์:
x = lambda a, b : a * b
print(x(5, 6))
Output
30

ตวั อย่างที่ 6.17 สรปุ อารก์ วิ เมนต์ a, b และ c และส่งกลับผลลัพธ์:
x = lambda a, b, c : a + b + c
print(x(5, 6, 2))
Output
13

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

def myfunc(n):
return lambda a : a * n

ตวั อย่างท่ี 6.18 ใช้นิยามฟงั กช์ นั น้นั เพ่ือสร้างฟังกช์ นั ที่จะเพิม่ จำนวนทสี่ ่งเป็นสองเทา่ :
def myfunc(n):
return lambda a : a * n

บี ที ีทีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล 157

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

mydoubler = myfunc(2)
print(mydoubler(11))
Output
22

หรือใชค้ ำจำกดั ความของฟังกช์ ันเดียวกันเพ่ือสร้างฟงั ก์ชันท่มี ีคา่ เป็น 3 เทา่ ของจำนวนทีส่ ง่ เขา้
มา:

ตัวอยา่ งที่ 6.19 สรา้ งฟงั ก์ชนั ที่มีค่าเป็น 3 เท่า
def myfunc(n):
return lambda a : a * n
mytripler = myfunc(3)
print(mytripler(11))
Output
33

หรอื ใช้นิยามฟงั ก์ชันเดยี วกันเพื่อสร้างฟังก์ชนั ท้งั 2 ในโปรแกรม:

ตัวอย่างท่ี 6.20 นิยามฟงั กช์ ันเดียวกันเพื่อสร้างฟงั ก์ชัน
def myfunc(n):
return lambda a : a * n
mydoubler = myfunc(2)
mytripler = myfunc(3)
print(mydoubler(11))
print(mytripler(11))
Output
22
33

ใชฟ้ ังก์ชันแลมบ์ดาเมอ่ื ต้องใช้ฟงั ก์ชันท่ไี ม่ระบชุ อ่ื ในช่วงเวลาส้ัน ๆ

158 บี ีทีทีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

7. การสรา้ งและใชโ้ มดูล

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

จะเหน็ ว่าโมดูลกค็ ือการแยกสว่ นของโปรแกรมออกไปเป็นอกี ส่วนและสามารถเรียกใชไ้ ด้เมื่อตอ้ งการ
หรือกล่าวอีกนัยหนง่ึ โมดลู กเ็ หมือนไลบรารขี องฟงั กช์ ันและคลาสต่างๆ น่ันเปน็ เพราะวา่ เมอื่
โปรแกรมมขี นาดใหญ่ สามารถแบง่ สว่ นตา่ งๆ ของโปรแกรมออกเป็นโมดลู ย่อยๆ เพื่อใหง้ ่ายตอ่ การ
จดั การและการใชง้ าน ในภาษาไพทอนโมดูลที่ถกู สรา้ งข้นึ มาน้นั จะเป็นไฟลใ์ นรูปแบบ
module_name.py และนอกจากนไ้ี พทอนยังมี Built-in module เปน็ จำนวนมาก เชน่ math เปน็
โมดลู เก่ียวกับฟังกช์ ันทางคณิตศาสตร์ หรอื random เป็นโมดูลเพอื่ จดั การและสมุ่ ตวั เลข เปน็ ตน้

7.1 การสร้างโมดูลในภาษา Python
ในการสร้างโมดลู ในภาษาไพทอนต้องนำโค้ดของโปรแกรม โดยทั่วไปแล้วจะประกอบไปดว้ ย

ตวั แปร ฟังก์ชัน หรือคลาส ไปรวมไว้ในไฟลใ์ หมท่ ่ไี มใ่ ชไ้ ฟลห์ ลักของโปรแกรม ในรปู แบบ
module_name.py โดยท่ี module_name นน้ั เปน็ ชอ่ื ของโมดลู เพอ่ื นำไปใชง้ านในการเขยี น
โปรแกรม โดยการเรียกใชด้ ้วยคำสัง่ import ต่อไปมาดตู ัวอยา่ งการสรา้ งโมดลู ในภาษาไพทอน
# number.py
def factorial(n): # return factorial value of n

if n == 0 or n == 1:
return 1

else:
return n * factorial(n - 1)

def fibonacci(n): # return Fibonacci series up to n

บี ที ีทีี6ีีฟีงีกีชีนีแีลีะีโีมีดีล 159

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

result = []
a, b = 0, 1
while b < n:

result.append(b)
a, b = b, a + b
return result

ในตัวอย่าง เป็นการสรา้ งโมดูลโดยไฟล์ของโมดูลนน้ั มีช่อื ว่า number.py นนั่ หมายความว่า
โมดูลน้ีมีช่อื วา่ number ซง่ึ นี่เปน็ ส่ิงที่เราจะใชส้ ำหรบั เรียกใชง้ านโมดลู ในการเขยี นโปรแกรม ภายใน
โมดลู ประกอบไปด้วย 2 ฟังกช์ นั ท่ที ำงานเก่ยี วกบั ตวั เลข ฟงั ก์ชัน factorial() เป็นฟงั ก์ชันสำหรับหาคา่
Factorial ของตัวเลขจำนวนเต็ม n ซ่งึ เปน็ Recursive function และฟังกช์ ัน fibonacci() ใช้หา
ลำดบั ของ Fibonacci จนถงึ จำนวนเต็ม n

7.2 การนำเข้าโมดลู ดว้ ยคำสั่ง import
หลังจากทเ่ี ราไดส้ รา้ งโมดูลไปแล้ว ตอ่ ไปจะเปน็ การนำโมดูลดังกลา่ วมาใชง้ าน ในภาษาไพ

ทอนนัน้ จะใชค้ ำสง่ั import เพอ่ื นำเขา้ โมดูลเพ่ือนำมาใช้งานในโปรแกรม มาดตู ัวอย่างการใช้งาน
โมดลู number ในตัวอย่างกอ่ นหนา้ น่เี ปน็ โคด้ ของโปรแกรม

ตวั อย่างที่ 7.1 การนำเข้าโมดูลดว้ ยคำสงั่ import
import number
print('5! = ', number.factorial(5))
print(number.fibonacci(100))
Output
5! = 120
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

7.2.1 การนำเขา้ โมดูลดว้ ยคำสงั่ from...import
ในการใชง้ านคำสั่ง import น้ันจะเปน็ การนำเขา้ ออบเจค็ ทั้งหมดในโมดลู เขา้ มายงั

โปรแกรม และการใชง้ านฟงั กช์ ันหรอื ออบเจ็คภายในโมดูลจะตอ้ งนำหน้าดว้ ยชือ่ โมดูลเสมอ ในภาษา
ไพทอนน้นั มคี ำสั่ง from import สำหรบั นำเขา้ ข้อมูลบางส่วนภายในโมดูล และสามารถใชง้ านออบ
เจค็ ได้โดยตรงโดยไมต่ อ้ งมี Prefix ชอ่ื ของโมดลู มาดูตัวอย่างการใช้งาน

ตัวอยา่ งที่ 7.2 การนำเขา้ โมดลู ด้วยคำส่งั from...import

from number import factorial

print('5! = ', factorial(5))
print('3! = ', factorial(3))

160 ีบีทที ีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

5! = 120
3! = 6

ในตวั อยา่ ง เป็นการใช้งานคำสงั่ from ... import เพอื่ นำเขา้ ฟงั ก์ชนั ภายใน
โมดูล number จะเหน็ ไดว้ า่ เราไดน้ ำเขา้ เพียงฟังก์ชัน factorial() เขา้ มาในโปรแกรมและในตอนใช้
งานน้นั สามารถใช้ได้โดยทไี่ มต่ ้องใช้ Prefix ในการเรียกใช้

from number import factorial, fibonacci
# or
from number import *

ตวั อยา่ งท่ี 7.3 นำเข้าโมดูล random เพอ่ื สร้างตวั เลขสุ่ม

import random

for i in range(10):
print(random.randint(1, 25))

Output
18
5
22
8
4
25
13
3
2
15

ตวั อยา่ งท่ี 7.4 นำเข้าโมดูล random และ math

import random
import math

for i in range(5):
print(random.randint(1, 25))

print(math.pi)
Output
5

ีบที ีทีี6ีีฟีงีกีชีนีแีลีะีโีมีดีล 161

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

17
19
17
2
3.141592653589793

7.2.2 โมดูลนามแฝง
สามารถแกไ้ ขชอ่ื ของโมดูลและฟงั กช์ ันภายในไพทอนดยใช้คำสำคัญ as

หากต้องการเปลี่ยนชือ่ เนื่องจากได้ใชช้ อ่ื เดยี วกันสำหรบั อยา่ งอืน่ ในโปรแกรมแลว้ โมดูลอ่นื ที่ import
ก็ใช้ช่ือนนั้ เชน่ กัน หรอื อาจต้องการยอ่ ชือ่ ท่ยี าวขน้ึ ซึ่งใช้บอ่ ยมาก โครงสรา้ งของคำสงั่ น้มี ีลักษณะดงั น:้ี
import [module] as [another_name]

ตวั อย่างท่ี 7.5 โมดลู นามแฝง
import math as m
print(m.pi)
print(m.e)
Output
3.141592653589793
2.718281828459045

162 ีบีทที ีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

8. กจิ กรรม

8.1 จงเขียนโปรแกรมเพ่อื สร้างฟังก์ชนั เดยี วเพอ่ื รบั พารามเิ ตอรเ์ ป็นจำนวนหลกั ท่ีจะออกรางวลั
จากน้ันส่งคา่ กลับออกไป
import random

def rand_num(length):
result = ''
for n in range(0, length):
r = random.randrange(0, 9)
result += str(r)

return result
#------------------------------------------------------------
print(

'รางวลั ที่ 1:', rand_num(6), '\n',
'รางวัลเลขหนา้ 3 ตวั :', rand_num(3), '', rand_num(3), '\n',
'รางวัลเลขทา้ ย 3 ตวั :', rand_num(3), '', rand_num(3), '\n',
'รางวัลเลขทา้ ย 2 ตวั :', rand_num(2), '\n',
end=''
)

8.2 จงเขยี นโปรแกรมเพ่อื สรา้ งฟังก์ชนั สำหรับตรวจสอบคา่ วนั เดือนปีว่าตรงตามหลักการหรอื ไม่
โดยประเด็นสำคัญทตี่ ้องพจิ ารณาดงั นี้

• อนญุ าตใหใ้ ชเ้ คร่อื งหมายแบ่งวนั เดอื นปี อย่างใดอย่างหนึ่งระหวา่ ง /, - , หรือ . เท่าน้ัน
• รูปแบบที่ยอมรบั คอื ต้องเรยี งลำดับและอยใู่ นช่วงวนั ที่ (1-31) เดอื น (1-12) ปี ค.ศ.
(1-9999)

#ฟงั ก์ชนั สำหรับตรวจสอบว่าเป็นปี leap year หรือไม่ ซึ่งเงอ่ื นไขคอื
#(หารดว้ ย 400 ลงตวั ) หรอื (หารด้วย 4 ลงตวั แตห่ ารดว้ ย 100 ไมล่ งตวั )
def leapyear(year):

บี ที ีทีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล 163

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0 ):
return True

else:
return False

#ตรวจสอบว่าวันเดอื นปี โดยคดั แยกแตล่ ะสว่ นออกจากกัน
def check_date(dd_mm_yyyy):

datestr = str(dd_mm_yyyy)
sep = ''
if datestr.count('/') != 0:

sep = '/'
elif datestr.count('-') != 0:

sep = '-'
elif datestr.count('.') != 0:

sep = '.'
else:

return 'Error: ตอ้ งแบ่งวันเดอื นปดี ว้ ย / หรือ - หรือ .'

d = datestr.split(sep)
for (i, x) in enumerate(d):

if d[i].isdigit():
d[i] = int(x)

else:
return 'Error: วันเดอื นปีต้องเปน็ ตัวเลข'

#d[0] วนั ท,ี่ d[1] เดือน, d[2] ปี
if d[0] not in range(1, 31):

return 'Error: วนั ท่ตี อ้ งอย่รู ะหว่าง 1-31'
elif d[1] not in range(1, 12):

return 'Error: เดอื นต้องอยรู่ ะหวา่ ง 1-12'
elif d[2] not in range(1, 9999):

return 'Error: ปตี ้องอยู่ระหวา่ ง 1-9999'
elif d[1] == 2:

if d[0] > 28 and not leapyear(d[2]):
return f'Error: เดือนกมุ ภาพันธ์ปี {d[2]} มี 28 วัน'

elif d[0] > 29 and leapyear(d[2]):
return f'Error: เดือนกุมภาพนั ธป์ ี {d[2]} มี 29 วัน'

elif d[0] == 31 and d[1] not in [1, 3, 5, 7, 8, 10, 12]:

164 บี ีทีทีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

return 'Error: เดือนน้ีมีเพียง 30 วนั '
return 'OK: เป็นวันเดอื นปีท่ีถกู ต้อง'
#---------------------------------------------------------------
dt = ['20-02-2002', '20/20/2020', '20.10.2010', '31.4.2000', '29/2/2018']
for x in dt:
print(f'{x} => {check_date(x)}')

8.3 จงเขียนโปรแกรมเพอ่ื สรา้ งฟงั ก์ชันคำนวณปริมาตรของรปู ทรง ซ่ึงมีพารามิเตอร์เป็น แลมบ์
ดา โดยหากเราจะคำนวณปริมาตรเป็นรูปทรงใดๆ เมอ่ื เราเรยี กฟังก์ชันก็จะระบุวิธีการในแบบ
แลมบ์ดาแลว้ กำหนดเป็นอารก์ วิ เมนตใ์ ห้กบั แต่เน่อื งจากรูปทรงแต่ละแบบจะใชจ้ ำนวนข้อมลู ที่
แตกต่างดังน้นั ก็จะมพี ารามิเตอรอ์ ีก
def shape_volume(*dimension, func):

return func(*dimension)
#------------------------------------------------------------
sphere = shape_volume(10, func=lambda r: (4 / 3) * 3.14 * (r ** 3))
print('sphere volume =', format(sphere, '.2f'))
cuboid = shape_volume(10, 20, 30, func=lambda w, l, h: w * l * h)
print('cuboid volume =', cuboid)
cylinder = shape_volume(10, 20, func=lambda r, h: 3.14 * (r ** 2) * h)
print('cylinder volume =', cylinder)

ีบที ีทีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล 165

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

8.4 จงเขยี นโปรแกรมเพื่อฝาก ถอน และแสดงยอดคงเหลือ ดำเนนิ การอย่างต่อเนือ่ งจนกวา่ ผู้ใช้
จะกดยกเลิก ขัน้ ตอนดังนี้

• สรา้ งเลขส่มุ เพอ่ื สมมตุ ิวา่ เปน็ ค่าคงเหลอื เร่ิมแรก
• แสดงเมนใู ห้เลอื กวา่ จะฝาก ถอน แสดงยอดคงเหลอื หรือ ยกเลกิ

1. ถ้าเลอื ก แสดงยอดคงเหลือ กอ็ ่านค่ามาแสดง
2. ถา้ เลือกยกเลิกก็หยุดการทำงาน
3. ถ้าเลือก ฝาก หรือ ถอน ใหร้ บั ขอ้ มลู เปน็ จำนวนเงิน แลว้ นำข้อมลู ท่ไี ดไ้ ป

ดำเนินการ หลงั จากนนั้ ก็แสดงยอดคงเหลอื
4. หลังจากแสดงยอดคงเหลือใหน้ ำเมนูกลบั มาแสดงอกี และทำซ้ำเช่นน้ีไปเร่อื ยๆ

import random

balance = random.randint(10_000, 50_000)
menu = 1
amount = 0

def select_menu():
global menu
print('\nกรุณาเลอื กเมน'ู )
menu = input('1: ฝาก, 2: ถอน, 3: ถามยอด, 0: ยกเลกิ >>')
if not menu.isdigit() or int(menu) not in range(1, 4):
exit(0)
else:
menu = int(menu)

if menu in range(1, 3):
get_amount()

elif menu == 3:
show_balance()

def get_amount():
global amount
a = input('จำนวนเงิน >>')
if not a.isdigit():
print('ต้องระบุเปน็ เลขจำนวนเต็ม')
get_amount()
else:
amount = int(a)

166 ีบีทีทีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

if menu == 1:
deposit()

elif menu == 2:
withdraw()

def deposit():
global balance
balance += amount
show_balance()

def withdraw():
global balance
if amount <= balance:
balance -= amount
show_balance()
else:
print('ยอดคงเหลอื ไมเ่ พียงพอ')

def show_balance():
print('ยอดคงเหลือ: ', format(balance, ","))
select_menu()

#----- ทดสอบ ---------------------------------------
show_balance()
select_menu()

ีบที ีทีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล 167

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

9. สรุปท้ายบท

ฟงั ก์ชนั (Function) คือ ส่วนของโค้ดหรอื โปรแกรมทท่ี ำงานเพือ่ วตั ถุประสงคบ์ างอยา่ ง ใน
ภาษาไพทอนสามารถสรา้ งฟังกช์ นั เองเพือ่ ให้ทำงานท่ตี ้องการ ในการเขียนโปรแกรมเรามักจะแยกโคด้
ที่มีการทำงานเหมอื นๆ กนั เป็นฟังกช์ ันเอาไว้ และเรียกใช้ฟังกช์ ันนัน้ ซ้ำๆ ซึ่งเปน็ แนวคิดของการนำ
โค้ดกลบั มาใช้ใหม่ (Code reuse) นเ่ี ปน็ รปู แบบของการประกาศฟงั กช์ นั ในภาษาไพทอน

โมดูล (Module) คอื ไฟลห์ รือสว่ นของโปรแกรมท่ใี ชส้ ำหรับกำหนดตวั แปร ฟงั กช์ ัน หรอื คลาส
โดยแบ่งยอ่ ยอีกหน่วยหน่ึงจากโปรแกรมหลกั และในโมดูลยังสามารถประกอบไปด้วยคำสงั่
ประมวลผลการทำงานได้ และเรยี กใช้งานได้เมอื่ ต้องการ นำเข้าโมดูลด้วยส่ัง import และคำสง่ั
from import

10. แบบฝกึ หดั ทา้ ยบท

10.1 จงสร้างฟังก์ชันในลกั ษณะดังตอ่ ไปน้ี
• random_lowercase_letters(length) เพื่อสร้างอกั ขระ a-z แบบสมุ่ ใหไ้ ด้

จำนวนตามค่าของพารามเิ ตอร์ length
• random_uppercase_ letters(length) เพื่อสรา้ งอักขระ A-Z แบบสมุ่ ให้ได้

จำนวนตามคา่ ของพารามิเตอร์ length
• random_digits(length) เพือ่ สรา้ งตวั เลข 0-9 แบบสุ่ม ใหไ้ ด้จำนวนตามค่าของ

พารามเิ ตอร์ length (ตัวแรกต้องไมเ่ ปน็ 0)

10.2 จากกิจกรรมข้อที่ 4 สรา้ งฟังก์ชนั คำนวณปรมิ าตรของรปู ทรง ซง่ึ มีพารามิเตอร์เปน็ แลมบ์
ดา ให้เปลย่ี นมาเปน็ ฟังก์ชนั คำนวณหาพนื้ ทขี่ องรปู ทรงแทน โดยมีรูปแบบเป็น
shap_area(*.dimension, func)

168 บี ีทที ีี6ีฟี ีงีกีชีนีแีลีะีโีมีดีล

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

บทที่ 7
การสร้างกราฟด้วย Matplotlib

การเขียนโปรแกรมนั้นหลายครง้ั เราจะต้องทำงานกบั ข้อมลู เชิงตัวเลขอยเู่ สมอ เชน่ การทำ
เวบ็ ช้อปป้งิ ออนไลน์ กจ็ ะตอ้ งมีขอ้ มลู ราคาของสินค้า, ยอดการส่ังซื้อ หรอื จำนวนรายรับทเ่ี ข้ากระเป๋า
ของเรา และบางคร้งั เราก็อยากท่จี ะนำตวั เลขเหล่านนั้ มาลองพลอ็ ทเป็นกราฟเพ่อื ดูแนวโน้ม หรอื
ภาพรวมเพือ่ นำไปวเิ คราะหอ์ ะไรบางอย่าง วันนเ้ี ราเลยจะมานำเสนอการพล็อทกราฟดว้ ยภาษาไพ
ทอน

1. Matplotlib คอื อะไร

Matplotlib เปน็ ไลบรารีการพล็อทกราฟระดบั ต่ำในไพทอนทท่ี ำหน้าท่เี ป็นยทู ลิ ติ ้ีการแสด
ภาพ สรา้ งขน้ึ โดย John D. Hunter เปน็ โอเพน่ ซอรส์ และเราสามารถใช้งานได้อย่างอสิ ระ ส่วนใหญ่
เขียนด้วยไพทอนบางกล่มุ เขียนดว้ ย C, Objective-C และ Javascript สำหรับความเข้ากนั ได้ของ
แพลตฟอรม์

2. Matplotlib Codebase อย่ทู ่ีไหน

ซอร์สโค้ดสำหรบั Matplotlib อยู่ที่ทเ่ี ก็บ github https://github.com/matplotlib/

matplotlib

บี ที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib 169

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

3. การตดิ ตง้ั Matplotlib (Installation of Matplotlib)

หากมี Python และ PIP ติดต้งั อยูใ่ นระบบแล้ว การตดิ ตัง้ Matplotlib น้นั งา่ ยมาก ติดตง้ั
โดยใช้คำสั่งน:ี้

หากคำสง่ั น้ลี ม้ เหลว ใหต้ ิดตัง้ Matplotlib ผา่ นโปรแกรมอ่ืน เช่น Anaconda, Spyder เป็น
ตน้

4. การนำเขา้ Matplotlib (Import Matplotlib)

เม่อื ติดต้ัง Matplotlib แลว้ ใหน้ ำเข้าในแอปพลเิ คชันโดย
เพม่ิ import module statement:

Import Matplotlib

ตอนนี้ Matplotlib ถูกนำเขา้ และพรอ้ มใชง้ านแล้ว:

5. การตรวจสอบเวอร์ชนั Matplotlib (Checking Matplotlib Version)

สตริงเวอร์ชันถกู เกบ็ ไวภ้ ายใต้ __version__.

ตัวอย่างท่ี 7.1 ตรวจสอบเวอรช์ ัน Matplotlib
import matplotlib
print(matplotlib.__version__)
Output
3.2.1

หมายเหต:ุ ใช้อกั ขระขดี ล่างสองตวั (underscore characters) ใน__version__.

6. การสรา้ งกราฟด้วย Matplotlib

6.1 Matplotlib Pyplot
6.2 Matplotlib Plotting
6.3 Matplotlib Markers
6.4 Matplotlib Line
6.5 Matplotlib Labels
6.6 Matplotlib Grid
6.7 Matplotlib Subplots
6.8 Matplotlib Scatter

170 ีบที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

6.9 Matplotlib Bars
6.10 Matplotlib Histograms
6.11 Matplotlib Pie Charts
6.1 Matplotlib Pyplot

Pyplot ยูทลิ ติ ี้ Matplotlib ส่วนใหญอ่ ยู่ภายใต้โมดลู ย่อย pyplot และมักจะนำเข้าภายใต้
นามแฝง plt
import matplotlib.pyplot as plt

ตอนนี้ Pyplot package สามารถอา้ งถึงดว้ ย plt
ตัวอยา่ งท่ี 7.2 ลากเสน้ ในไดอะแกรมจากตำแหนง่ (0,0) ไปยงั ตำแหน่ง (6,250)
import matplotlib.pyplot as plt
import numpy as np
xpoints = np.array([0, 6])
ypoints = np.array([0, 250])
plt.plot(xpoints, ypoints)
plt.show()

บี ที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib 171

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

6.2 Matplotlib Plotting
6.2.1 กราฟจดุ x และ y
ฟังกช์ นั plot() ทใี่ ชใ้ นการวาดจดุ (เคร่ืองหมาย) ในแผนภาพ โดยค่าเร่มิ ต้นฟงั ก์ชัน

plot() จะลากเสน้ จากจดุ หน่ึงไปยังอกี จดุ หน่งึ ฟงั ก์ชันใชพ้ ารามิเตอร์เพ่อื ระบุจุดในไดอะแกรม
พารามเิ ตอร์1 เป็นอาร์เรยท์ ่มี ีจดุ ทีแ่ กน x (x-axis)
พารามิเตอร์2 เปน็ อารเ์ รย์ทม่ี จี ดุ ทแี่ กน y (y-axis )
หากเราตอ้ งการวาดกราฟเส้นจาก (1, 3) ถงึ (8, 10) เราตอ้ งส่งสองอารเ์ รย์ [1, 8]

และ [3, 10] ไปยังฟงั ก์ชันกราฟ
ตวั อย่างท่ี 7.3 ลากเสน้ ในไดอะแกรมจากตำแหน่ง (1, 3) ไปยงั ตำแหนง่ (8, 10)

import matplotlib.pyplot as plt
import numpy as np
xpoints = np.array([1, 8])
ypoints = np.array([3, 10])
plt.plot(xpoints, ypoints)
plt.show()

172 บี ที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

6.2.2 กราฟแบบไมม่ เี สน้ (Plotting Without Line)
หากต้องการกราฟเฉพาะตวั ทำเคร่อื งหมาย(Marker) สามารถใช้พารามิเตอร์

สญั ลักษณ์ shortcut string notation 'o' ซ่ึงหมายถงึ 'rings'
ตวั อยา่ งที่ 7.4 วาดจดุ สองจดุ ในแผนภาพ จดุ หนงึ่ อยูท่ ่ตี ำแหนง่ (1, 3) และจดุ หน่งึ อยใู่ น

ตำแหนง่ (8, 10):
import matplotlib.pyplot as plt
import numpy as np
xpoints = np.array([1, 8])
ypoints = np.array([3, 10])
plt.plot(xpoints, ypoints, 'o')
plt.show()

ีบที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib 173

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

6.2.3 กราฟแบบหลายจุด(Multiple Points)
สามารถสร้างกราฟจดุ ไดม้ ากเทา่ ทตี่ ้องการ เพยี งตรวจสอบให้แนใ่ จว่ามจี ำนวนจดุ

เทา่ กันในทง้ั สองแกน
ตวั อย่างท่ี 7.5 ลากเส้นในไดอะแกรมจากตำแหนง่ (1, 3) ถึง (2, 8) จากนัน้ ถึง (6, 1)

และสดุ ทา้ ยไปยังตำแหนง่ (8, 10):
import matplotlib.pyplot as plt
import numpy as np
xpoints = np.array([1, 2, 6, 8])
ypoints = np.array([3, 8, 1, 10])
plt.plot(xpoints, ypoints)
plt.show()

6.2.4 Default X-Points
หากเราไม่ระบจุ ุดในแกน x จดุ เหล่านนั้ จะได้รบั ค่าเรมิ่ ตน้ 0, 1, 2, 3 ฯลฯ ขน้ึ อยูก่ ับ

ความยาวของจุด y ดงั นน้ั หากเราใช้ดังตัวอยา่ ง 7.5 และไมท่ ง้ิ จดุ x ไว้ ไดอะแกรมจะมีลักษณะดงั
ตัวอยา่ ง ดงั นั้น หากเราเอาตวั อยา่ งเดยี วกนั กับดา้ นบน และไมท่ ง้ิ จดุ x ไว้ ไดอะแกรมจะมีลักษณะดงั
ตวั อยา่ งที 7.6 นี้

174 บี ที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

ตัวอยา่ งที่ 7.6 การกราฟโดยไม่มจี ดุ x:
import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([3, 8, 1, 10, 5, 7])
plt.plot(ypoints)
plt.show()

จุด x ในตวั อยา่ งด้านบน คือ [0, 1, 2, 3, 4, 5]
6.3 Matplotlib Markers

สามารถใชอ้ ารก์ ิวเมนต์คำหลกั marker เพอื่ เนน้ แต่ละจดุ ดว้ ยเคร่ืองหมายที่ระบ:ุ
ตัวอยา่ งท่ี 7.8 ทำเครือ่ งหมายแต่ละจดุ ดว้ ยวงกลม:
import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([3, 8, 1, 10])
plt.plot(ypoints, marker = 'o')
plt.show()

บี ที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib 175

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

ตัวอยา่ งที่ 7.7 ทำเคร่อื งหมายแตล่ ะจุดด้วยดาว:

...
plt.plot(ypoints, marker = '*')
...

เคร่ืองหมายอา้ งอิง (Marker Reference)

ตารางที่ 20 เครือ่ งหมายอา้ งอิง

Marker Description Marker Description
'o' Circle 'H' Hexagon
'*' Star 'h' Hexagon
'.' Point 'v' Triangle Down
',' Pixel '^' Triangle Up
'x' X '<' Triangle Left
'X' X (filled) '>' Triangle Right

176 บี ที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

Marker Description Marker Description
'+' Plus '1' Tri Down
'P' Plus (filled) '2' Tri Up
's' Square '3' Tri Left
'D' Diamond '4' Tri Right
'd' Diamond (thin) '|' Vline
'p' Pentagon '_' Hline

6.3.2 รูปแบบสตรงิ fmt (Format Strings fmt)

สามารถใชพ้ ารามเิ ตอร์ shortcut string notation เพื่อระบตุ ัวทำ
เคร่อื งหมายพารามเิ ตอรน์ ีเ้ รยี กอกี อย่างวา่ fmt และเขยี นดว้ ยไวยากรณน์ ี:้

marker|line|color

ตวั อยา่ งท่ี 7.9 ทำเครื่องหมายแตล่ ะจุดด้วยวงกลม:

import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([3, 8, 1, 10])
plt.plot(ypoints, 'o:r')
plt.show()

ีบที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib 177

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

6.3.1 ขนาดมารก์ เกอร์ (Marker Size)
สามารถใชอ้ าร์กวิ เมนต์คำหลกั markersize หรือเวอร์ชันท่สี ัน้ กวา่ ms เพอื่ กำหนด

ขนาดของเครือ่ งหมาย:

ตัวอยา่ งท่ี 7.10 กำหนดขนาดของเคร่อื งหมายเป็น 20:
import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([3, 8, 1, 10])
plt.plot(ypoints, marker = 'o', ms = 20)
plt.show()

6.3.3 สมี ารก์ เกอร์ (Marker Color)
สามารถใช้อาร์กวิ เมนต์คำหลกั markeredgecolor หรอื ค่าท่สี ้ันกวา่ mec เพื่อ

กำหนดสีของ ขอบของเครอ่ื งหมาย:

ตวั อยา่ งท่ี 7.11 ต้งั ค่าสี EDGE เปน็ สแี ดง:
import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([3, 8, 1, 10])
plt.plot(ypoints, marker = 'o', ms = 20, mec = 'r')
plt.show()

178 ีบที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

ใช้ทัง้ อาร์กิวเมนต์ mec และ mfc เพือ่ กำหนดสีของมาร์กเกอร์ทัง้ หมด:
ตวั อย่างที่ 7.12 กำหนดสขี องทั้งขอบและหน้าเปน็ สีแดง:
import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([3, 8, 1, 10])
plt.plot(ypoints, marker = 'o', ms = 20, mec = 'r', mfc = 'r')
plt.show()

สามารถใช้ค่าสฐี านสบิ หก :

บี ที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib 179

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

ตัวอย่างท่ี 7.13 ทำเครอ่ื งหมายแต่ละจดุ ด้วยสีเขียวทส่ี วยงาม:
...
plt.plot(ypoints, marker = 'o', ms = 20, mec = '#4CAF50', mfc = '#4CAF50')
...

Colors HEX

▪ เลขฐานสบิ หกสี
คา่ สฐี านสิบหกยังได้รับการสนับสนุนในเบราวเ์ ซอรท์ ง้ั หมด

▪ ระบุสีฐานสิบหกด้วย: #RRGGBB
RR (สแี ดง), GG (สเี ขียว) และ BB (สนี ำ้ เงิน) เปน็ จำนวนเต็มฐานสิบหกระหวา่ ง 00 ถงึ FF

ซึ่งระบุความเข้มของสี

180 ีบที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

ตัวอยา่ งเช่น #0000FF จะแสดงเปน็ สนี ำ้ เงนิ เนอื่ งจากองค์ประกอบสีนำ้ เงนิ ถกู ต้งั ค่าเป็น
ค่าสงู สดุ (FF) และองค์ประกอบอน่ื ๆ ถกู ตัง้ ค่าเป็น 00

6.4 กราฟเสน้ (Matplotlib Line)
6.4.1 รปุ แบบเสน้ (Linestyle)
สามารถใช้คยี เ์ วิร์ดอาร์กวิ เมนตl์ inestyleหรอื shorter lsเพอ่ื เปลี่ยนรปู แบบของเสน้

ทลี่ งจดุ :
ตัวอยา่ งที่ 7.14 ใชเ้ ส้นปะ

import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([3, 8, 1, 10])
plt.plot(ypoints, linestyle = 'dotted')
plt.show()

ีบที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib 181

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

ตวั อย่างท่ี 7.15 ใชเ้ ส้นปะ
plt.plot(ypoints, linestyle = 'dashed')

ไวยากรณท์ ่สี น้ั ลง ลกั ษณะเสน้ สามารถเขียนในรูปแบบทส่ี ัน้ กว่าได:้
linestyle เขยี นไดเ้ ป็น ls.
dotted เขยี นไดเ้ ปน็ :.
dashed เขียนไดเ้ ป็น --.

ลักษณะเส้นสามารถเลือกรูปแบบใดก็ได้เหลา่ นี้:

ตารางที่ 21 รปู แบบลกั ษณะเส้น

Style Or
'solid' (default) '-'
'dotted' ':'
'dashed' '--'
'dashdot' '-.'
'None' '' or ' '

182 บี ที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

สเี สน้ สามารถใชอ้ าร์กิวเมนต์คำหลกั color หรอื ค่าทีส่ ั้นกวา่ c เพอื่ กำหนดสขี องเส้น:
ตัวอย่างที่ 7.16 กำหนดสเี สน้ เปน็ สีแดง:

import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([3, 8, 1, 10])
plt.plot(ypoints, color = 'r')
plt.show()

สามารถใชค้ า่ สฐี านสิบหก :
ตวั อย่างที่ 7.17 กราฟด้วยเส้นสเี ขียวที่สวยงาม:
...
plt.plot(ypoints, c = '#4CAF50')
...

บี ที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib 183

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

ตวั อยา่ งท่ี 7.18 กราฟดว้ ยสีชื่อ "hotpink":
...
plt.plot(ypoints, c = 'hotpink')
...

6.4.2 กำหนดความกว้างของเสน้
สามารถใชอ้ ารก์ วิ เมนต์คยี เ์ วริ ด์ linewidth หรอื คา่ ท่ีส้นั กวา่ lw เพ่อื เปลี่ยนความกวา้ ง

ของบรรทัด คา่ เป็น floating number , in points:
ตวั อย่างที่ 7.19 กราฟทม่ี เี ส้นกว้าง 20.5pt:

import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([3, 8, 1, 10])
plt.plot(ypoints, linewidth = '20.5')
plt.show()

184 ีบที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

6.4.3 สร้างกราฟแบบหลายบรรทัด
สามารถสรา้ งกราฟเสน้ ได้มากเท่าทีต่ ้องการโดยเพียงแคเ่ พิ่มฟังก์ชัน plt.plot()

ตัวอย่างท่ี 7.20 วาดสองบรรทัดโดยระบุ plt.plot() ฟังก์ชันสำหรับแต่ละบรรทัด:
import matplotlib.pyplot as plt
import numpy as np
y1 = np.array([3, 8, 1, 10])
y2 = np.array([6, 2, 7, 11])
plt.plot(y1)
plt.plot(y2)
plt.show()

สามารถกราฟหลายบรรทดั ได้ด้วยการเพิ่มจุดสำหรับแกน x และ y สำหรบั แตล่ ะบรรทดั ใน
plt.plot()ฟังก์ชนั เดียวกัน (ในตวั อยา่ งขา้ งตน้ เราระบุเฉพาะจุดบนแกน y เท่านัน้ หมายความวา่ จุด
บนแกน x มีคา่ เร่มิ ตน้ (0, 1, 2, 3)) คา่ x และ y- เป็นค่:ู

บี ที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib 185

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

ตัวอยา่ งท่ี 7.21 วาดเสน้ สองเสน้ โดยระบุคา่ จดุ x และจดุ y สำหรบั ทง้ั สองเส้น:
import matplotlib.pyplot as plt
import numpy as np
x1 = np.array([0, 1, 2, 3])
y1 = np.array([3, 8, 1, 10])
x2 = np.array([0, 1, 2, 3])
y2 = np.array([6, 2, 7, 11])
plt.plot(x1, y1, x2, y2)
plt.show()

6.5 Matplotlib Labels and Title
6.5.1 การสรา้ งป้ายกำกบั สำหรับกราฟ (Create Labels for a Plot)
ไพทอนสามารถใชฟ้ งั กช์ นั xlabel() และ ylabel() เพื่อต้ังคา่ ป้ายกำกับสำหรบั แกน x

และ แกน y

ตัวอยา่ งท่ี 7.22 เพ่มิ ป้ายกำกับใหก้ ับแกน x และ y
import numpy as np
import matplotlib.pyplot as plt
x = np.array([80, 85, 90, 95, 100, 105, 110, 115, 120, 125])
y = np.array([240, 250, 260, 270, 280, 290, 300, 310, 320, 330])
plt.plot(x, y)
plt.xlabel("Average Pulse")
plt.ylabel("Calorie Burnage")
plt.show()

186 ีบที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

6.5.2 สรา้ งช่อื เรอื่ งสำหรบั กราฟ (Create a Title for a Plot)
ตัวอยา่ งท่ี 7.23 สร้างชอื่ เรื่องสำหรับกราฟ

import numpy as np
import matplotlib.pyplot as plt
x = np.array([80, 85, 90, 95, 100, 105, 110, 115, 120, 125])
y = np.array([240, 250, 260, 270, 280, 290, 300, 310, 320, 330])
plt.plot(x, y)
plt.title("Sports Watch Data")
plt.xlabel("Average Pulse")
plt.ylabel("Calorie Burnage")
plt.show()

บี ที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib 187

กี าีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

6.5.3 ต้ังค่าคุณสมบตั ิแบบอักษรสำหรบั ชอ่ื เรอื่ งและป้ายกำกบั
สามารถใช้ fontdict พารามเิ ตอรใ์ น xlabel(), ylabel() และ title() เพือ่ ต้งั ค่า

คณุ สมบัตฟิ อนต์สำหรับชอื่ และป้ายกำกับ
ตวั อยา่ งที่ 7.24 ตั้งคา่ คุณสมบัตแิ บบอกั ษรสำหรับชอื่ เรอ่ื งและป้ายกำกบั

import numpy as np
import matplotlib.pyplot as plt
x = np.array([80, 85, 90, 95, 100, 105, 110, 115, 120, 125])
y = np.array([240, 250, 260, 270, 280, 290, 300, 310, 320, 330])
font1 = {'family':'serif','color':'blue','size':20}
font2 = {'family':'serif','color':'darkred','size':15}
plt.title("Sports Watch Data", fontdict = font1)
plt.xlabel("Average Pulse", fontdict = font2)
plt.ylabel("Calorie Burnage", fontdict = font2)
plt.plot(x, y)
plt.show()

188 ีบที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

6.5.4 ตำแหน่งชอื่ เรอื่ ง
สามารถใช้พารามเิ ตอร์loc ใน title() เพ่อื จัดตำแหนง่ หัวเร่ือง Legal values คอื 'left',

'right', and 'center' Default value คือ 'center'.
ตวั อย่างท่ี 7.25 วางตำแหนง่ ช่อื เรื่องไปทางซา้ ย

import numpy as np
import matplotlib.pyplot as plt
x = np.array([80, 85, 90, 95, 100, 105, 110, 115, 120, 125])
y = np.array([240, 250, 260, 270, 280, 290, 300, 310, 320, 330])
plt.title("Sports Watch Data", loc = 'left')
plt.xlabel("Average Pulse")
plt.ylabel("Calorie Burnage")
plt.plot(x, y)
plt.show()

6.6 เสน้ กรดิ ของกราฟ (Matplotlib Grid)
6.6.1 เพ่ิมเส้นกรดิ (Add Grid Lines to a Plot)
ด้วย Pyplot สามารถใชg้ rid() ฟงั กช์ ันน้ี เพือ่ เพิม่ เสน้ กริดให้กับกราฟ

ีบที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib 189

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

ตัวอย่างที่ 7.26 เพิม่ เส้นกริดใหก้ ับกราฟ:
import numpy as np
import matplotlib.pyplot as plt
x = np.array([80, 85, 90, 95, 100, 105, 110, 115, 120, 125])
y = np.array([240, 250, 260, 270, 280, 290, 300, 310, 320, 330])
plt.title("Sports Watch Data")
plt.xlabel("Average Pulse")
plt.ylabel("Calorie Burnage")
plt.plot(x, y)
plt.grid()
plt.show()

6.6.2 ระบุเส้นกริดทจี่ ะแสดง
สามารถใช้ axis พารามเิ ตอรใ์ นฟงั ก์ชนั grid() เพ่อื ระบเุ สน้ กริดท่ีจะแสดง

Legal values คอื : 'x', 'y' และ 'ทงั้ ' คา่ เริม่ ตน้ คือ 'ท้งั สอง'

ตวั อย่างท่ี 7.27 แสดงเสน้ กรดิ สำหรับแกน x เท่านนั้
import numpy as np
import matplotlib.pyplot as plt

x = np.array([80, 85, 90, 95, 100, 105, 110, 115, 120, 125])
y = np.array([240, 250, 260, 270, 280, 290, 300, 310, 320, 330])

plt.title("Sports Watch Data")
plt.xlabel("Average Pulse")
plt.ylabel("Calorie Burnage")
plt.plot(x, y)

190 ีบที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

plt.grid(axis = 'x')
plt.show()

ตัวอย่างที่ 7.28 แสดงเสน้ กรดิ สำหรบั แกน y เทา่ น้ัน

import numpy as np
import matplotlib.pyplot as plt

x = np.array([80, 85, 90, 95, 100, 105, 110, 115, 120, 125])
y = np.array([240, 250, 260, 270, 280, 290, 300, 310, 320, 330])

plt.title("Sports Watch Data")
plt.xlabel("Average Pulse")
plt.ylabel("Calorie Burnage")
plt.plot(x, y)
plt.grid(axis = 'y')
plt.show()

บี ที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib 191

ีกาีีรีเีขียีนีโีปีรีแีกีรีมีภีาีษีาีไีพีทีอีนีี(Python Programming)

6.6.3 ตงั้ ค่าคุณสมบตั ขิ องเส้นสำหรบั Grid
สามารถต้งั คา่ คุณสมบตั เิ ส้นของเส้นตารางได้ดงั น:้ี

grid (color = ' color ', linestyle = ' linestyle ', linewidth = number )

ตัวอยา่ งที่ 7.29 ต้งั ค่าคุณสมบตั ขิ องเสน้ สำหรบั Grid
import numpy as np
import matplotlib.pyplot as plt
x = np.array([80, 85, 90, 95, 100, 105, 110, 115, 120, 125])
y = np.array([240, 250, 260, 270, 280, 290, 300, 310, 320, 330])
plt.title("Sports Watch Data")
plt.xlabel("Average Pulse")
plt.ylabel("Calorie Burnage")
plt.plot(x, y)
plt.grid(color = 'green', linestyle = '--', linewidth = 0.5)
plt.show()

6.7 กราฟย่อย (Matplotlib Subplots)
6.7.1 แสดงหลายกราฟ (Display Multiple Plots)
ดว้ ยฟงั ก์ชนั subplots() สามารถวาดหลายกราฟในรูปเดียว:

ตวั อยา่ งท่ี 7.30 วาด 2 กราฟ
import matplotlib.pyplot as plt
import numpy as np
#plot 1:

192 บี ที ีทีี7ีีกีาีรีสีรีาีงีกีรีาีฟีดีวียีMatplotlib


Click to View FlipBook Version