บทที่ 1 ทำควำมรู้จักกับภำษำ...
Transcript of บทที่ 1 ทำควำมรู้จักกับภำษำ...
บทท 1 ท ำควำมรจกกบภำษำ Python ภำษำไพทอน (Python programming language) ภาษาไพทอน (Python programming language) เปนภาษาโปรแกรมภาษาระดบสงแบบอนเทอรพรเตอร (Interperter) ทสรางโดย กโด ฟาน รอสซม (Guido van Rossum) ในปพ.ศ. 2533 ปจจบนดแลโดย มลนธซอฟตแวรไพทอน ( Python Software Foundation (PSF)) ซงภาษาไพทอนสามารถใชงานไดบนระบบปฏบตการไมวาจะเปน Unix, Linux, Windows NT, Windows 2000, Windows 95/98/MEXP หรอ OS/X โดย Version ลาสดของ Python ตอนนคอ 3.6.5 จดเดนของภำษำไพทอน ไพทอนเปนภาษาสครปต ท าใหใชเวลาในการเขยนและคอมไพลไมมาก ท าใหเหมาะกบงานดานการดแลระบบ (System administration) เปนอยางยง ไดมการสนบสนนภาษาไพทอนโดยเปนสวนหนงของระบบปฏบตการยนกซ, ลนกซ และสามารถตดตงใหท างานเปนภาษาสครปตของวนโดวส ผานระบบ Windows Script Host ไดอกดวย และ Python เองกไดถกน ามาพฒนา Web application อยางแพรหลาย ซงม Framework ส าหรบท าเวบของ Python ทไดรบความนยมอยางมากคอ Django ไวยำกรณอำนงำย ภาษาไพทอนจะคลายกบภาษา C มาก โดยจะมโครงสรางทไมซบซอน มไวยากรณทไดก าจดการใชสญลกษณทใชในการแบงบลอกของโปรแกรม และใชการยอหนาแทน ท าใหสามารถอานโปรแกรมทเขยนไดงาย นอกจากนนยงมการสนบสนนการเขยน docstring ซงเปนขอความสนๆ ทใชอธบายการท างานของฟงกชน, คลาส, และโมดลอกดวย
ควำมเปนภำษำกำว ไพทอนเปนภาษากาว (Glue Language) ไดอยางดเนองจากสามารถเรยกใชภาษาโปรแกรมอนๆ ไดหลายภาษา ท าใหเหมาะทจะใชเขยนเพอประสานงานโปรแกรมทเขยนในภาษาตางกนได ไลบรำรในไพทอน การเขยนโปรแกรมในภาษาไพทอนโดยใชไลบรารตาง ๆ เปนการลดภาระของโปรแกรมเมอรไดเปนอยางด ท าใหโปรแกรมเมอรไมตองเสยเวลากบการเขยนค าสงทซ าๆ เชนการแสดงผลขอมลออกสหนาจอ หรอการรบคาตาง ๆ ไพทอนมชดไลบรารมาตรฐานมาใหตงแตตดตงอนเตอรพรเตอร นอกจากนนยงมผพฒนาจากทวโลกด าเนนการพฒนาไลบรารซงชวยอ านวยความสะดวกในดานตาง ๆ โดยจะเผยแพรในรปแบบของแพคเกจตาง ๆ ซงสามารถตดตงเพมเตมไดอกดวย สดทายคอ ภาษาไพทอน ท างานเรวทสดเมอเทยบกบภาษา script ดวยกน เชน php, jsp, asp จะพดวา ไพทอน เขยนนอยไดงานมาก ท างานเรวกไมผดนก
บทท 2 โครงสรางและลกษณะการเขยนโปรแกรม ภาษา python จดเปนภาษาทอยในระดบสงเทยบกบภาษา Visual Basic บางกรณทตองการใชงาน
เชงลกในระดบ Kernel ของระบบปฏบตการ การเรยกใชพอรตฮารดแวรตางๆ การจดการระดบหนวยความจ า การเขยนโปรแกรมระบบเครอขายเชงลก ตามทกลาวไวบางสวน ภาษา python ไมมความสามารถเขาไปจดการไดเลย ตองอาศยภาษาอนๆ ทมความสามารถในการเขยนโปรแกรมเชงลก เชน C, C + +, Java ฯลฯ สรางเปนโมดลพเศษไวเชอมตอกบ python ทจะเรยกใชในลกษณะเปนฟงกชนยอยภายในของโมดลพเศษเหลานนอกท ค าสงทเราใชในการอางองโมดลมาตรฐาน หรอโมดลเพมเตมพเศษใน python ประกอบดวย 2 ค าสงดงน 1. ค าสง import 2. ค าสง from
ค าสง import
ตวอยางท 1 การเขยนค าสงอางองโมดลท 1
ตวอยางท 2 การเขยนค าสงอางองโมดลมากกวา 1 โมดล
ตวอยางท 3 การเขยนค าสงอางองโมดลมากกวา 1 โมดล แบบใชค าสง import 1ค าสง
ค าสง import จะเปนการอางองโมดลทเราตองการใชกลมค าสงขางในโมดล การอางองโมดลแบบน Python จะมองเหนกลมค าสงทงหมดในโมดล และพรอมน าไปใชงานไดตลอดเวลา แตบางครงหากเราตองการอางองโมดล และอยากจะเลอกใชเฉพาะค าสง หรอกลมค าสงภายในบางค าสง กตองใชค าสง from ทจะกลาวถงในหวขอตอไป
Import datetime
Import datetime
Import decimal
Import os
Import datetime, decimal, os
ค าสง from
ตวอยางท 1 รปแบบการเขยนค าสง from เพออางองโมดล และกลมค าสงทงหมด
from ชอโมดล import ค าสงหรอกลมค าสง
สญลกษณ * ใชส าหรบเรยกใชงานทกค าสง หรอกลมค าสงในโมดลน
ตวอยางท 2 รปแบบการเขยนค าสง from ส าหรบเรยกใชบางค าสง หรอกลมค าสงในโมดลท
ก าลงอางองในปจจบน
from ชอโมดล import กลมค าสงท 1, กลมค าสงท 2
การเขยนโปรแกรมโดยทวไปดวยภาษา python จะมรปแบบเปนการเขยนกลมค าสงลงในโพรซเจอรหรอฟงกชน แลวท าการเรยกใชงานตามตองการ เหมอนหลกการเขยนโปรแกรมดวยภาษาอนๆ เชน C, C + +, Java ฯลฯ เพองายตอการท าความเขาใจถงวธการเขยนโปรแกรม python ดวย editor พอสรปไดเปน 5 วธดงตอไปน
1. รปแบบการเขยนดวยวธท 1 2. รปแบบการเขยนดวยวธท 2 3. รปแบบการเขยนดวยวธท 3 : แบบ Object Oriented 4. รปแบบการเขยนดวยวธท 4 : แบบสราง Object Oriented พรอมกลมค าสงเรยกใชงาน Object 5. รปแบบการเขยนดวยวธท 5 : แบบ Object Oriented ทเกดจากวธท 3 และ 4 มาประยกตใชงานรวมกน
From os import *
From os import error, chdir, getcwd
รปแบบการเขยนดวยวธท 1
ตามรปท 2.3 การเขยนค าสงตางๆ จะท าการเขยนบรรทดตอบรรทดจากบรรทดแรกไอจนถงบรรทดสดทาย เมอท าการทดสอบโปรแกรม python จะท างานค าสงในบรรทดแรกไปเรอยๆ จนกระทงถงบรรทดสดทายหรอค าสงสดทาย
รปแบบการเขยนดวยวธท 2
ล าดบการ
ทดสอบค าสง
จะท าจาก
บรรทดแรก
ไปจนจบ
ค าสง 1
ค าสง 2
ค าสง 3
ค าสง 4
ค าสง 5
1
2
3
4
5
Python Editor
รปท 2.3 แสดงการเขยนโปรแกรมภาษา
python ดวยค าสงตางๆ โดยไมไดใช
โพรซเจอรหรอฟงกชนของ python
Python Editor
โพรซเจอรท 1
โพรซเจอรท 2
โพรซเจอรท 1
โพรซเจอรท 2
ค าสงท 3
ค าสงท 4
ค าสงภายใน 1
ค าสงภายใน 2
ค าสงภายใน 1
ค าสงภายใน 2
สวน A
จดเรมตน
ของค าสง
สวน B รปท 2.4 แสดงการเขยนโปรแกรม
python ดวยการสรางโพรซเจอรรวมกบ
การใชค าสงปกต
ตามรปท 2.4 เปนรปแบบการเขยนโปรแกรมทนยมใชกน เนองจากกลมค าสงบางกลมจ าเปนตอง
ท างานรวมกนตามล าดบขนตอน เรากน ากลมค าสงเหลานนไปจดสรางไวในโพรซเจอรหรอฟงกชน ซง
เพอความงายในการจดสรางโพรซเจอรหรอฟงกชน ควรจะสรางไวในฐานะ A ตามรปท 2.4 สวนการ
เรยกใชงานโพรซเจอร กใหไปเขยนในสวน B ( ตามรปท 2.4) วธการเขยนตามรปแบบนจะดกบผเขยน
โปรแกรมในระยะยาว ยกตวอยาง ถาผพฒนาไดสรางโปรแกรมขนมาสกโปรแกรมหนง หลงจากสราง
เสรจผานไปสก 1 ป แลวตองกลบมาแกไขเพมเตมในโปรแกรม ถาจดรปแบบการเขยนไวด เรากจะหาจด
ทตองแกไข หรอเพมเตมใหรวดเรว
รปแบบการเขยนดวยวธท 3 : แบบ Object Oriented
ตามรปท 2.5 เปนวธการเขยนโปรแกรมเชงวตถตามรปแบบของ python ซงเปนวธการสราง
Object ขนมาเพอรอใหมการน าไปใชงาน ดงนนจะเหนวาภายใตโครงสรางแบบนจะไมมสวนส าหรบ
เรยกทดสอบโปรแกรม
Class Barcode
Python Editor
Property ท 1
Method ท 1
Method ท 2
รปท 2.5 แสดงการเขยนโปรแกรมเชงวตถ(OO)
เพอสราง Object ดวยภาษา python
รปแบบการเขยนดวยวธท 4 : แบบ Object Oriented พรอมกลมค าสงเรยกใชงาน Object
ในรปท 2.6 กจะคลายการเขยนโปรแกรมตามรปแบบท 3 เพยงแคเพมกลมค าสงในสวน B ( ตาม
รปท 2.6) ส าหรบเรยกใชสวนA ทเปนการสราง Class Object มาใชงานภายใตโครงสรางเดยวกนเลย
รปท 2.6 แสดงวธการเขยนโปรแกรมแบบ Object Oriented รวมกบกลมค าสงทเรยกใชงาน
Object ภายใตโครงสรางเดยวกน
Python Editor
Class Barcode
ค าสงท 1
ค าสงท 2
ค าสงเกยวกบ Barcode
ค าสงท 3
สวน A
จดเรมตน
การทดสอบ
สวน B
Property ท 1
Method ท 1
Method ท 2
รปแบบการเขยนดวยวธท 5 : แบบ Object Oriented ทเกดจากวธท 3 และ 4 มา
ประยกตใชงานรวมกน
ในรปท 2.7 กเปนอกวธทนยมใชงานเชงประยกต ส าหรบการเขยนโปรแกรมเชงวตถของ
python โดยบางกรณกมการสราง Class object จดเกบไปเฉพาะ เมอไรทตองการน ามาใชงานกจะท าการ
Import เขามาใชรวมกบโปรแกรมทก าลงพฒนาในปจจบน
รปท 2.7 แสดงการเขยนโปรแกรมเชงวตถโดยการเรยกใชโมดลทเปน Class object จากภายนอก
มาใชงานเพมเตมรวมกบชดค าสงปจจบน
ดวยลกษณะวธการเขยนโปรแกรมทง 4 วธ ทกลาวไปขางตนส าหรบภาษา python จะท าการ
จดเกบกลมค าสง หรอ (source Code) ในรปแบบไฟลทใชนามสกล .py ซงจะเปนไฟลแบบ
ขอความ (text file) หรออาจแปลงใหเปนรปแบบไฟลไบนาร โดยจะใชนามสกลเปน.pyc
Class Barcode
Import
Class Print Bar
ค าสงท 1
ค าสงอาง Barcode
ค าสงอาง Print Bar
ค าสงท 2
Python Editor
สวน A
สวน B
สวน C
จดเรมตน
ใชงาน ชดค าสงปจจบน
ไฟล .py เปนไฟล source Code แบบ ขอความ
ไฟล .pyc เปนไฟล source Code แบบ ไบนาร
ส าหรบการเขยนซอรสโคดดวย editor ของ python เพอใหงายตอการเขยนโปรแกรม หรอการ
คนหา หรอท าการปรบปรงซอรสโคดในระหวางการเขยนโปรแกรม หรอแกไขเพมเตมใหกบโปรแกรม
หลงจากปดงานเขยนโปรแกรมไปแลว ผเขยนไดแบงโครงสรางการเขยน source Code ของ
python ออกเปน 4 สวน ดงรปท 2.8 ซงประกอบดวย
รปท 2.8 แสดงการแบงพนทส าหรบการใชตวแปร, ฟงกชน และค าสงภายใตโครงสรางของ
โมดลทก าลงพฒนาน
สวน A กรณทตองการอางองกลมค าสงอนๆ จากโมดลมาตรฐานของ python หรอโมดลเพมเตมพเศษ เพอน ามาใชงานในการเขยนโปรแกรมในโมดลน เราจะใชค าสงส าหรบอางองโมดล คอ ค าสง Import และค าสง from...Import สวน B ใชในกรณทตองการสรางตวแปรทสามารถเรยกใชงานไดในสวน C ทเกยวกบโพรซเจอรหรอฟงกชน และสวนD ซงเปนจดทกลมค าสงท างาน
สวน C มไวส าหรบท าการสรางกลมโพรซเจอรหรอฟงกชน เพอใหสามารถเรยกใชงานภายในโมดลน
สวน D เปนจดเรมตนของการท างานในโมดลน ทนเราจะเขยนค าสงตางๆ เพอใชงานรวมกบตวแปรในสวน B หรอการเรยกใชงานโพรซเจอรหรอฟงกชนในสวน C ของโมดลน
ส าหรบการอางองโมดลทงหลายทใชงานใน python Import datetime, os
from datetime import date
Id = 100
dbpath = ‘data.txt’
Def showreport() :
print(‘No.’)
cost = 100 * 0.07
Print(‘Start Program’)
Id = id + 1 showreport()
สวน A
สวน B
สวน C
สวน D
กลมตวแปรทใชใน python ประกาศไวทน ถาหาก
จะใชทกทในsource Code น
ในสวนนเหมาะส าหรบสรางโพรซเจอรหรอ
ฟงกชนทจะใชงานในโมดลน
จดเรมตนของกลมค าสงทท างานในโมดลน
หลงจากท าความเขาใจโครงสรางของการสรางและเขยน source Code ของ python กเหลอสงท
ควรรกอนลงมอเขยนโปรแกรม python อกไมกเรอง เชน การก าหนดค าสงกลมยอยใหกบค าสงหลก
(Indenting), การท าความเขาใจการใชเครองหมาย ‘ หรอ “ ส าหรบตวแปรชนดขอความ (String), การใช
เครองหมาย () [] {} รวมกบตวแปรหรอฟงกชนภายในของ python ( ฟงกชนภายใน ไดแก ค าสง format,
tolower, ฯลฯ) และวธการทดสอบโปรแกรมภายใต editor ของ python กจะท าใหผทตองการศกษา
สามารถทดสอบเขยนโปรแกรมและทดสอบเองได เมอเขยนโปรแกรมคลองขน กสามารถคนหาตวอยาง
source Code ทมความหลากหลาย รวมทงเทคนคการเขยนโปรแกรมแบบพเศษจะ internet มาทดลอง และ
ประยกตเขากบงานทก าลงศกษา หรอสรางเพอน าไปใชงาน
การก าหนดค าสงกลมยอยใหกบค าสงหลก (Indenting)
วธการจดรปแบบโครงสรางของกลมค าสงยอย ภายใตค าสงหลกภาษา python จะอาศยการจดยอ
หนาแทนการใชสญลกษณเหมอนภาษาอน ตามรปท 2.9 แสดงการจดรปแบบโครงสรางของกลมค าสง
ยอยของ python เทยบกบภาษา C
รปท 2.9 แสดงการเปรยบเทยบการจดรปแบบโครงสรางกลมค าสงยอยของภาษา python
ค าสงหลก
for (a = 1; a > 10; ++a)
{
print(a); ค าสงยอย
testdata(); ภายใต for
}
ค าสงหลก
for a in range(1, 10) : print(a); ค าสงยอย
testdata(); ภายใต for
ตองก าหนดยอหนาใหเทากนมฉะนน
python จะเกด Indent Error ไม
สามารถรนทดสอบโปรแกรมได
การจดรปแบบโครงสรางกลมค าสงยอยของ
ภาษา C ใชสญลกษณ{} ส าหรบก าหนดจดเรมตน
ของค าสงยอย และก าหนดจดสนสดภายใตค าสง
หลก for
การจดรปแบบโครงสราง
กลมค าสงยอยของ python โดย
อาศยการจดยอหนาแทนสญลกษณ
โดยตวอยางตามรปท 2.9 จะเปนการใชค าสง for ซงถอวาเปนค าสงหลก และมค าสงยอยเพอให
เกดกระบวนการท างานตามรอบการวนลป คอค าสง print และค าสงท 2 คอเรยกไปทฟงกชน Test Data
ในโมดลใชงาน จะเหนวาการเขยนค าสงยอยของ python จะไมมการใชสญลกษณใดๆ เปนตวบอกการ
เปนค าสงยอย เมอเทยบกบภาษาC ทใชสญลกษณ{ เปนจดเรมตนและใชสญลกษณ} ส าหรบบอก
จดสนสด ภาษา python จะใชการยอหนา ดวยวธการกดปม Space Bar หรอกดป ม Tab กแลวแตผเขยน
โปรแกรมจะถนดแบบใด (แนะน าการยอหนาของค าสงยอย ควรใชปม Tab ดกวา โอกาสเกดขอผดพลาด
จากยอนาจะนอยลง) ถาหากผศกษาเจอขอความ error ตามรปท 2.10 กแสดงวาการยอหนาของค าสงม
ปญหา ซงสวนใหญจะเกดจากการยอหนาไมเทากน
สรป การใชยอหนาเพอแบงค าสงยอย จะใชกบกลมค าสงเชน if, for, while, def (ส าหรบสราง
ฟงกชนเพอเรยกใชงานในโมดลน), Class ( ส าหรบสรางโครงภายในเปนวตถ เชน Property, Method
ฯลฯ) เปนตน
รปท 2.10 แสดงขอความผดพลาดเกยวกบการก าหนดยอหนาหรอ Indent ผดพลาดในการเขยน
โปรแกรม
การท าความเขาใจการใชเครองหมาย ‘ หรอ “ ส าหรบขอความหรอตวแปรชนดขอความ
ใชสญลกษณรวมกบกลมขอความในภาษา python มใหเลอก 2 แบบ คอ การใชสญลกษณฝนทอง
หรอ ‘ (Single Quote) และสญลกษณ ? หรอ “ (Double Quote) โดยผเขยนโปรแกรมสามารถเลอกใชสญลกษณดงกลาวตามความถนด ส าหรบวธการใชงานทง 2 สญลกษณจะแบงออกเปน 2 วธดงน
1. วธใชงานสญลกษณรวมกบขอความแบบบรรทดเดยว (In-Line)
a = 'This is my book.'
b = "วนนอยากทบกระปอง"
2. การใชงานสญลกษณรวมกบขอความแบบหลายบรรทด เมอใชสญลกษณก าหนดจดเรมตน
และจดสนสดของขอความ ใหพมพสญลกษณอยางละ 3 เครองหมาย ตามตวอยางตอไปน
SyntaxError : expected
an indented block
a = '''This is my book.
The cover is Yellow color.
Book owner write something.'''
b = """ปเปออกเดนทางไปเมองทแสนไกล
ไกล แลวไกลออกไปเรอยๆ จนในทสด
ปเปก... รออานตอฉบบถดไป """
การใชเครองหมาย (), [], {} รวมกบตวแปรหรอฟงกชน
python จะใชเครองหมาย (), [], {} ส าหรบการเขยนผสมผสานรวมกบตวแปร, ค าสง, ฟงกชน
ภายใน หรอบางกรณกท าตวเปนฟงกชนภายในแบบอตโนมต โดยไมตองพมพค าสง ดวยความ
หลากหลายตอวธการน าไปใช และใหงายตอการท าความเขาใจ ผเขยนจงไดรวบรวมวธการเขยนส าหรบ
การใชงานไว 4 ประเภทดงน
1. ประเภทการใชเครองหมายรวมกบตวแปร
2. ประเภทการใชเครองหมายรวมกบโพรซเจอรหรอฟงกชน
3. ประเภทการใชเครองหมายรวมกบค าสงหรอฟงกชนภายใน
4. ประเภทการใชเครองหมายทท าหนาทเสมอนเปนฟงชนภายในแบบอตโนมต
ประเภทการใชเครองหมายรวมกบตวแปร
โดยสวนใหญถามการใชเครองหมายรวมกบตวแปร ลกษณะของตวแปรเหลานนจะเปนประเภท
Sequence (ขายตวแปรอารเรยในภาษาอน) ดงตวอยางตอไปน
a = (1, 2, 3, 4)
b = ['TV ', 'หลอดไฟ ', 'ปลาท ']
c = {100: 'TV ', 200: 'หลอดไฟ ', 300: 'ปลาท '}
จากตวอยางเปนการก าหนดคาตางๆ ลงในตวแปรประเภท Sequence ซงประกอบดวย 3 ชนด
ไดแก Tuple จะใชเครองหมาย (), List จะใชเครองหมาย [] และDictionary จะใชเครองหมาย {} ตวอยาง
ตอไปนเปนการใชเครองหมาย [] ส าหรบการอานคาในตวแปรประเภท Sequence
ตวอยาง print(a[2], b[1], c[300])
ผลลพธ >>>3 หลอดไฟ ปลาท
ประเภทการใชเครองหมายรวมกบโพรซเจอรหรอฟงกชน
ในการสรางโพรซเจอรหรอฟงกชนในโมดล จะมการก ากบดวยเครองหมาย () หลงชอโพรซเจอร
หรอฟงกชนทสรางขนมา ดวยจะถกน าไปใชส าหรบการผานคาอารกวเมนต (Argument) ของโพรซเจอร
หรอฟงกชน ตามตวอยางดงตอไปน
ตวอยางท 1 แสดงการสรางโพรซเจอรหรอฟงกชนโดยไมมตวแปรอารกวเมนต
def showtime (): การสรางฟงกชน Showtime ตองมเครองหมาย () เสมอ
ตวอยางท 2 แสดงการสรางโพรซเจอรหรอฟงกชนพรอมกบตวแปรอารกวเมนต
def bookinfo(title, author) :
a = 100
b = a + 10
print(title, a) print(b, author)
นอกจากนจะใชเครองหมาย () ส าหรบใชรวมกบการสรางโพรซเจอรหรอฟงกชนแลว การเรยก
โพรซเจอรหรอฟงกชนเพอใชงานกจ าเปนตองมเครองหมาย () ตอทายชอขณะใชงาน ตามตวอยาง
ดงตอไปน
ตวอยางท 1 วธการเขยนโปรแกรมเรยกใชงานโพรซเจอรหรอฟงกชนโดยไมมคาอารกวเมนต
Showtime () ตองมเครองหมาย () เสมอ
ตวอยางท 2 วธการเขยนโปรแกรมเรยกใชงานฟงกชนพรอมสงผานคาอารกวเมนตใหกบฟงชน
Bookinfo('หนงสอชนจง ' , 'ชโนก ')
a = 100
b = a + 10
print(a, b)
กลมค าสงภายใน
ก าหนดตวแปรอารกวเมนตภายในเครองหมาย () ของชอฟงกชนน
ประเภทการใชเครองหมายรวมกบค าสงหรอฟงกชนภายใน
รปแบบของค าสงหรอฟงกชนภายในภาษา python วธการเขยนค าสงบางครงจะมการใช
เครองหมาย (), {} รวมกบคาตางๆ ทใชในค าสงนนตามตวอยางตอไปน
ตวอยางการใชเครองหมาย () รบค าสง print + คาทตองการแสดงบนจอภาพ print ('ปลาท 2 เขง ')
ตวอยางการใชเครองหมาย () กบค าสง tolower + คาทตองการแปลงจากอกษรตวใหญไปอกษร
ตวเลก
a = tolower ('COUNT ')
ตวอยางการใชเครองหมาย {} กบค าสง format + คาทตองการจดรปแบบการแสดงคาตวเลข
Print()'{0} to {1} '.Format(100, 'TV '))
ประเภทการใชเครองหมายทท าหนาทเสมอนเปนฟงชนภายในแบบอตโนมต
python เปนภาษาทไดรบการปรบปรงใหการเรยกใชฟงกชนภายในทใชงานบอยๆ งายมากขน
วธการเขยนหรอใชงานกกระชบตอการท าความเขาใจและจดจ า ตามตวอยางตอไปน
ตวอยางแสดงการใชเครองหมาย [] ทท าหนาทแทนฟงกชนภายในรวมกบตวแปร โดยการใช
เครองหมาย [] ตอทายตวแปรเสมอการเรยกใชฟงกชนภายในทท าหนาทตดคา (เหมอน Sub String ในภาษาอน)
ก าหนดคาตวแปร a = 'This is my book ' print(a[1]) ผลลพธทไดกคอ ตวอกษร h จะปรากฏบนจอภาพ
ตวอยางการใชเครองหมาย [] ทท าหนาทแทนฟงกชนภายในรวมกบตวแปรประเภท Sequence
ก าหนดคาใหตวแปร a = ['book ', 'color ', 'fan '] print(a[1][0]) ผลลพธทได คอ ตวอกษร C จะปรากฏบนจอภาพ การใชเครองหมาย [0] ตอทาย a[1] หมายถงการ
ตดตวอกษรตวแรกของ a[1] ซงคาใน a ต าแหนงท 1 กคอ color
0 1 2
การใชเครองหมายคอมเมนต (Comment)
ดวยการท างานของภาษา python ซงเปนแบบ interpreter ท าใหการประมวลผลค าสงทละบรรทด การใช คอมเมนต อธบายหมายเหตตางๆ จงตองใชเครองหมายคอมเมนต ไดทละบรรทด โดยใชเครองหมาย # (Shape Sing) ตามตวอยางตอไปน ตวอยางการใชเครองหมาย # ส าหรบใสค าอธบายหรอหมายเหต # sample python code บรรทดทจะไมมการประมวลผลใดเนองจากมการคอมเมนต a = 100 b = 20 c = a + b # print(a, b) print(c) b = 20 * 100 # คณอก 100 เทา
print(b)
Python กบการใชตวอกษรตวเลกหรอใหญ (Case Sensitive) การเขยนโปรแกรมดวยภาษา python และตองใชความระมดระวงเรองการใชตวอกษรเลกหรอใหญ ส าหรบการประกาศตวแปร การเขยนค าสงภายใน การเรยกชอโพรซเจอรหรอฟงกชน และอนๆ ดงนนจงมความจ าเปนทตองใหความสนใจเมอมการเรยกใชงาน มฉะนนจะสงผลใหเกดขอผดพลาด error เกยวกบตวอกษรเลกหรอใหญระหวางใชงานขนได
มาทดลองเขยนโปรแกรมดวยภาษา python การทดลองเขยนค าสงตางๆ ของภาษา python สามารถทดสอบได 2 วธคอ 1 ทดลองเขยนค าสงดวย python shell 2 ทดลองเขยนค าสงดวยรปแบบไฟลโปรแกรมแบบ python
ทดลองเขยนค าสงดวย python shell การเรยนรเกยวกบวธการเขยนโปรแกรมทดทสดคอการทดลองพมพค าสงตางๆเพอดผลลพธทเกดขนซงอาจจะเกดขอผดพลาดในการทดสอบค าสงหรอประสบความส าเรจในการท างานของค าสงนนๆ อกทงท าใหผฝกเขยนโปรแกรมไดประสบการณการเขยนและทดสอบจรงมากกวาเขาใจจากทฤษฎแตเพยงอยางเดยว พดแลวกเรมเปดโปรแกรม python IDLE ใน Windows ตามรปท 2.11
รปท 2.11 แสดงขนตอนการเปด python IDLE ภายใตระบบปฏบตการ Windows
หลงจากเปด python IDLE ไดแลวลองมาทดลองพมพค าสงตางๆ ตามตวอยางตอไปน
ตวอยางท 1 ทดลองพมพขอความลงใน python Shell >>> "I got Python Code"
หลงจากพมพขอความเสรจสนใหกดปม enter ผลลพธทไดจาก python Shell จะปรากฏขอความดงกลาวขนมาในบรรทดถดไป
ตวอยางท 2 ทดลองพมพขอความหลายบรรทดดวยเครองหมาย " " " หรอ ' ' '
>>> ' ' 'This book has three pages
First page is empty page ' ' '
ตวอยางท 3 ทดลองใชค าสง print รวมกบขอความ
ส าหรบ Windows : >>> print(' My Book is ok ')
ส าหรบ linux: >>> print 'My book is ok ' โดยไมตองใสวงเลบรวมกบฟงกชน
ตวอยางท 4 แสดงการเชอมตอระหวางขอความตงแต 2 ขอความขนไป
>>> 'Joe ' + 'Mary ' แสดงการเชอมตอดวยเครองหมาย +
หรอ
>>> 'Joe ' 'Mary ' แสดงการเชอมตอดวยการเขยนแบบตอเนอง
หรอ
>>> 'Joe ' + ' ' + 'Mary ' แสดงการเชอมตอดวยเครองหมาย + กบขอความ 3
ขอความหรอใชรวมกบค าสง print
>>> print('Joe ', 'Mary ') แสดงการเชอมตอระหวาง 2 ขอความพรอมใชรวมกบ
ค าสง print
ตวอยางท 5 แสดงการใชค าสงตรวจสอบชนดของขอมล
>>> type(100) ตรวจสอบคา 100 ใน python ผลลพธทไดจะบอกชนดของคาทตรวจสอบ <class 'int'>
>>> type(9999999)
<class 'int'>
>>> type(3.143)
<class 'float'>
>>> type('joe')
<class 'string'>
>>> type(5+4j)
<class 'complex'>
ตวอยางท 6 ทดสอบการอางองโมดลทน ามาใชงาน
กรณท 1 การอางองโมดลทมใชใน Python >>> Import os ทดสอบการอางองโมดลชอ OS >>> จะไมปรากฏอะไรถาหาก python รจกโมดลชอ OS
กรณท 2 การอางองโมดลทไมมการตดตงใน python
>>> Import mysql ทดสอบการอางองโมดลชอ mysql เพอท าการเชอมตอกบฐานขอมล
>>> จะมขอความเกด error ปรากฏขนเพอแจงเตอนการใชงานโมดล
ตวอยางท 7 แสดงการใชงานตวแปรใน python Shell
>>> a = 100 >>> b = 200
>>> c = a + b
>>> print(a,b,c) พมพคาในตวแปร a, b, c รวมกบค าสง print
>>> print(' a= %d b=%d c=%d ' %(a, b, c) )
>>> type(a)
<class ' int ' >
ตวอยางท 8 แสดงการใชค าสงลปดวย python Shell >>> for a in range(1 , 10): print(a) เวนวางแลวกดปม Enter
>>> 1 ::
>>> 9
พมพคาในตวแปร a, b, c พรอมกบ
ขอความแบบผสมผสานกบคาในตว
แปรดวยคณสมบตของค าสง print
ผลลพธทเกด
ส าหรบการใช python Shell ทดลองค าสงทสามารถมค าสงยอยภายในตวของค าสงหลก (สงเกต
ค าสงหลกทสามารถมกลมค าสงยอยได มกจะนยมใชเครองหมาย : (Colon) กอนจะเรมแบงยอหนาและ
ก าหนดค าสงยอย) จะขนบรรทดใหมพรอมยอหนาใหอตโนมตเพอรอการพมพค าสงยอย วธท python
Shell จะรวาค าสงยอยสนสดกคอ บรรทดสดทายไมมการพมพใดๆ หรอเวนวางไว (กดปม Enter สก 2
ครงกได กถอวาสนสดแลว)
ตวอยางท 9 แสดงการใชค าสงแปลงชนดของคาในตวแปร
>>> a = '100 '
>>> b = int(a)
>>> type(b)
<class 'int '>
>>> type(a) <class 'string '>
ตวอยางท 10 แสดงการใชค าสงเกยวกบการแปลงเลขฐาน
>>> a = 255
>>> hex(a)
>>> bin(a)
>>> oct(a)
หรอใชรวมกบค าสง print
>>> print(‘%x’ %a)ใชตวอกษร x หรอ x ส าหรบเลขฐานสบหก (hex)
>>> print (‘%o’ %a)ใชตวอกษร o หรอ o ส าหรบเลขฐานแปด (oct)
ก าหนด 100 แบบ string ใหกบตวแปร a
ใชค าสงฟงกชน int ส าหรบแปลงคาจากชนด String ใหเปนชนด Int
หลงจากทดลองใช python shell กบค าสงตางๆ กคงท าใหผใชงานพอไดแนวทางการเขยน
โปรแกรม และผลลพธทไดจากการทดสอบ แตการทดสอบเขยนโปรแกรมดวย python shell กมขอจ ากด
ในการจดเกบกลมค าสง ซงเปนสงจ าเปนในการพฒนางานในรปแบบทเปนซอรสโคด ดวยเหตนเราจง
สามารถเขยนโปรแกรมในรปของไฟลโปรแกรมไดดวย
ทดลองเขยนค าสงดวยรปแบบไฟลโปรแกรม
เมอพดถงรปแบบการเขยนโปรแกรมทเหมาะตอการพฒนางานจรงๆ จงๆแลว การเขยนค าสง
ทงหลายควรจะอยเปนทเปนทาง งายตอการท างานอยางตอเนองและคนหาไดงาย ซงกเปนไปตาม
แนวทาง การเขยนโปรแกรมดวยเครองมอพฒนาโปรแกรม ทจดเกบในรปของไฟลซอรสโคด โดยไฟล
ซอรสโคด ตองมนามสกลเปน .py สวนจะเกบในโฟลเดอรไหนกได โดยไมจ าเปนตองเกบไวทเดยวกน
กบโฟลเดอรท python ตดตงอย ตอไปนเปนการทดลองสรางไฟลซอรสโคดไอดวย Editor ดงรปท 2.13
ซงเปนการเรยกใชงาน Editor ดวย python shell
รปท 2.13 แสดงการเลอกเมนใน python Shell เพอเรยกใชงาน Editor
หลงจาก Editor ปรากฏขน ใหทดลองเขยนค าสงตอไปน เพอทดสอบการเขยนโปรแกรม และ
ศกษาการใชเมนตางๆ เชน ทดสอบการท างานของโปรแกรม จดเกบไฟลซอรสโคดลงในโฟลเดอรท
ตองการ ฯลฯ
รปท 2.14 ใชเมน Run เพอทดสอบการเขยนค าสงหรอสงใหโปรแกรมท างาน
ขนตอนการทดสอบโปรแกรมตวอยาง ใหเลอกเมน Run ใน editor เพอดผลลพธทปรากฏใน
python Shell เลอกเมนยอย Run Module ( หรอจะกดป ม F5 กได) เทานกเสรจสนการทดสอบโปรแกรม
ทก าลงพฒนา
บทท 3 รจกการใชตวแปรของ Python
พนฐานในการเขยนโปรแกรมทนกพฒนาโปรแกรมในแตละภาษาจ าเปนตองรและเขาใจ คอการใหงานตวแปรของภาษา ซงจะมรายละเอยดการใชงาน การประกาศตวแปร การก าหนดชนดตวแปร การท าความ
เขาใจเกยวกบกลมของชนดตวแปร ทมการใชรปแบบการเขยนตวแปรแตละชนดการใชเครองหมายเชน
'(Quote) หรอ "(Double Quote) รวมกบคาทจะจดเกบในตวแปร การก าหนดขอบเขตของตวแปรส าหรบใชงานในโมดลทก าลงเขยนโปรแกรมหรอการรเซต (Reset) คาในตวแปรแตละชนดเปนตน เพองายตอการท าความ
เขาใจเกยวกบตวแปรของ python
การเลอกใชตวแปรส าหรบเขยนโปรแกรม
ปจจบนหลกการและแนวคดการพฒนาการเขยนโปรแกรม หรอภาษาทใชในการเขยนโปรแกรม มขด
ความสามารถรองรบการเขยนโปรแกรมในรปแบบทวไป และ Object Base เชงวตถ(Object Oriented) ดงนนการเลอกตวแปรส าหรบใชงานรวมกบกลมค าสงจงตองก าหนดใหเหมาะสมและถกตอง ส าหรบตวแปรของ
ภาษาแบงออกเปน 2 กลมใหญดงน
กลมท 1 ตวแปรชนดทวไปไดแก ตวเลข(Number), ขอความ(String), วนท เวลา(Date Time), เลข
ทศนยมหรอชนดทเปน Sequence (คลายตวแปร Array ในภาษาอน) เปนตน
กลมท 2 ตวแปรชนด Object เชน ค าสง Object เกยวกบไฟล (File) หรอไดเรกทอร (Dir), ค าสง object
connect ส าหรบการเชอมตอฐานขอมล ฯลฯ
รปแบบการสรางและใชงานตวแปร
รปแบบการเขยนใน python ทไดรบการออกแบบมาใหงายตอการสราง และเรยกใชงานโดยไมตองม
ขนตอนและรปแบบยงยากมากนก โดยรปแบบทจะใชกแคก าหนดชอตวแปรแลวกก าหนดคาตวเลข,ขอความ,
วนท,เวลา,Object ใหกบตวแปรตามตวอยางตอไปน
ตวอยางท 1
อยาลมเครองหมาย ' และ "
ตวอยางท 2 ถาตองการก าหนดคา 100 ใหกบ a, b, c
a = b = c = 100 ภาษา Python จะก าหนดชนดของตวแปรตามคาทจดเกบลงในตวแปรปจจบนโดยอตโนมต ทกครงทม
การเปลยนแปลงคาทจดเกบ ตามตวอยางดงตอไปน
a = 100 เรมตนก าหนด 100 ทเปนชนด Int type(a) ค าสง type ส าหรบตรวจชนดของตวแปร a
a = 'joe' ก าหนดคาขอความใหกบตวแปร a
type(a) ตรวจชนดของตวแปร a ซงจะปรากฏเปน String
เพอเปนการตรวจสอบชนดของตวแปร เราสามารถใชค าสงฟงกชนภายในทชอ Type ท าการทดสอบ
ชนดของตวแปรในปจจบนได
ชนดของตวแปรทมการใชงานใน Python
รปแสดงโครงสรางชนดตวแปรใน Python
ตามรปแสดงใหเหนถงโครงสรางชนดตวแปรใน Python โดยแบงชนดของตวแปรทเกยวกบเลข
จ านวนเตม,ตวเลขทศนยม,ขอความและชนดทเปน Complex ทไมตองใชค าสง import เนองจาก Python ไดก าหนดชนดตวแปรเหลานใหเปนพนฐานทรวมกบการเขยนโปรแกรมเสมอ (ในรป ใชเสนวงกลมทบส าหรบ
ชนดตวแปรทไมตอง import)
ตวอยางชนดตวแปรพนฐานทสามารถใชงานไดโดยไมตอง import
ชอชนดตวแปร ความหมาย ตวอยาง Long, Int ตวเลขจ านวนเตม 979 Float ตวเลขทศนยม 3.1467 Complex หรอ Imaginary ตวเลขเชงซอน 5+4j String ขอความ 'Joe' หรอ ''Joe'' Boolean คาทางตรรกะ True, False
ถาเปนชนดตวแปรทจ าเปนตอง import ใหสงเกตเมอน ามาใชงาน เวลาทดสอบโปรแกรมจะเกดขอผดพลาด (Error) ขน วธแกไข กใหเพมโมดลทอางองชนดตวแปรนนเขาไปในโปรแกรมของเรา
ตวอยางชนดตวแปรทจ าเปนตอง import
ชอชนดตวแปร ความหมาย ตวอยาง Date ชนดวนท datetime Time ชนดเวลา datetime MySQL.Connect ตวเชอมฐานขอมล MySQL OS.path.isdir ตรวจชอไดเรกทอร os
ท าความเขาใจกบชนดตวแปรพนฐานของ Python
ชนดตวแปรพนฐานของ Python ถกก าหนดไวแลวภายในตว (Built-in) โดยการน าไปใชประกาศสรางตว
แปร(เชน ตวแปรชอ Id ส าหรบการจดเกบคา 100 เมอเขยนเปนค าสงจะไดดงน Id = 100) จะพรอมใชงานทนทไมตองอางองจากโมดลภายนอก ส าหรบขอบเขตของชนดตวแปรพนฐานแบบจดสรางภายใน (Built-in) ม
รายละเอยดดงน
ตวแปรชนดตวเลขจ านวนเตม
Python มตวแปรทรองรบการใชงานตวเลขแบบจ านวนเตมทมขนาดได 50 ถง 100 หลก ยงจ านวนหลก
มากเทาใด ความเรวในการใชงานของตวแปรชนดนกจะลดลงตามขนาดความจของตวเลขเมอเทยบกบความจชนดตวเลขจ านวนเตมมาตรฐานทวไป จดเดนของชนดตวเลขแบบจ านวนเตมใน Python อกประการไดแก การ
ใชงานตวเลขจ านวนเตมทเปนเลขฐานสอง(Binary), ฐานแปด(Octal), ฐานสบหก(Hexadecimal) ลงในตวแปร
ชนดตวเลขจ านวนเตมตามตวอยาง และการทดสอบตอไปน เรมจากเปด Python IDLE แลวพมพคาตวแปร a
ส าหรบการจดชนดตวเลขจ านวนเตมแบบฐานสองลงในตวแปร b จะก าหนด 0b น าหนาเลขฐานสอง
หรอใชฟงกชนภายในทชอวา bin() ส าหรบการจดเกบลงในตวแปร b
ทดลองโดยการพมพคาตวเลขฐานสองลงในตวแปร
เชนเดยวกบเลขฐานแปดและฐานสบหกกจะมวธการเขยนและใชงานคลายๆกบเลขฐานสองตามทกลาวไวแลว
ชอเลขฐาน ค าน าหนา ฟงกชน สอง (Binary) 0b bin(ตวเลข) แปด (Octal) 0o oct(ตวเลข) สบ (Decimal) - int(ตวเลข) สบหก (Hexadecimal) 0x hex(ตวเลข)
ตารางเทยบการใชชนดตวเลขจ านวนเตมรวมกบเลขฐานสอง,แปด,สบ,และสบหก
แสดงรปแบบการก าหนดค าน าหนาคาตวเลขและการใชฟงกชนภายในทท าหนาทแปลงคาตวเลขจากเลขฐานสบไปเปนเลขฐานสอง,แปด,สบ,และสบหก
ตวแปร a จดเกบตวเลขแบบจ านวนเตมในรปแบบตวเลขฐานสบ
ผลลพธท Python Shell จะแสดงคา 12345678901234567890
ปอนคาตวเลข 1011 ฐานสองลงในตวแปร b
ผลลพธจะแสดงคาตวเลข 1011 ฐานสองหรอตรงกบตวเลข 11 ฐานสบ
ทดสอบเลขฐานสองโดยใชฟงกชนภายในท
ชอ bin ส าหรบการจดเกบคาลงในตวแปร b
รปแบบ ลกษณะการท างาน i | j เรยกวา Bitwise OR i ^ j เรยกวา Bitwise XOR i & j เรยกวา Bitwise AND i << j เรยกวา Shift left i >> j เรยกวา Shift right ~ i เรยกวา Inverts i’s bits
ตารางแสดงการใชเครองหมายตรรกะรวมกบตวแปรชนดตวเลข
ทดลองพมพคาตวเลขฐานแปดและฐานสบหกลงในตวแปร
ตวอยางเลขฐานแปด
ตวอยางเลขฐานสบหก
ปอนคาตวเลข 8 ฐานสบโดยใชฟงกชน
ภายในแปลงเลขฐานแปดใหกบตวแปร d
ปอนคาตวเลข 10 ฐานแปดลงในตวแปร c
ปอนคาตวเลข 255 ฐานสบแลวใชฟงกชนภายในทชอ hex
ชวยแปลงคาเปนเลขฐานสบหกเพอจดเกบในตวแปร f
ปอนคาตวเลข ff ฐานสบหกลงในตวแปร e
ตวแปรชนดบลน(Boolean)
Python ก าหนดการใชงานตวแปรชนดบลน ดวยคาตวเลขจ านวนเตมไดแก คาทเปนจรงใหมคาเทากบ 1 หรอสามารถเขยนค าวา True แทนคาตวเลข และคาทเปนเทจใหมคาเทากบตวเลข 0 หรอ False นอกจากนเรายงน าคาตวแปรชนดบลนมาใชรวมกบลอจกโอเปอเรเตอร (Logic Operator) ซงประกอบดวย and, or, Not และรปแบบฟงกชนพเศษเฉพาะ Python ทเรยกวา Short-Circuit ฟงกชน
การทดลองพมพคาตวแปรชนดบลน
ตวแปรชนดตวเลขทมทศนยม
ชนดตวเลขทมทศนยมส าหรบการใชงานใน Python แบงออกเปน 3 ชนดยอย ไดแก
1. ตวเลขทศนยมชนด Floating
2. ตวเลขทศนยมชนด Complex
3. ตวเลขทศนยมชนด Decimal
โดยตวเลขทศนยมชนด Float และ Complex จะพรอมใชงานภายใน (Built-in) รวมกบ Python ยกเวน
ชนด Decimal ทจ าเปนตอง import โมดล Decimal กอนใชงาน ทงนอยทความแตกตางของตวเลขทเปนทศนยม
ถาใชค านวณทวไปไมเกยวกบเงนๆทองๆ กใชชนด Floating แตถาเกยวกบเงนทองควรใชชนด Decimal ทตอง
ใชตางชนดกน โดยเฉพาะเกยวกบคาทางการเงนเพราะเทคนคการปดเศษและจ านวนทศนยมทมใชในชนด
Floating และ Decimal แตกตางกน ส าหรบชนด Floating อาศยการท างานของอลกอรทมทนยมใชกนทวไปของ
David Goy ซงผลลพธทไดจากการปดเศษทศนยมจะมคาคลาดเคลอนนดหนอย แตกยงน าไปใชงานทวไปได
แตถาน าไปใชกบการเงนทตองการความแมนย าในการปดเศษมาก แนะน าใหใชชนด Decimal ซงใชเทคนคการ
ปดเศษแบบ Balance Rounding ทมความเรวในการค านวณนอยกวาตวเลขทศนยม แตมความคลาดเคลอนนอย
กวาดวย
ปอนคาตวเลข b จะปรากฏเปนคาเทจหรอ False
ซงเปนผลมาจากการใชโอเปอเรเตอร Not นนเอง
ก าหนดคาบลน True ใหกบตวแปร a
ก าหนดโอเปอเรเตอร Not ใหกบคาบลนทอยในตวแปร a ซงมคาเปน True
math.acos(x)
math.acosh(x)
math.asin(x)
math.asinh(x)
math.atan(x)
math.atan2(y,x)
math.atanh(x)
math.ceil(x)
math.copysign(x,y)
math.cos(x)
math.cosh(x)
math.degrees(r)
math.e
math.exp(x)
math.fabs(x)
math.factorial(x)
math.floor(x)
math.fmod(x,y)
math.frexp(x)
math.fsum(i)
math.hypot(x,y)
math.isinf(x)
math.isnan(x)
math.Idexp(m,e)
math.log(x,b)
math.log10(x)
math.loglp(x)
math.modf(x)
math.pi
math.pow(x,y)
math.radians(d)
math.sin(x)
math.sinh(x)
math.aqrt(x)
math.tan(x)
math.tanh(x)
math.trunc(x)
ตารางแสดงกลมค าสงเกยวกบคณตศาสตร
ตอไปนเปนการทดลองพมพตวเลขทศนยม
แปลงคา Floating ไปเปนเลขฐานสบหก และท าการ
จดเกบในตวแปร d เปนชนดขอความ (String)
แปลงคาในตวแปร d ซงเกบคาเลขฐานสบหกใหกลบไปเปนคาชนด Float ดวยฟงกชนภายในทชอวา fromhex()
อางองกลมฟงกชนภายในเกยวกบการค านวณภายใตโมดล math
ใน Python ใชเครองหมาย ** ส าหรบการยกก าลง
เครองหมายทางการค านวณ ใชงานเกยวกบตวเลข + , - ค านวณบวกหรอลบตวเลข
* ส าหรบคณตวเลข ** เกยวกบการหารคาตวเลขใน Python ใชได 2 รปแบบ
/ , // ส าหรบการยกก าลง เชน 102 กคอ 10**2 // , % ส าหรบการตดคาเฉพาะเศษทไดจากการหารคาตวเลข
ตาราง แสดงเครองหมายการค านวณ
ตวแปรชนดตวเลขจ านวนเชงซอน (Complex Number)
ส าหรบการค านวณจ านวนเชงซอน เชน 1.2 + 4j , 0.7 - 6.5j ฯลฯ ในภาษา Python ไดก าหนดตวแปร Built-in ชนด Imaginary ไวรองรบ ชวยใหท างานเกยวกบจ านวนเชงซอนไดสะดวก ลกษณะรปแบบของตวเลขจ านวนเชงซอนจะประกอบดวยคา Real และคา Imaginary
1.2 + 4j เรยกคา Real เรยกคา Imaginary
รปแสดงองคประกอบของตวเลขจ านวนเชงซอน Imaginary
ตามรป ทดลองพมพตวเลขเชงซอนตามตวอยางตอไปน
ตรวจชนดตวแปรใน a
ตวแปรชนดตวเลขทศนยม Decimal
โดยปกตทวไปถาเราก าหนดตวเลขทศนยม 3.1428 ใหกบตวแปร สมมตวาชอตวแปร a หรอ a = 3.1428
ในภาษา Python จะเปนการสรางและก าหนดชนดตวเลขทศนยมแบบ Floating ใหกบตวแปร a เมอไรกตามท
น าตวแปรไปค านวณแลวเกดคาตวเลขเศษขนมาใหม วธการปดเศษภายใตตวแปรชนด Floating จะผดเพยนไป
ทละนด โดยเฉพาะเมอมจ านวนหลกของเศษทศนยมมากๆ(ในตวเลขทศนยมชนด Floating จ านวนของเศษ
ทศนยมอยทประมาณ 17 หลก) ดงนนเมอมการน าคาตวเลขทศนยมชนด Floating ไปใชงาน สมมตน าไปใช
รวมกบสมการอะไรสกสมการหนง จะตองมการแกไขชดเชยตวเลขทศนยมทมโอกาสคลาดเคลอนดวย ลองมา
ดตวเลขทศนยมชนด Decimal กนบาง ตวเลขทศนยมชนดนมกรรมวธการปดเศษแบบใหมทใหผลลพธ
คลาดเคลอนนอยกวาชนดตวเลขทศนยม Floating แตการรองรบจ านวนตวเลขเศษของชนด Decimal กม
ประมาณ 28 ตว
ขอจ ากดของตวเลขทศนยมชนด Decimal กคงเปนเรองของความเรวในการค านวณเมอเทยบกบชนด
Floating อกเรองทส าคญในการใชงานตวเลขทศนยมชนด Decimal กคอการอางองโมดล Decimal กอนใชงาน
เสมอ
ตอไปนเปนการทดลองพมพตวอยางเกยวกบตวเลขทศนยม Decimal
อางองการใชตวเลขชนด Decimal
พมพคาตวเลขในตวแปร a
พมพชนดคาตวเลขในตวแปร a
ตวแปรชนดขอความ(String)
ตวแปรชนดขอความมความจ าเปนตอทกภาษารวมทงภาษา Python ดวย สวนใหญรปแบบการเขยนและประกาศตวแปรชนดนจะคลายกบภาษาอน จะแตกตางกคงเปนทเครองหมาย เชน ภาษา Visual Basic ใชเครองหมายอญประกาศ(Double Quote), ภาษา C หรอ C++ จะใชเครองหมายฝนทอง(Single Quote) ส าหรบภาษา Python สามารถใชไดทง 2 ภาษา(เครองหมายอญประกาศหรอฝนทอง เชน A = 'Blue Sky' หรอ A = "Blue Sky" เปนตน) Python ก าหนดการใชรหสขอความแบบ UTF-8 Unicode เพอรองรบขอความทเปนภาษาอนทวโลก รวมทงภาษาองกฤษทเปนพนฐานของการใชปกต เหตผลท Python เลอกรหส Unicode เปนหลกแทนรหส ASCII ทเรามกค นเคยบน Microsoft Windows เนองจากการปอนขอความจากการใชงานแตละประเทศ จะใชภาษาทองถนของประเทศนนๆ จ านวนพยญชนะของแตละภาษาจะมมากนอยไมเทากน ยงถามพยญชนะมากๆ เชน ภาษาจน การใชรหส ASCII จะไมสามารถรองรบพยญชนะทงหมดได ทางออกกคอตองใชรหสใหมทรองรบพยญชนะไดมากขน กคงหนไมพนรหส Unicode เพอหลกเลยงปญหาการปอนขอความทมความหลากหลายและจ านวนของพยญชนะของแตละภาษาทจะน ามาใชกบขอความของภาษา Python จงไดก าหนดรหส Unicode ส าหรบใชงานกบขอความเปนหลก อกเรองหนงกคอ Python สามารถท างานไดบนหลายระบบปฏบตการ รวมทงสามารถน ามาสรางเปนเวบแอพพลเคชนทรองรบกลมภาษาทหลากหลาย การใชรหส Unicode กบขอความจะชวยลดปญหาเรองการใชงานลง
ส าหรบรปแบบการใชขอความรวมกบตวแปรหรอฟงกชนภายใน พอสรปลกษณะการเขยนโปรแกรมของภาษา Python ได 5 รปแบบ ดงน (ทดลองพมพค าสงลงใน Python IDLE)
1. การใชงานขอความรวมกบตวแปรและฟงกชนภายใน
พมพคาในตวแปร a, b
ตรวจชนดตวแปรใน a
การใชขอความรวมกบตวแปร
การใชขอความรวมกบ
ฟงกชนภายในทชอ print()
2. การใชขอความ + String Escape รวมกบตวแปรและฟงกชนภายใน
กลม String Escape \newline
\\ \’ \” \a \b
\f \n
\N{name} \ooo
\r \t
\uhhhh \Uhhhhhhhh
\v \xhh
ตารางแสดงกลม String Escape
การใช String Escape กเพอน ารหส ASCII มาเสรมรวมเขากบกลมของขอความ ซงรหส ASCII ทคนเคย เชน รหส ASCII10 ส าหรบ Linefeed หรอดจากตารางท 3.5 กคอ การใชรปแบบ \n ถาน ามาเขยนรวมกบกลมขอความของ Python จะตองใชภายในเครองหมายอญประกาศ (Double Quote) หรอฝนทอง(Single Quote) ตามตวอยางตอไปน(ทดลองพมพตวอยางใน Python IDLE เพอดผลลพธ)
ตวอยางท 1 กลมขอความในตวแปร a ทไมไดใช String Escape
ตวอยางท 2 กลมขอความในตวแปร a มการใช String Escape เกยวกบการขนบรรทดใหม(\n)
ตวอยางท 3 การใช String Escape ทเกยวกบการขนบรรทดใหม \n รวมกบฟงกชนภายในทชอ print()
3. การใชงานกลมขอความ + คาอารกวเมนต (Argument) รวมกบฟงกชนภายใน
บางกรณของการใชกลมขอความรวมกบฟงกชนภายในทสามารถอานคาจากตวแปร แลวน าคาทไดมาใชรวมกบกลมขอความได ตามตวอยางตอไปน
บรรทดท 5 เปนรปแบบการใชขอความผสมกบตวแปรภายใตการท างานของฟงกชนภายในทชอ print
รปแสดงรปแบบการเขยนค าสงฟงกชน print ขอความผสมกบคาในตวแปร
รปแสดงต าแหนงการวางคาทอานไดจากตวแปร
พมพคาในตวแปร a
พมพขอความอยางเดยว
บรรทดท 1 บรรทดท 2 บรรทดท 3
บรรทดท 4
บรรทดท 5
เปนกลมขอความ
เปนเครองหมายส าหรบการเชอมกลมขอความ ใหสามารถแสดงคาในตวแปรได
ตวแปรหรอคาอารกวเมนตทจะน าคาไปใชรวมกบกลมขอความ
อานคาในตวแปร a หรอคาอารกวเมนตตวแรก แลวน ามาวางลงทต าแหนงน โดยใชเครองหมาย %d ส าหรบการอานคาใน a และระบชนดคาตวเลขทอานไดจากตวแปร a ในทนจะเปนชนดตวเลขจ านวนเตม (Int)
เครองหมายสญลกษณ ชนดตวแปร %s String %d Int, Decimal %f Float
ตารางแสดงเครองหมายสญลกษณส าหรบ การระบต าแหนงในกลมขอความและระบชนดคาทอยในตวแปร
บรรทดท 6
ในบรรทดท 6 เปนการแสดงคาตวแปรหรออารกวเมนตมากกวา 1 ตวแปร คอ a และ b
รปแสดงการใชขอความผสมกบคาของตวแปรทมมากกวาหนงตวแปร
รปแสดงล าดบการอานคาในตวแปรหรออารกวเมนต a และ b ตามล าดบ
และน าไปใชงานรวมกบกลมขอความตามล าดบดวยเชนกน
4. การใชงานขอความ + String Escape + คาอารกวเมนต
รปแบบนเปนการน าความสามารถการท างานของรปแบบท 2 และ 3 มาใชรวมกบกลมขอความตาม
ตวอยาง
ใชวงเลบครอบตวแปร a และ b
บรรทดท 1
บรรทดท 2 บรรทดท 3
บรรทดท 4
บรรทดท 4 เปนการผสมการใช String Escape โดยการใชเครองหมาย \n ส าหรบข นบรรทดใหม
รวมกบการระบต าแหนงผานเครองหมายสญลกษณ %d ตวแรกทมในกลมขอความซงแทนคาตวแปร a หรอคาอารกวเมนต a และเครองหมายสญลกษณ %f ซงแทนคาตวเลขและชนดของตวแปร b ตามล าดบ
5. การใชงานขอความ + String Escape + ฟงกชนภายใน + คาอารกวเมนต
คาอารกวเมนตทเปนกลมชนดตวเลข เมอน ามาใชรวมกบกลมขอความ บางกรณกตองการจดรปแบบเพอใหงายตอการใชงาน ยกตวอยางตวเลข 10000.7687 ตองการจดรปแบบใหเปน 10,000.77 เพอน าไป
แสดงผลรวมกบกลมขอความ โดยจะแทรกเครองหมาย , หรอคอมมา(comma) ใหกบตวเลขทก 3 หลก และปด
เศษใหเหลอ 2 หลก ดวยการใชฟงกชนภายในทชอวา format() คราวนลองมาดตวอยางการใชงาน
บรรทดท 6 เปนการจดรปแบบตวเลขในตวแปร a ผานฟงกชนภายใน format โดยมการน าไปใชรวมกบ
กลมขอความเพอระบต าแหนงทจะแทรกคาตวเลขในขอความดวยการใชเครองหมาย {} ส าหรบการแทรกลงในกลมขอความ
บรรทดท 1 บรรทดท 2 บรรทดท 3
บรรทดท 4
บรรทดท 5
บรรทดท 6
บรรทดท 7
พมพกลมขอความ
พมพคาในตวแปร a
กลมขอความ ฟงกชนภายใน format
ตวแปรอารกวเมนต
ล าดบ 0 ล าดบ 1
ตวแปร a เปนล าดบอารกวเมนตล าดบท 0 และน าไปแทรกลงในขอความตรงเครองหมาย {0} หรอ {ล าดบของตวแปรอารกวเมนต ในฟงกชนภายใน format} ในกลมขอความ
การระบต าแหนงคาตวเลขลงในกลมขอความ
อารกวเมนตล าดบท 0
พอจะเหนรปแบบและวธการเขยนลกษณะการอางองล าดบของตวแปรอารกวเมนต การใชเครองหมาย
ระบตวเลขทของอารกวเมนตส าหรบแทรกคาตวแปรผานเครองหมายปกกา {} ในกลมขอความตอไปนจะเปนตวอยางเชงลกส าหรบการใชฟงกชนภายในทชอ format รวมกบคาตวแปรอารกวเมนตและการอางองในการ
แทรกคาตวแปรลงในขอความ แบงออกเปน 2 สวน
1. วธอางองการแทรกล าดบเลขท คาตวแปรอารกวเมนตระหวางฟงกชนภายใน format และกลม
ขอความ
การอางองการแทรกล าดบเลขทคาตวแปรอารกวเมนตกบกลมขอความ แบงออกเปน 5 วธยอยตาม
ตวอยางตอไปน
ตวอยาง 1.1 การอางองการแทรกล าดบเลขทคาตวแปรอารกวเมนตดวยหมายเลขล าดบ
ประโยชนของการมหมายเลขล าดบเลขทของตวแปรอารกวเมนต คอเวลาอางองเลขทล าดบขณะ
แทรกในกลมขอความ ซงมความยดหยนตอการเรยกใชงานตามเลขทล าดบทรวมไดตามตองการ
ตวอยาง 1.2 การอางองการแทรกตวแปรอารกวเมนตดวยการเรยงล าดบตามตวแปรอารกวเมนตจากล าดบแรก
ไปล าดบสดทาย
จากบรรทดท 3 ลกษณะการใชเครองหมาย {} รวมกบกลมขอความจะไมรวมเลขทล าดบของตวแปร
อารกวเมนต a,b,c ดงน นการดงคาทอยในตวแปรอารกวเมนตกจะดงคาตามล าดบการเรยงชอตวแปร
อารกวเมนตภายใตฟงกชนภายในทชอวา format
ตวแปรอารกวเมนตทชอ a จะมล าดบอางองคอ 0 ตวแปร b มหมายเลขอางองล าดบท 1 และตวแปร c จะเปนหมายเลขอางองล าดบ 2
บรรทดท 1 บรรทดท 2 บรรทดท 3
ตวอยาง 1.3 การอางองแทรกคาของตวแปรอารกวเมนตดวยการก าหนดชอ(Field Name) แทนเลขทล าดบของ
ตวแปรอารกวเมนต
จากบรรทดท 3 ในสวนทาย .format(tv=a, cost=b) จะเปนรปแบบการก าหนดคาวา tv ใหมคาเทากบตว
แปรอารกวเมนต a เมอตองการแทรกคาของตวแปร a ดวยเครองหมาย {} ลงในกลมขอความ ตองระบค าวา tv รวมกบเครองหมาย {} เพอทจะท าการอางองดงคาจากตวแปรอารกวเมนต a มาแทรกลงในกลมขอความ
ตวอยาง 1.4 การอางองแทรกคาของตวแปรอารกวเมนตดวยการใชฟงกชนภายในทชอวา locals()
เทคนคการใชฟงกชน local() รวมกบฟงกชน format เปนวธการอางองและท าการแทรกคา(ตอนแทรกคาลงในขอความใหสงเกตทเครองหมาย {} ในกลมขอความ) ภายในของตวแปรอารกวเมนตโดยเปนการอางจากชอของตวแปรจรงๆ ภายในโมดลทเปนแบบ Local รวมกบเครองหมาย {} ซงจะเปนการแทรกคาลงตามต าแหนงในกลมขอความ
เปนวธการก าหนดชอ tv แทนการใชหมายเลขล าดบของตวแปรอารกวเมนต a
บรรทดท 1 บรรทดท 2 บรรทดท 3
ตวแปรภายในโมดลนซงเปนแบบ Local
ตวแปรในโมดลแบบ Local
ถกดงคาภายในตวแปรอารกวเมนต b ดวย
เรยกตวแปร Local ของโมดลนมาเปนตวแปรอารกวเมนตโดยอตโนมต
ล าดบในการดงตวแปรอารกวเมนต a ส าหรบแทรกคาลงในกลมขอความทมเครองหมาย {} แรกสด
บรรทดท 1 บรรทดท 2 บรรทดท 3
การอางองชอเดยวกบตวแปรในโมดล คอตวแปร b ส าหรบการแทรกคาในตวแปรอารกวเมนต b ลงในกลมขอความตามต าแหนงทมการใชเครองหมาย {b} เทคนคการใชงานภายใตลกษณะการอางองคาจากตวแปร Local ของโมดลแลวน ามาเปนคาของตวแปรอารกวเมนต เพอทจะน าไปแทรกคาลงในขอความ แบบนเรยกวา Mapping Unpacking(อยาลมเครองหมาย ** น าหนาฟงกชนภายใน local())
ตวอยาง 1.5 การอางองแทรกคาของตวแปรอารกวเมนตประเภท Sequence ดวยหมายเลขล าดบ
การน าตวแปรอารกวเมนตทเปนประเภท Sequence (คลายตวแปรอารเรยในภาษาอนๆ) ซงแบงยอยได
3 ประเภท ไดแก Tuple, List และ Dictionary เปนตน รปแบบของตวแปรประเภท Sequence มการเขยน ดงน
รปแบบการเขยน a = [ TV , 10000 , 'Monday' ]
วธการอางองคาภายใน a[0] a[1] a[2]
เมอน าไปใชงานรวมกบการผานคาตวแปรอารกวเมนต จะมรปแบบการเขยนโปรแกรมใชงานดงน
จะเหนวารปแบบการแทรกคาภายในตวแปรอารกวเมนตในกลมขอความ โดยปกตจะใชเพยงเครองหมาย
{0} ทอางองเลขทล าดบตวแปรอารกวเมนต หมายเลข 0 หรอตวแปรอารกวเมนต a ซงจะมคาทเกบภายในตวแปรอารกวเมนต a เปนประเภท Sequence ทสามารถจดเกบคาภายในไดมากกวาหนงคา การอางองแทรกคาใน
กลมขอความจะตองรวมใหชด
เลขล าดบอางองหมายเลข 0 ทตดกบเครองหมายปกกา {0} จะบงบอกใหทราบวาเปนตวแปรอารกวเมนตล าดบแรก หรอตวแปรทชอวา a แตเผอญตวแปร a เปนชนด List Sequence ทมหมายเลขอางองยอยส าหรบคา
ภายในของตวแปร a เปน [0] คอ TV,[1] คอ 10000 ฯลฯ
การใชเครองหมายแทรกกตองท าการเพมเตมเลขทล าดบยอยภายในตวแปรอารกวเมนตของ a เขาไป ดงน
[0] [1] [3]
ตวแปร a เปนประเภท List Sequence โดยมการระบคาภายใน
ดงน a[0] คอ TV , a[1] คอ 10000 , a[2] คอ Monday
อานคาตามหมายเลขล าดบประเภท Sequence ของตวแปร a โดยคาทตองการคอ TV ซงตรงกบการอางองล าดบ [0]
หมายเลขอางองล าดบตวแปรอารกวเมนต a ใน format คอล าดบท {0}
[0] [1] [3]
2. การจดคาในตวแปรอารกวเมนตดวยฟงกชนภายใน format
หลงจากคนกบชอฟงกชนภายในทชอ format มาพอสมควร คราวนมาดลกษณะการเขยนค าสงแสดงรปแบบตางๆ เพอใหไดผลลพธตามทตองการ โดยสวนใหญฟงกชน format จะเหมาะกบตวแปรทเปนชนดตว
เลขทเปนจ านวนเตม(Int), ทศนยม(Float), ทศนยมคงท(Decimal) และชนดขอความ เปนตน
ตอไปนเปนรปแบบการใชงานฟงกชน format กบตวแปรชนดตางๆ ตามตวอยาง
ตวอยางท 2.1 เปนการใชค าสง format กบตวแปรส าหรบการแทรกคาลงในกลมขอความดวยการระบเลขท
ล าดบของตวแปรอารกวเมนต
จากบรรทดท 2 ซงน าฟงกชน format ,ตอทายกลมขอความ แลวท าการแทรกคาตวแปรอารกวเมนตดวย
เครองหมาย {} ในขอความ โดยระบเลขทล าดบของตวแปรอารกวเมนตในฟงกชน
ตวอยางท 2.2 การจดรปแบบคาในตวแปรอารกวเมนตระหวางท าการแทรกแบบปรบแตงการวางขอมลไป
ทางซาย,ขวา,ตรงกลาง,จ ากดจ านวนตวอกษรทตองการแทรก ฯลฯ การเขยนค าสงฟงกชน format แบบเพมรปแบบการจดคาขอมล
เลขทล าดบตวแปรอารกวเมนต : การจดคาขอมลภายในของตวแปรอารกวเมนต เพอท าการแทรกลงใน
ขอความ
ในตวอยางท 2.2 เมอมการเพมขดความสามารถในการจดรปแบบขอมลใหกบฟงกชน format การเขยน
ค าสงจะเพมเตมเครองหมาย : (Colon) ตอจากเลขทล าดบตวแปรอารกวเมนต
บรรทดท 1
บรรทดท 2 บรรทดท 3
เสนทางการอางองเลขทล าดบตวแปรอารกวเมนต ส าหรบ
การแทรกคาภายในตวแปรอารกวเมนตลงในขอความ
0 1 2 เลขทล าดบของตวแปร
เมอเพมเครองหมาย :20 ตอทายเลขทล าดบศนยของตวแปรอารกวเมนต a ในฟงกชน format จะเปน
การก าหนดจ านวนตวอกษรอยางนอย 20 ตวอกษรเสมอ เมอแทรกลงในขอความ ส าหรบกรณคาขอมลในตวแปร a ตามตวอยางขางลาง ซงมขอความ Television เมอนบจ านวนตวอกษรตงแตตวอกษร T ไปจนถง n รวม
ทงหมด 10 ตวอกษร เมอน ามาใชกบเครองหมาย :20 จ านวนในตวแปร a ทม 10 ตวอกษร จงนอยกวาจ านวนทตองแทรกตามเครองหมาย :20
ภายใตกระบวนการท างานทมสวนตางกน 9 ตวอกษร จะมการเพมรหสชองวางตอทายภายในตวแปร a
อก 9 ตวอกษร เพอทจะท าใหครบตามจ านวน 20 ตวอกษร
a =
ผลลพธเมอใชเครองหมาย :20 รวมกบคาขอมลในตวแปร a
a =
1 2 3 4 5 6 7 8 9 10 T e l e v i s i o n
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 T e l e v i s i o n
เปนการจดรปแบบทวไปส าหรบการแทรก
เตมรหสวางเปลาตอทายคาขอมลในตวแปร a ใหครบ 20 ตวอกษร
ตอไปเปนการทดลองใช > , < , ^ ตามตวอยางค าสงตอไปน
เทคนคการ slicing และ Striding String ส าหรบตวแปรชนดขอความ
ในการเขยนภาษา Python จะมการใชเครองหมาย [] รวมกบตวแปรชนดตางๆ ใหเหนอยบอยครง แต
ละเครองแบบทน าเครองหมาย [] มาใช กไดผลลพธทแตกตางกน ขนอยกบชนดตวแปรหรอสถานการณทใช
งานเครองหมาย [] ในขณะนน ตามผลลพธทอยากได แตถาหากน าเครองหมาย [] มาใชกบตวแปรชนดขอความ กจะตองมค าศพทเชงเทคนคอย 2 ค าศพท ไดแก slicing และ Striding String
โครงสรางของขอความทจดเกบลงในตวแปร ประกอบดวย หมายเลขล าดบ(Index) ของตวอกษรภายในกลมขอความเปนหมายเลขก ากบการอางองถงทกๆ ตวอกษร ซงมอยดวยกน 2 ชนด คอ 1.ชนดหมายเลข
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 T e l e v i s i o n
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 T e l e v i s i o n
ก าหนดคาทแทรกใหครบ 20 ตวอกษร แลวเลอนไปไวทางขวาสด
ก าหนดคาทแทรกใหครบ 20 ตวอกษร แลวเลอนไปไวทางซายสด
ก าหนดคาทแทรกใหครบ 20 ตวอกษร แลวเลอนไปไวตรงกลาง
เมอใชเครองหมาย > ตวอกษรจะเลอนทางขวาสด
เมอใชเครองหมาย ^ ตวอกษรจะเลอนมาตรงกลาง
ล าดบ(Index) ทมหมายเลขทางดานบวก(คอเรมจากหมายเลข 0,1,2,3,… จนถงหมายเลขสดทายเหมอนกบเรม
จากตวอกษรตวแรกไปจนถงตวสดทาย) 2.ชนดหมายเลขล าดบ(Index) ทมหมายเลขทางดานลบ(คอเรมจากหมายเลข 0,-1,-2,-3,… จนถงหมายเลขตดลบตวสดทาย เรมจากตวอกษรตวสดทายยอนกลบไปตวแรกสด)
ตามโครงสรางของขอความทจดเกบในตวแปรของ Python รปแบบการเขยนค าสงเพอท าการตดค า
หรอการ Slicing มรปแบบดงน
รปแบบท 1 การตดค าดวยการระบต าแหนงตวอกษร
M Y N A M E I S J O H N 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
รปแบบท 2 การตดค าดวยการก าหนดจดเรมตนและการระบความยาวจ านวนตวอกษร
M Y N A M E I S J O H N 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
-14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 M Y N A M E I S J O H N 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
A =
การใชหมายเลขล าดบทางดานลบ
การใชหมายเลขล าดบทางดานบวก
หมายเลข Index ทางดานบวก
วธการเขยนค าสงตดค า B = A[3]
ผลทไดจากการตดค าเมอระบ A[3] ใหกบตวแปร B = หมายเลข Index ของขอความในตวแปร B
หมายเลข Index ทางดานบวก
วธการเขยนค าสงตดค า B = A[2:7]
ต าแหนงหรอจดเรมตนของตวอกษรทตองการ
จ านวนตวอกษรทจะท าการตดค า โดยเรมนบจากตวอกษรแรกสดไปถง
จ านวน 7 ตวอกษรแตมเงอนไขจากการก าหนดต าแหนงหมายเลขล าดบท 2
ส าหรบการน าคาทท าการตดไปจนถงต าแหนงสดทายมาใสลงในตวแปร B
ผลทไดจากการตดค าเมอระบ A[2:7] =
รปแบบท 3 การตดค าดวยการก าหนดจดเรมตนและการระบความยาวจ านวนตวอกษร พรอมดวยการก าหนด
Step ของตวอกษรส าหรบการตดค า บางครงกเรยกวา Striding String
M Y N A M E I S J O H N 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
เขยนค าสง B = A[0 : 7] = A[0 : 7 : 1]
ผลทไดจากการตดค า
สรป การใชวธตดค าในกลมขอความทง 3 รปแบบของภาษา Python เราเรยกวา Slicing และลกษณะการ Step
ของตวอกษรบางครงเรยกวา Striding String ซงใน Python จะก าหนดไวทละ 1 Step โดยอตโนมต
- ทดลองโปรแกรมส าหรบการใชตวแปรและชนดตวแปรแบบพนฐาน
หมายเลข Index ทางดานบวก
จดเรมตน
จดสนสด
จดสนสดการ Step ของการตดค า
ปกตจะก าหนดการ Step ตวอกษรหรอ Striding String ใชท 1
พมพค าสงตอไปน
ผลลพธทปรากฏ
*** ค าสง print() ใชส าหรบแสดงคาทวไปหรอคาในตวแปร โดยมรปแบบการใชค าสง ดงน
print(ชอตวแปร) print('ขอความ % = ชนดตวแปร' %(ตวแปร))
แสดงขอความผสมกบคาตวแปร
การรเซตคาในตวแปร การสรางตวแปรในโปรแกรมบางครงกมความจ าเปนทตองใสคาอะไรสกอยางเขาไปในตวแปรกอนท
จะน าไปใชงาน เพอใหเกดความสมบรณตามรปแบบการสรางตวแปรของ python ดงนนคาทเหมาะสมตอการ
น ามาใชงานรวมกบการสรางตวแปร ควรจะเลอกคาเรมตนใหตรงตามชนดตวแปรตามตวอยางตอไปน
a = 0 ถาตองการสรางตวแปร a ส าหรบรอการใชงานและท างานเกยวกบตวเลข ควรก าหนดคาใหกบตว
แปร a
a = " " ถาตองการสรางและรอการน าตวแปรไปใหงาน
หรอ b = " " ควรก าหนดคาขอความแบบวางหรอเรยกวา Empty String(ตองเขยนเครองหมาย ' ให
ตดกนเลย หามกดป ม Space Bar ขนกลางระหวางเครองหมาย ' หรอ " )
c = None หากตวแปร c เปนชนด Object ระหวางรอการน าไปใชงาน เราตองการลางคา Object ทคาง
อย ดวยการก าหนดคา None กบตวแปร
การใชตวแปรประเภท Sequence โดยปกตการใชงานตวแปรส าหรบเกบคาตางๆ จะจดเกบไดทละ 1 คาตอตวแปร(ชนดตวแปรกจะ
เปลยนตามคาทจดเกบดวย) เชน a=100 เปนตน ถามกรณพเศษทตองการใหตวแปรหนงตวจดเกบไดหลายคาในเวลาเดยวกน(คลายกบการใชงานตวแปรประเภทอารเรยหรอ Array ในภาษาอน) Python ไดท าการแบงรปแบบ
ตวแปรประเภทนไว 3 ประเภทยอย ไดแก
1. ตวแปรประเภท Tuple 2.ตวแปรประเภท List
3. ตวแปรประเภท Dictionary
ตวอยางท 1 การใชตวแปรประเภท Tuple
ขอควรสงเกต ตวแปรประเภท Tuple จะใชเครองหมายวงเลบ() และใชเครองหมายคอมมา(Comma)คนกลาง
ตวอยางท 2 การใชตวแปรประเภท List ส าหรบจดเกบขอมล
ขอควรสงเกต ตวแปรประเภท List จะใชเครองหมาย Slicing[] และคอมมา(Comma)
ตวอยางท 3 การใชตวแปรประเภท Dictionary ส าหรบจดเกบคาในตวแปร
ขอควรสงเกต ตวแปรประเภท Dictionary เครองหมายทใชงานกบตวแปรนคอ {} และคอมมา (Comma)
เนองจากตวแปรประเภท Tuple, List และ Dictionary สามารถเกบคาในตวแปรไดมากกวา 1 คา ตวแปรประเภทเหลานจงมโครงสรางของการจดเกบขอมล และวธการก าหนดล าดบหมายเลขอางอง(Index) ทแนนอน
ตามตวอยางโครงสรางตอไปน
ตวอยาง ตวแปร
'tv' 'dvd' 100 'fan ' 0
A[0] 1
A[1] 2
A[2] 3
A[3]
หากตองการใชคา dvd ทอยในตวแปร a จะตองใชหมายเลขอางองท 1
วธเขยนค าสง
b = a[1] คาในตวแปร b จะมค าวา dvd
กรณหมายเลขอางองมคาตดลบ
'tv' 'dvd' 100 'fan ' 0
A[0] -3
A[-3] -2
A[-2] -1
A[-1]
การใชหมายเลขอางองทมคาตดลบ เปนวธการเรยกคาจากต าแหนงสดทายแลวยอนขนไปหาคาแรกสด
ตวอยางถาตองการคาทเปน dvd แบบหมายเลขอางองยอนกลบหรอหมายเลขอางองตดลบ
b = a[-3]
ล าดบหมายเลขอางอง
ล าดบหมายเลขอางอง
การจดล าดบหมายเลขอางองขอมลในตวแปรประเภท Tuple และ List Sequence จะเรมตนจากศนย
และเพมขนไปเรอยๆโดยอตโนมต ตามคาขอมลทน ามาจดเกบ บางกรณทไมตองการหมายเลขอางองบอกขอมลอตโนมตทตวแปร Sequence สรางขนเองในภาษา python กมตวแปร Dictionary Sequence เพอรองรบ
การก าหนดหมายเลขอางอง พรอมคาขอมลจากผใชงานเอง
ตวแปร Tuple
ตวแปร List
ตวแปร Dictionary
แสดงการท างานของล าดบหมายเลขอางองของตวแปรประเภท Sequence
'tv' 'dvd' 100 'fan ' คาขอมล 0 1 2 3 Positive Index 0 -3 -2 -1 Negative Index
'tv' 'dvd' 100 'fan ' คาขอมล 0 1 2 3 Positive Index 0 -3 -2 -1 Negative Index
'tv' 'dvd' 100 'fan ' คาขอมล 100 200 300 400 Index
ล าดบหมายเลขอางอง
การใชงานตวแปร Tuple b = a[1] ผลลพธใน b คอ dvd
ล าดบหมายเลขอางอง
การใชงานตวแปร Tuple ผลลพธใน b คอ dvd
b = a[1]
ล าดบหมายเลขอางอง
การใชงานตวแปร Tuple b = a[200]
หรอ b = a.get(200) ผลลพธใน b คอ dvd
เทคนคการใชงานตวแปรประเภท Sequence ในลกษณะ Nested
นอกจากความสามารถในการจดการโครงสรางของตวแปรประเภท Sequence เพอรองรบการจดเกบ
ขอมลแบบลกษณะทวไปแลว ยงมการจดเรยงโครงสรางขอมลแบบซอนเชงลก หรอบางครงกเรยกวา Nested Sequence อกดวย
ตวอยางการสราง : การใชตวแปรประเภท Sequence แบบเกบคาทวไป
ตวอยางการสราง : การใชตวแปรประเภท Sequence แบบ Nested Sequence
สงเกต การจดเกบขอมลเชงลกในล าดบหมายเลขอางองท 1 ซงจะมรายการขอมล DVD หลายยหอ
ตวอยางวธการอานคา : ตวแปรประเภท Sequence แบบคาทวไป
รปแบบการเขยนค าสง
ตวอยางวธการอานคา : ตวแปรประเภท Nested แบบคาทวไป
รปแบบการเขยนค าสง
'TV' 'DVD' 5.67 'FAN' 0 1 2 3
'TV'
'DVD' a[1]
5.67
'FAN'
SONY DVD LG DVD FAN 0 1 2
a = ล าดบหมายเลขอางองแบบ Forward
a =
0 1 2 3
1 ล าดบหมายเลขอางองขนท 1
ขนท 2 ภายใตตวแปร a[1]
b = a [1][1] ผลลพธใน b จะมคาเทากบ LG DVD
ตวอยางทดลองการ Nested คาในตวแปรประเภท Sequence พมพค าสงตอไปน
รปแบบการเขยนตวแปรประเภท Sequence
ลกษณะการเขยนตวแปรประเภท Sequence ของภาษา Python ทมถง 3 ประเภทยอย ซงทบงบอกถง
ประเภทยอยนน จะใชเครองหมายรวมกบการก าหนดคาตางๆ ตามตารางท 3.7 ดงน
ชอประเภทยอย สญลกษณส าหรบการใชงาน ตวอยาง
1 Tuple () a = ('TV', 'DVD', 'VCD') 2 List [] a = ['TV', 'DVD', 'VCD'] 3 Dictionary {} a = {100:'TV', 200'DVD'}
ตารางท 3.7 การใชเครองหมายส าหรบการจดเกบขอมลลงในตวแปร Sequence แตละประเภทยอย
หลงจากเขาใจการจดเกบคาขอมลลงตวแปร Sequence ตามประเภทตางๆ ตอไปน การอานคาขอมลในตวแปร Sequence ในแตละประเภท ตามตารางท 3.8 ดงน
ชอประเภทยอย สญลกษณส าหรบการใชงาน ตวอยาง
Tuple a = ('TV', 'DVD', 'VCD') b = a[0] ไดคา tv List a = ['TV', 'DVD', 'VCD'] b = a[0] ไดคา tv Dictionary a = {100:'TV', 200'DVD', 300: 'VCD'} b = a[100] ไดคา tv
ตารางท 3.8 การใชเครองหมาย [] ส าหรบการอานคาขอมลจากตวแปรประเภทแบบ Sequence
การอานคาในตวแปรประเภท Sequence ของภาษา Python จะใชเครองหมายการอานคาเพยง
เครองหมายเดยวคอ [] โดยระบหมายเลขล าดบของคาทจดเกบตามล าดบโครงสรางทกลาวไวตอนตนหวขอน ยกเวนตวแปรทเปน Dictionary ทใชคา Key แทนหมายเลขล าดบคาขอมล
ตวอยางค าสงการใชตวแปร Sequence แตละประเภท พมพตามค าสงเพอดผลลพธ
ก าหนดใหคาตวแปร b
เปนแบบ List
ก าหนดคาลงในตวแปร c
เปนแบบ Dictionary
ก าหนดใหตวแปร a ซงเปน
แบบ Tuple Sequence
ตวแปรชนด Tuple
ตวแปรชนดนจดอยในกลมตวแปรประเภท Sequence ทสามารถเกบคาตางๆ คลายกบตวแปรอารเรย(Array) ของภาษาอนๆ ลงในตวแปรตวเดยว โดยคาทจดเกบจะจดเรยงตามล าดบการใสคาขอมลไวในตวแปร
และจะก าหนดหมายเลขล าดบ(Index) ใหกบคาในโครงสรางของตวแปร แตเนองจากตวแปรชนด Tuple จดเปน
โครงสรางแบบ Immutable(Immutable เปนโครงสรางทเมอมการก าหนดคาขอมลลงในตวแปรทมโครงสรางแบบนเรยบรอยแลว ขณะน าตวแปรทมโครงสรางแบบ Immutable ไปใช จะไมสามารถเพมหรอลบคาขอมลท
จดเกบในโครงสรางนได ยกเวนการแกไขคาขอมลทมอยแลวในตวแปร)
บรรทดท 1 เปนการก าหนดคาขอมลใหตวแปร a เนองจากการใชเครองหมาย() จะก าหนดโครงสราง
การจดเกบคาขอมลทเปน Immutable โดยอตโนมต
กรณมขอมลเพยงคาเดยว แตตองการก าหนดลงในตวแปรใหเปนแบบ Tuple จะมเทคนคการก าหนดคา
ขอมลตามรปแบบการเขยนดงน
พมพคาขอมลทระบตามหมายเลขล าดบ(Index)
เปนการใหหมายเลขล าดบ(Index) ทางดานลบ
ขอสงเกต การใชเครองหมาย , (Comma) ตอทายกอนวงเลบปด จะเปนสงทบงบอกให Python รวาตว
แปร a จะตองเปนชนด Tuple เทานน เมอเรยกใชงานกตองเขยนค าสงดงน
b = a[0]
ถาลมเครองหมาย , (Comma) ตอทายจะเกดอะไรขนกบตวแปร a ค าตอบกคอ ตวแปร a จะเปนตวแปรปกต เกบคาขอมลไดทละ 1 คา และเปนขอมลชนดแบบขอความทวไป
ตวแปรชนด List
หนงในตวแปรประเภท Sequence ทมความยดหยนในการก าหนดคาขอมลลงในตวแปร และขณะน า
ตวแปรชนดนไปใชงานกสามารถเพม,ลบ,แกไขคาขอมลในตวแปรไดตลอดเวลา ดวยโครงสรางการจดเกบคา
ของตวแปร List เปนแบบ Mutable(Mutable เปนโครงสรางทเหมาะกบคาขอมลทมการเปลยนแปลงในลกษณะการเพม,ลบ,หรอแกไข ขณะน าไปใชงาน)
a = ['ปลาท', 1000, 'ปลาสลด'], 'กโลกรม']
-4 -3 -2 -1 'ปลาท' 1000 'ปลาสลด' 'กโลกรม' 0 1 2 3
รปท 3.10 แสดงโครงสรางการจดคาขอมลของตวแปรชนด List
ลกษณะการจดเกบคาของตวแปรชนด List จะเรยงตามล าดบการน าคาขอมลเขาไปเกบภายในตวแปรและก าหนดหมายเลข Index ส าหรบขอมลแตละคาทจดเกบ ตามโครงสรางของตวแปรในรปท 3.10 เมอ
ตองการคาในตวแปรขณะใชงานจะใชวธอางหมายเลขล าดบ Index ของคาขอมลนนๆ
มเครองหมาย Comma ตวแปร a เปนชนด Tuple
ไมมเครองหมาย Comma เปนตวแปรแบบทวไป
จะไดตวอกษร ‘ป’ ซงเปนอกษรตวแรก เนองจากตวแปร b เปนตวแปรแบบ String ไมใชตวแปรแบบ Tuple
a =
หมายเลขล าดบ Index ทางดานลบ
หมายเลขล าดบ Index ทางดานบวก
ตวอยางการสรางตวแปรชนด List และเรยกใชงานคาภายในตวแปร
ในการเพมหรอลบคาขอมลภายในตวแปร List จ าเปนตองเรยกใชค าสงพเศษ โดยเรยกค าสงพเศษนวา Method ตอไปนเปนตารางกลม Method ทมใชตวแปร List
รปแบบ ค าอธบาย A.ppend(x) น าคาในตวแปร x ไปเพมทต าแหนงทายสดของกลมขอมลในตวแปร a A.count(x) นบจ านวนกลมขอมลทอยในตวแปร a A.extend(m) A+=m
น าคาในตวแปร m ไปเพมทต าแหนงทายสดของกลมขอมลในตวแปร a
A.index(x,start,end) อานคาในตวแปร a ตามต าแหนงของ Index ทระบไวในตวแปร x A.index(i,x) น าคาในตวแปร x เพมทต าแหนงของ Index ตามทระบในตวแปร i A.pop() อานคาทต าแหนงทายสดของตวแปร a และลบคาดงกลาวออกจากตวแปร a ดวย A.pop(i) อานคาทต าแหนงทายสดของตวแปร i ระบ Index ของตวแปร a และลบคาดงกลาวออกจาก
ตวแปร a ดวย A.remove(x) ลบคาตามทระบในตวแปร x จากกลมขอมลในตวแปร a ถาหาคาดงกลาวไมเจอ จะเกด
ขอผดพลาดในกลมของ Value Error ขน A. reverse() เรยงคากลมขอมลจากทายสดไปต าแหนงแรกสด A.sort(...) เรยงคากลมขอมลจากนอยไปมาก
ก าหนดคาขอมลเรมตนลงในตวแปร a ทเปนชนด List
ท าการแกไขคาในตวแปร List
ตวแปรชนด Dictionary
สมมตวาเราตองการเกบคาขอมลลงในตวแปรประเภท Sequence โดยมเงอนไขเกยวกบคาขอมลทประกอบดวยรหสของขอมลทก าหนดพรอมกบคาขอมลทตองการจดเกบ ตามตารางท 3.10 แสดงองคประกอบ
ของคาขอมล
ลกษณะองคประกอบ รหสของขอมลทก าหนดเอง : คาขอมลทตองการจดเกบ ชอทางเทคนคใน Python Key : Value ตวอยางคาขอมล 'T100' : 'TV'
ตารางท 3.10 แสดงองคประกอบคาขอมลส าหรบใชกบตวแปรชนด Dictionary
เมอถกน ามาใชรวมกบตวแปรประเภท Sequence ดวยคาขอมล 1 คา แตประกอบดวยรหสและคาขอมล
รวมกน นอกจากนยงมเงอนไขวาการน ามาใชงานหรออานคาขอมลภายในตวแปรตองใชวธการระบรหสทเรา
ใสลงไปพรอมกบคาขอมลแทนการใชหมายเลขล าดบ Index ปกตทเราคนเคยกบตวแปร Sequence ชนด Tuple
หรอ List พอเจอเงอนไขขอหลงน กคงไมมทางเลอกทจะตองใชตวแปร Sequence ชนด Dictionary ทเหมาะตอ
การลองรบคาขอมลทมโครงสรางพเศษและเรยกใชงานดวยรหสทมาพรอมกบคาขอมล ส าหรบการเขยนค าสง
ของ Python ทจะก าหนดตวแปรใหเปนชนด Dictionary จะใชเครองหมาย {} รวมกบคาขอมล
a = { 't100': 'TV' 'd200': 'DVD' 'v300': 'VCD' } คาขอมลท 1 คาขอมลท 2 คาขอมลท 3
แสดงการก าหนดคาขอมลทมรหสและคาขอมลในตวเองลงในตวแปร a ซงเปนชนด Dictionary
b = a['d200'] หรอ a.get('d200')
แสดงวธใชงานตวแปร a เมอตองการคาขอมลทเกบไวภายในตวแปร
เนองจากตวแปรชนด Dictionary ใชโครงสรางคาขอมลเปนแบบ Mutable ทมคณสมบตในการเพม,ลบ,และแกไขคาภายในตวแปรโดยการใช Method ของตวแปรชนด Dictionary ชวยในการท างานตาม
คณสมบตตางๆ ดงตาราง 3.11
Key Value
การอาง Key หรอรหสของคาส าหรบการอานขอมล
รปแบบ ค าอธบาย d.clear() ลบกลมขอมลภายในตวแปร d ทงหมด d.copy() ส าหรบการ copy กลมขอมลในตวแปร d ไปยงตวแปรอกตวหนง d.fromkeys(s,v) ตรวจหาคา key ของคาขอมลทระบในตวแปร s โดยคา key ทได เกบไวในตวแปร v d.get(k) อานคาขอมลตามคา key ทระบในตวแปร k d.get(k,v) อานคาขอมลตามคา key ทระบในตวแปร k d.items() อานคาขอมลและคา key จากกลมขอมลภายในตวแปร d ทงหมด d.keys() อานเฉพาะคา key ของกลมขอมลภายในตวแปร d.pop(k) อานคาทต าแหนงทตวแปร k ระบ Index ของตวแปร d และลบคาดงกลาวออกจาก
ตวแปร d ดวย d.pop(k,v) อานคาทต าแหนงทตวแปร k ระบ Index ของตวแปร d และลบคาดงกลาวออกจาก
ตวแปร d ดวย d.popitem() อานคาขอมลทต าแหนงแรกสด และลบคาดงกลาวออกจากตวแปร d ดวย d.setdefault(k,v) ก าหนดคาขอมลภายในตวแปร d เปนคา default ส าหรบการอานคาจาก g.get() d.update(a) น าคาในตวแปร a ทเปนชนด Dictionary เชนเดยวกบตวแปร d ไปแกไขขอมลใน
ตวแปร d d.values() อานเฉพาะคาของกลมขอมลภายในตวแปร d ทงหมด
ตารางท 3.11 Method ส าหรบตวแปรชนด Dictionary
ตอไปนเปนการทดลองตวอยางค าสงของตวแปร Dictionary
เปนการใชงานตวแปรโดยการแกไขคาภายในผานรหสปจจบน
ตวอยาง การใชตวแปร Dictionary รวมกบกลม Method
สรป ขอแตกตางของตวแปรชนด Tuple, List และ Dictionary ส าหรบการเลอกน าไปใชงานใหเหมาะสมตาม
ลกษณะของคาขอมลทน ามาใชงานรวมกบตวแปรทง 3 ชนด ตามตารางท 3.12 ดงน
ชนดตวแปร
ใชหมายเลข
Index
ก าหนดคยส าหรบขอมล
เพมขอมลส าหรบใชงานตวแปร
แกไขคาขอมลขณะใชงาน
ลบคาขอมลขณะใชงาน
ใชโครงสรางการเกบขอมล
ความเรวในการท างาน
ชนดตวแปรทใชได
Tuple Immutable เรวทสด ทกชนด List Mutable กลาง ทกชนด Dictionary Mutable กลาง ทกชนด
น าคาขอมลจากตวแปร b เพมเขาไปในตวแปร a
ลบคาขอมลทใชรหส(Key) ทมคา 100
ประกาศคาขอมลใหมในตวแปร b
แกไขคาในตวแปร a
ลบทกคาขอมลในตวแปร a
ตาราง แสดงคณสมบตของตวแปรชนด Tuple, List และ Dictionary
การใชโอเปอเรเตอร (Operator) กบตวแปร การพฒนาโปรแกรม เชน a+b,c ^2 เปนตน รปแบบการเขยนค าสงจะประกอบดวยตวแปรชนดตางๆ น ามา
ค านวณรวมกน ส าหรบนกพฒนาโปรแกรมทงหลายจะเหนวาเครองหมายทเกยวของกบการค านวณทเปน
พนฐาน ไดแก
รปแบบการเขยน ความหมาย (ก าหนด A=10,B=5) ตวอยาง A+B ท าการบวกคาในตวแปร A และ B 10 + 5 = 15 A-B น าคาในตวแปร A ลบกบตวแปร B 10 – 5 = 5 A*B คณคาในตวแปร A และ B เขาดวยกน 10 * 5 = 50 A/B หรอ A // B หารคาตวแปร A ดวย B 10/5 = 2 A ^ B ใช xor ระหวางตวแปร A และ B 10 ^ 5 = 2 A % B หาคาเศษจากการหารตวแปร A ดวย B 10 % 5 = 0 A|B ท าการ or ระหวางคาในตวแปร A และ B 10 | 5 = 5 A ** B ยกก าลงคาในตวแปร A ยกก าลงดวย B 10 ** 5 = 100000 A & B ท าการ and ระหวางคาของ A และ B 10 & 5 = 0 A >> B เลอนคาบตในตวแปร A ไปทางขวาดวย B 10 >> 5 = 0 A << B เลอนคาบตในตวแปร A ไปทางซายดวย B 10 << 5 = 320 ~A เปนการ Not กลบคาในตวแปร A ~ 5 -A คาในตวแปร A ตดลบ -10
เรยกเครองหมายเหลานนวา โอเปอเรเตอร(Operator) ลกษณะการน าเครองหมายโอเปอเรเตอรไปใชงาน จะแบงตามชนดของและตวแปรและสถานการณ ซงบางครงกเปนเครองหมายโอเปอเรเตอรเดยวกนแต
ลกษณะแตกตางกน ยกตวอยางค าสงของ Python ตอไปน
ก าหนดคา 10 และ 20 ลงในตวแปรทเปนชนด Int
ท าการ or คาภายในในระดบบตของตวแปรทง a,b ดวยเครองหมาย |
แสดงผลลพธทเกดจากการ or คาของตวแปร a และ b
ท าการเซตคาในกลมขอมลของตวแปร a และ b ดวยการ Union ดวยเครองหมาย |
จะเหนวา กลมตวแปร a,b,c มการใชเครองหมายโอเปอเรเตอร | เพอท าการ or ขอมลในระดบบต (Bit)
ผลลพธทไดในตวแปร c กเกดจากการ or คาของตวแปร a และ b คราวนมาดกลมตวแปร x,y,z ทใชเครองหมาย
โอเปอเรเตอร | เชนเดยวกบกลม a,b,c ทอธบายไปกอนหนาน เพยงแตวาการใชเครองหมายโอเปอเรเตอร | กบ
ตวแปร x,y,z ทเปนตวแปรประเภท Sequence ชนด List (สามารถจดเกบคาขอมลไดมากกวา 1 คา ภายในตว
แปร) จะอยในรปของการท ายเนยนเซตทางคณตศาสตร (Union Set) ดวยการน ากลมคาขอมลในตวแปร x มาท า
การยเนยนคากบตวแปร y หรอ x u y โดยเกบผลลพธทไดลงในตวแปร z จากทง 2 กรณของกลมตวแปร
a,b,c และกลม x,y,z ทใชเครองหมายโอเปอเรเตอรเดยวกน แตลกษณะการท างานแตกตางกน เพอความงายตอ
การศกษาการใชเครองหมายโอเปอเรเตอรของภาษา Python จะขอแบงออกเปนหวขอยอย ดงน
1. การใชโอเปอเรเตอรกบตวแปรชนดตวเลข (Numeric And Iterable Operator)
2. การใชโอเปอเรเตอรกบตวเลขจ านวนเตมในระดบบต (Integer Bitwise Operator)
3. เซตของขอมลกบการใชโอเปอเรเตอร (Set Operator)
การใชโอเปอเรเตอรกบตวแปรชนดตวเลข (Numeric And Iterable Operator)
การค านวณทางคณตศาสตรนบเปนพนฐานประกอบการเขยนค าสงรวมกบตวแปรหรอคาตวเลข
โดยตรง สวนใหญจะใชโอเปอเรเตอรดานการค านวณ เชน บวก (+), ลบ(-),คณ(*),หาร(/),ยกก าลง(**) ฯลฯ
(กรณตองการท าสตรสมการทซบซอนมากขน เชน การท า Log, ตรโกณมต ซงไมมโอเปอเรเตอรรองรบการ
ค านวณแบบนโดยตรง แตจะใชผานฟงกชนภายในทเกยวกบการค านวณมาตรฐานทวไป เพยงแตเมอใดกตามท
จะใชฟงกชนภายในเหลานกอยาลมอางองถงโมดลทชอวา Math หรอการ Import Math กอนเรยกใชงานฟงกชน
เสมอ) ตอไปนเปนตวอยางเกยวกบโอเปอเรเตอรดานการค านวณดงตวอยางตอไปน
ตวอยางท 1
ตวอยางท 1 จะเหนการใชเครองหมายโอเปอเรเตอรทมรปแบบการเขยนค าสงทแตกตางกน โดยทม
กระบวนการค านวณเหมอนกนตามตารางดานลาง แสดงรปแบบวธใชเครองหมายโอเปอเรเตอรกบการค านวณ
Numeric Operator Iterable Operator A = A + 1 A += 1 A = A * 1 A *= 1 A = A / 1 A / = 1 A = A - 1 A -= 1 A = A ** 2 A **= 2 A =A %3 A %= 3
ตารางแสดงรปแบบการใชงานเครองหมายโอเปอเรเตอรส าหรบการค านวณ
รปแบบ ค าอธบาย
s + t ถาหากตวแปร s และ t มคาขอมลทเปนชนดขอความหรอ Sequence จะเปนการเชอมตอระหวางกลมขอมลเขาดวยกน
s * n ถาคาขอมลในตวแปรเปนชนดขอความหรอ Sequence จะเปนการเชอมตอดวยคาขอมลของตวแปรซ าๆ กนตามจ านวนของตวแปร n
x in i น าคาในตวแปร I สบคนภายในคาขอมลตวแปร x ซงผลลพธจะใหคาเจอ(True) หรอไมเจอ (Flase)
all(i) กลมค าขอมลทกๆ ค าในตวแปร i จ าเปนตองมตรรกะเปนจรง (True) ผลลพธของฟงกชนจะได True เปนค าตอบ (เหมอนค าสง if ใชคกบ and) ตวอยาง i=10 j=3 all([i>2,j>2]) ผลลพธ True
any(i) กลมค าสงขอมลทกๆ คาในตวแปร i คาใดคาหนงมตรรกะเปนจรง (True) ผลลพธของฟงกชนจะได True เปนค าตอบ (เหมอนค าสง if ใชคกบ or) ตวอยาง i=30 j=30 any([i>2,j>10]) ผลลพธ True
รปแบบ ค าอธบาย enumerate(i,start) แสดงล าดบ Index คกบกลมคาขอมลในตวแปร i
ตวอยาง i = [‘L’,’O’,’M’] for r,v in enumerate(i): print(r,v) ผลลพธ 0 L 1 O 2 M
len(x) อานจ านวนตวอกษรในตวแปร x หรอจ านวนกลมคาตวขอมลในตวแปร x ทเปนชนด Sequence
max(i,key) บอกคา key ทมากทสดในตวแปร i ทเปนชนด Sequence min(i,key) บอกคา key ทนอยทสดในตวแปร i ทเปนชนด Sequence rang(start,stop,step) ท าการนบจ านวนตวเลขโดยเรมจาก Start และสนสดท Stop ซงผลลพธทไดจะแสดงคา
ออกมา reversed(i) อานคากลมขอมลในตวแปร i ทเปนชนด Sequence จากทายสดมาหนาสด
ตวอยาง
Sorted(i, key, reverse) เรยงคาขอมลในตวแปร i sum(i,start) หาคาผลรวมในตวแปร i ทเปนชนด Sequence ****(a,…,b) ก าหนดล าดบระหวางคาขอมลทเกดจากกลมตวแปร a ถง b
ตารางแสดงรปแบบการใชโอเปอเรเตอรและฟงกชนส าหรบขอมลชนด Sequence
ตวอยางท 2 ทดลองพมพค าสงการใชสมการพทาโกรส รป004 ส าหรบการค านวณหาความยาวของดานตรง
ขามมมฉาก โดยการปอนคา a และ b ผานคยบอรด และท าการแสดงผลลพธ
การใชโอเปอเรเตอรกบตวเลขจ านวนเตมในระดบบต (Integer Bitwise Operator)
เครองหมายโอเปอเรเตอรในระดบบตมกนยมน ามาใชกบเลขฐานสอง (Binary) ส าหรบการค านวณ
ทางดานพชคณตบลน (Boolean) ซงประกอบดวยการ and, or, xor และ Not (Invert) เปนตน เมอน ามาเขยนเปน
ค าสงรวมกบภาษา Python จะใชเปนเครองหมายโอเปอเรเตอรกบตวแปรทเปนชนดตวเลขจ านวนเตมดงตาราง
รปแบบ ค าอธบาย i | j จะไดผลลพธทเกดจากตรรกะการ or จากคาในตวแปร i และ j ทเปนชนด Int i ^ j จะไดผลลพธทเกดจากตรรกะการ xor จากคาในตวแปร i และ j ทเปนชนด Int i & j จะไดผลลพธทเกดจากตรรกะการ and จากคาในตวแปร i และ j ทเปนชนด Int i << j ผลลพธจากการเลอนคา bit ไปทางซาย 1 คา คลายกบการค านวณจากสมการ i*(2**j)) i >> j ผลลพธจากการเลอนคา bit ไปทางขวา 1 คา คลายกบการค านวณจากสมการ i*(2**j)) ~ i จะไดผลลพธทเกดจากตรรกะการ Not
ตารางแสดงการใชโอเปอเรเตอรกบเลขจ านวนเตมในระดบบต
เปนการก าหนดรปแบบการค านวณทางพชคณตบลนของ Python เพอใหเกดความเขาใจตอการใชงาน
โอเปอเรเตอรทางพชคณตบลน ดงตวอยางตอไปน
อธบายค าสง
a,b = 5,3
print (a|b)
print (a,b)
a |=b <--- ท าการ or คาบตของ a กบ b แลวเกบผลลพธทไดไวใน a สงเกตการณใชเครองหมาย
โอเปอเรเตอร or คกบเครองหมายเทากบ (=)
print (a)
a,b = 5,3
print (a&b) <--- ท าการ and คาบตระหวางตวแปร a และ b
print (a,b)
a &= b <--- ท าการ and คาบตของตวแปร a,b แลวเกบผลลพธทไดไวในตวแปร a
print (a)
print (a,b)
a = 2 <--- ก าหนดคา a=2 หรอ 0010 ฐานสอง
print (a>>1) <--- ใชโอเปอเรเตอร >> ส าหรบเลอนคาบตไปทางขวาตามจ านวนบตทระบ เชน a>>1 แสดง
ถงการเลอนคาบตไปทางขวา 1 ครง
อธบายค าสง
a,b = 5,3
print(a)
a >>= 1 <--- เมอเพมเครองหมายเทากบตอทายเครองหมายโอเปอเรเตอร >> เพอตองการเกบผลลพธ
ทเกดจากเลอนคาบตไวในตวแปร a ดงนนคาในตวแปรจะเปลยนไปจากคาเดม
print(a)
a = 2
print(a<<1) <--- ท าการเลอนคาบตในตวแปร a ไปทางซายมอ 1 ครง โดยไมเกบผลลพธทเกดจากการ
เลอนคาบต
print(a)
a <<= 1 <--- เมอเลอนคาบตไปทางซาย 1 ครง และใหเกบผลลพธทเกดจากการเลอนไวในตวแปร a
print(a)
a,b = 7,8
print(a^b) <--- ท าการ xor คาบตในตวแปร a ดวยคาในตวแปร b
print(a,b)
a ^= b <--- หลงท าการ xor ในตวแปร a กบ b จะเกบผลลพธทไดลงในตวแปร a
print(a,b) <--- คาตวแปร a จะเปลยนไปจากเดม
เซตของขอมลกบการใชโอเปอเรเตอร (Set Operator)
ใน Python มตวแปรประเภท Sequence ทประกอบดวย Tuple,List และ Dictionary ทมความสามารถในการจดเกบคาขอมลชนดตางๆ เปนกลมเปนกอนลงในตวแปรประเภท Sequence ได
รปแบบ ค าอธบาย s.add(x) เพมคาขอมลในตวแปร s ดวยคาของตวแปร x s.clear() ลบกลมคาขอมลทงหมดของตวแปร s s.copy() ใชส าหรบการ copy กลมคาขอมลทงหมดของตวแปร s ใหกบตวแปรอนๆ s.difference(t) s-t
เปนฟงกชนทแสดงกลมคาขอมลทมความแตกตางของตวแปร s และ t โดยแสดงผลลพธสวนทแตกตางของตวแปร s เทานน
s. difference_update(t) s-=t
เปนฟงกชนทแสดงกลมคาขอมลทมความแตกตางของตวแปร s และ t โดยแสดงผลลพธสวนทแตกตางของตวแปร s เทานนและจดเกบคาผลลพธลงในตวแปร s
s.discard(x) ลบคาขอมลในตวแปร s ดวยคาขอมลของตวแปร x s.intersection(t) s&t
เปนฟงกชนทแสดงกลมคาขอมลทเหมอนกนของตวแปร s และ t โดยแสดงผลลพธสวนทเหมอนกนของตวแปร s เทานน
s. intersection_update(t) s&=t
เปนฟงกชนทแสดงกลมคาขอมลทเหมอนกนของตวแปร s และ t โดยแสดงผลลพธสวนทเหมอนกนของตวแปร s เทานนและจดเกบคาผลลพธลงในตวแปร s
s.sclisjoint(t) แสดงผลลพธเปน True เมอตรวจคากลมขอมลในตวแปร s และ t ไมมกลมขอมลใชรวมกน
s.issubset(t) s<=t
แสดงผลลพธเปน True เมอตรวจคากลมขอมลในตวแปร s และ t ทเปนลกษณะ subset
s.issuperset(t) s>=t
แสดงผลลพธเปน True เมอตรวจคากลมขอมลในตวแปร s และ t ทเปนลกษณะ superset
s.poop() ลบคาขอมลทต าแหนงทายสดของตวแปร s s.remove(x) ลบคาขอมลในตวแปร s ดวยคาขอมลของตวแปร x ถาไมเจอจะเกดขอผดพลาดใน
กลมของ Key Error s.symmetric_difference(t) s^t
เปนฟงกชนทแสดงกลมคาขอมลทมความแตกตางของตวแปร s และ t
s.symmetric_difference_ update (t) s^=t
เปนฟงกชนทแสดงกลมคาขอมลทมความแตกตางของตวแปร s และ t โดยจดเกบคาผลลพธลงในตวแปร s
รปแบบ ค าอธบาย s.union(t) s|t
เปนฟงกชนทแสดงกลมคาขอมลทมทงหมดของตวแปร s และ t
s.update(t) s|=t
เปนฟงกชนทแสดงกลมคาขอมลทมทงหมดของตวแปร s และ t โดยจดเกบคาผลลพธลงในตวแปร s
ตารางแสดงรปแบบการใชโอเปอเรเตอรและฟงกชนส าหรบขอมลชนด Set
แตถาตองการน ากลมขอมลเหลานนมาท างานแบบเขต ภาษา Python กมฟงกชนเซต (Set Function)
ส าหรบท างานกบคาในตวแปรประเภท Sequence โดยทฟงกชนเซตแบงออกเปน 4 ชนดยอย ไดแก
1. ฟงกชนยเนยน (Union) ใชเครองหมายโอเปอเรเตอรคอ |
2. ฟงกชนอนเตอรเซกชน (Intersection) ใชเครองหมายโอเปอเรเตอรคอ &
3. ฟงกชน Difference ใชเครองหมายโอเปอเรเตอร คอ -
4. ฟงกชน Symmetric Difference ใชเครองหมายโอเปอเรเตอรคอ ^
รปแบบการเขยนค าสงส าหรบการใชฟงกชนเซตกบตวแปร Python จะมลกษณะตามรปตวอยาง
ดานลางจะแสดงผลลพธทเกดจากการใชฟงกชนเซตแตละชนดรวมกบตวแปร
รปแสดงรปแบบและการเขยนฟงกชนเซตรวมกบตวแปร
ชนดของฟงกชนเซต รปแบบการเขยน ผลลพธ Uninon set(‘earth’) | set(‘mar’) ‘a’,‘e’, ‘h’, ‘m’, ‘r’, ‘t’ intersection set(‘earth’) & set(‘mar’) ‘a’, ‘r’ Difference set(‘earth’) – set(‘mar’) ‘h’,‘e’, ‘t’ Symmetric Difference set(‘earth’) ^ set(‘mar’) ‘h’, ‘m’, ‘r’, ‘t’
ตารางแสดงการใชงานฟงกชนเซตแตละชนด
อธบายค าสง
a='earth'
b='mar'
print(set (a) | set(b)) <--- ฟงกชนเซตชนดยเนยน
print(set (a) & set(b)) <--- ฟงกชนอนเตอรเซกชน
print(set (a) - set(b)) <--- ฟงกชนชนด Difference
print(set (a) ^set(b)) <--- ฟงกชนเซตชนด Symmetric Difference
ตวอยางท 2 การใชฟงกชนเซตกบตวแปรประเภท Sequence
สมมตวามรานขายของ 2 สาขา ทมสนคาหนารานบางรายการเหมอนกน และบางรายการกตางกนคราวนลองมาใชฟงกชนเซตชนดตางๆ ชวยงานเกยวกบสนคา ดงน
การก าหนดขอบเขตการใชงานตวแปรในโมดล
การเขยนโปรแกรมส าหรบพฒนางานตางๆ ดวยภา Python มกนยมเขยนกลมค าสงตางๆ ลงในโมดล (ท าการเปดโมดลใหม โดยการเลอกเมน File แลวตามดวยการเลอกเมน New บนจอภาพจะปรากฏหนาจอใหม
ส าหรบเขยนโปรแกรมขนมา ส าหรบโครงสรางโมดลของ Python ประกอบดวยอะไรบาง ไดอธบายไวในบทท
2 ) สงหนงทตองใหความสนใจกบการใชงานตวแปรในโมดลทเขยนคอ การก าหนดขอบเขตการใชงานตวแปรภายในโมดล เนองจากโครงสรางในโมดลจะแบงออกเปน 4 สวน ตามรปดานลาง
รปแสดงโครงสรางของโมดลส าหรบเขยนค าสงตางๆ
สวนท2,3 และ 4 ของโครงสรางโมดล มกเปนสวนทเกยวกบการใชงานตวแปรของโปรแกรม โดยสวนใหญเรามกประกาศตวแปรในสวนท 2 ซงจะมขอบเขตทตวแปรจะถกเรยกน าไปใชงานไดในสวนท 3 และ 4
ของโมดล
รปแสดงขอบเขตการก าหนดและเรยกใชงานของตวแปรภายในโมดลของ Python
เขยนค าสงตามตวอยาง (เปดโมดลใหม Python Shell โดยการเลอกเมน File เลอกเมนยอยทชอ New)
บรรทดท 1 Import math ในสวนท 1 อางองโมดล math จากภายนอกมาใชในโมดลน
บรรทดท 2 บรรทดท 3 บรรทดท 4
a = 100 b = ‘แชมพ’ c = ‘2 ขวด’
ส าหรบสวนท 2 ไดก าหนดตวแปร a,b,c เพอใชงานในโมดลน
บรรทดท 5 บรรทดท 6
def orderme(): print(‘อยากสง %s เพมจง’ %b)
เปนสวนท 3 ส าหรบฟงกชนทชอ orderme ซงมการเรยกใชตวแปรจากสวนท 2 คอ b มาใชรวมกบค าสงอนๆ ภายในฟงกชน
บรรทดท 7 บรรทดท 8 บรรทดท 9 บรรทดท 10
print(‘รหส %d’ %a) print(b,c) print(‘รหส %d สง %s จ านวน %s’ %(a,b,c)) orderme()
สวนท 4 ซงเปนจดเรมตนการท างานของโปรแกรม และเรยกใชงานตวแปร a,b,c จากสวนท 2
ตวอยางการเขยนค าสง
จากตวอยางจะเหนไดถงวธก าหนดตวแปรในโมดล และวธเรยกใชตวแปรทก าหนดขนในสวนตางๆ ของโมดล ขอบเขตการใชงานตวแปร ในบางกรณจ าเปนตองระบคยบอรด (Keyword) ทชอวา Global เพมเตม
ลงไปในโพรซเจอรหรอฟงกชน อาจจะมการก าหนดตวแปรแบบ Local เพอใชงานเฉพาะภายในโพรซเจอร
หรอฟงกชนเทานน สงเกตไดจากตวอยางดานลาง
ตวอยางท 1 แสดงวธก าหนดและใชงานตวแปรแบบ Local ในฟงกชน test
อธบายค าสง
a = 95 <--- ก าหนดตวแปร a ในสวนท 2 ของโมดล
def test(): <--- สรางฟงกชน test ในสวนท 3 ของโมดล
c=7
print('a = %d, c= %d' %(a,c))
print(a) <--- เปนจดเรมตนเขยนค าสงตางๆ ในสวนท 4 ของโมดล โดยบรรทดนจะพมพคาในตวแปร a ท
ก าหนดในสวนท 2
test() <--- เรยกฟงกชน test มาใชงาน
print(a) <--- พมพคาตวแปร a ทก าหนดในสวนท 2
จากตวอยางท 1 จะเหนวาในฟงกชน test มการก าหนดตวแปรภายในทชอ c ส าหรบใชงานเฉพาะใน
ฟงกชนเทานน และในฟงกชนนกยงใชงานตวแปร a ของโมดลน โดยการพมพคาตวแปร a ดวยค าสง print
ตวอยางท 2 แสดงการก าหนดตวแปรแบบ Local ในฟงกชน test ทมชอตวแปร a ของโมดล และ ตวแปรชอ a
ของฟงกชน test เหมอนกน เพอดผลลพธทเกดขน
อธบายค าสง
a=85 <--- ก าหนดตวแปร a ในสวนท 2 ของโมดล
def test(): <--- สรางฟงกชน test ในสวนท 3 ของโมดล
c=3 <---
a=65 ก าหนดตวแปรภายในทชอ a และ c ทใชเฉพาะในฟงกชนนเทานน ซงตว
แปรภายใน a ทก าหนดในฟงกชนน จะไมใชตวเดยวกนกบตวแปร a ของโมดลทประกาศในสวนท 2
print(a,c) <--- พมพคาตวแปร a และ c ซงตวแปรทง 2 ตวจะใชงานเฉพาะฟงกชนนเทานน
print(a) <--- จดเรมตนของค าสงในโปรแกรมน จะท าการพมพคาในตวแปร a ของโมดล
test() <--- เรยกฟงกชนในสวนท 3 ของโมดลน
print(a)
จากตวอยางท 2 การก าหนดตวแปรทชอ a จะม 2 ตวแปรโดยตวแปร a ตวแรกจะถกก าหนดในสวนท 2
ของโมดล ซงมขอบเขตการใชงานตวแปรตวนไดทกทในโมดลน ตวแปร a ตวทสองถกก าหนดภายในฟงกชน
test ไดมการตงชอตวแปรซ ากบตวแปร a ตวแรก ภายในฟงกชน test เมอมการเรยกใชตวแปรทชอ a ฟงกชน test จะเรยกใชตวแปรภายใน a ตวทสองเสมอ
ตวอยางท 3 แสดงการใชตวแปร a ของโมดล รวมกบฟงกชน test โดยใชคยเวรด Global
รปแสดงขอความผดพลาดทเกดจากการน าตวแปร a ของโมดลมาใชค านวณภายในฟงกชน test
อธบายค าสง
a=85 <--- ก าหนดตวแปร a ในสวนท 2 ของโมดลน
def test(): <--- สรางฟงกชน test ในสวนท 3 ของโมดลน
a = a + 55 <--- เรยกใชตวแปร a ของโมดลมาท าการค านวณในฟงกชน test
print(a)
print(a) <--- จดเรมตนของค าสงในโมดลน ซงอยในสวนท 4
test()
print(a)
ผลลพธจากการท างานของโปรแกรมในตวอยางท 3 จะเกด Error ดงทปรากฏในรปดานบน ในฟงกชน test บรรทดทเปนการ
ค านวร a = a + 85
บทท 4 การตรวจสอบเงอนไข
ลองนกภาพการใชงานโปรแกรมสมครสมาชกรานกาแฟ ทในชองอายของสมาชกมความจ าเปนตองกรอกจ านวนตวเลขเทานน เพอน าไปจดเกบลงบนทกเขาสระบบฐานขอมล ดแลวกนาจะเปนการใชงานทราบรนตามขนตอนการใชงานโปรแกรมทวไป แตเผอญผใชงานมนถอไปนด หนงปอนเปนคา a7 ลงในชองอาย ลกคากรบๆ เพลงใหผใชงานรบท างานใหเสรจผใชงานจงไมไดตรวจสอบความถกตองของขอมลทกรอกไวบนจอภาพกอนท าการบนทกลงในฐานขอมล คดดวาอะไรจะเกดขนกบขอมลในชองอาย ทตองเปนตวเลข ถาโปรแกรมเมอรเขยนโปรแกรมไวดกจะมการตรวจสอบขอมลตามชองกรอกขอมลวาถกตองหรอเปลา แลวแจงเตอนผใชงานใหแกไขใหถกตองจะเหนวาพนฐาน 1 ในการเขยนโปรแกรมไมวาจะเขยนดวยภาษาใดหรอแมแตภาษา python กจะตองมค าสงตรวจสอบเงอนไขเพอน ามาใชแกไขปญหาตามทยกตวอยางโปรแกรมรานกาแฟกบการปอนอายเปนตนซงสวนใหญค าสงตรวจเงอนไขวง ได (python conditional branching) มกจะใชเปนค าสง If ( If statement) โดยจะมวธการเขยนตามรปแบบดงน
If เงอนไข :
{ else :
{
ค าวา “เงอนไข” ทเหนในรปแบบของค าสง if (ซงสวนใหญ Python จะเรยกวา Comparson) ขางตน พดงายๆ กคอการเปรยบเทยบสงทตองการตรวจสอบนนเอง เชน คาในชองอาย == ตวเลขอยางเดยว (จากตวอยางทเลาเรองในตอนตนของบทน เมอตองการสรางเงอนไขส าหรบการตรวจสอบชองอาย) หรอตองการตรวจคาในตวแปร a มคาตวเลขเกน 1500 หรอเปลา วธเขยนเงอนไขเพอตรวจสอบคอ a > 1500 ลงในค าสง if หลงจากการทดสอบตามเงอนไขทระบ ค าสง if จะบอกผลลพธทไดเปน 2 ลกษณะ คอ
1. ผลลพธเปนไปตามเงอนไขหรอคาทเปนจรง (True) 2. ผลลพธไมตรงกบเงอนไขทตรวจสอบหรอไดผลเปนเทจ (False)
ชดค าสง ท าเมอตรงกบเงอนไข
ชดค าสง ท ากรณทไมตรงกบเงอนไข
ผลลพธเปนไปตามเงอนไขหรอคาทเปนจรง (True)
แสดงการทดสอบเงอนไขของต าสง if และชดค าสงทตองท างานเมอเงอนไขเปนจรง
ผลลพธไมตรงกบเงอนไขทตรวจสอบหรอไดผลเปนเทจ (False) แสดงเสนทางการทดสอบเงอนไขทเปนเทจ และเรมกระบวนการท างานในชดค าสงหลงค าสง else ซงเปน
พนทของกลมค าสงเมอการทดสอบเปนเทจ
เมอมองดรปแบบการสรางเงอนไขเชน a > 4 จะมการใชเครองหมายทางดาน Operator ส าหรบการเปรยบเทยบ (comparison มาประกอบรวมกบคาขอมลทตองการเปรยบเทยบในทนคอตวแปรและตวเลข 4 ส าหรบการตรวจสอบเงอนไขวาคาในตวแปร a มากกวาคาตวเลข 4 หรอไม) ลกษณะของการเลอกใชเครองหมาย Operator ส าหรบการเปรยบเทยบเงอนไขแบงออกเปน 4 รปแบบดงน
1. เครองหมายส าหรบเปรยบเทยบหาคาขอมลทเทากน ( Equality comparison operation) เชน a== 10, B== c ฯลฯ จะใชเครองหมายเทากบ ( แตเขยน 2 ครงตดกนตามตวอยาง)ในการสรางเงอนไข
2. เครองหมายในการเปรยบเทยบคาขอมลทไมเทากน (Not Equality comparison operation) จะใช ! = รวมกบคาขอมลทตองการเปรยบเทยบเชน a!=10 (คาขอมลในตวแปร a ไมเทากบคาตวเลข 10 ใชหรอไมเปนตน
ชดค าสงทจะท างาน
เมอเงอนไขเปนจรง
หลงการทดสอบปรากฏวา a มคา
มากกวา 4 เงอนไขททดสอบเปนจรง
a = 5
if a > 4
print (‘ใชคาใน a มากกวา 4’ )
else Print(‘คาใน a นอยกวา 4’)
a = 0
ผลทดสอบทไม
ตรงตามเงอนไข
If a > 4 : ท าการตรวจสอบคา a ดวยเงอนไข a > 4
Print(‘ใชคาใน a มากกวา 4’)
else : print(‘คาของ a นอยกวา 4’)
ชดค าสงทตองท างานเมอผลทดสอบ ไมตรงตามเงอนไข a = 4
3. เครองหมายเปรยบเทยบคาขอมลมากกวาหรอนอยกวา (Greater Than and Less Than Comparison Operation) ใชเครองหมาย > (มากกวา), < (นอยกวา), >= (มากกวาหรอเทากบ), <= (นอยกวาหรอเทากบ)
4. Not กบการท าหนาทในการเปรยบเทยบ (Not Comparition operation) โอเปอเรเตอรนเหมาะกบการน ามาใชงานกบคาขอมลทเปน True หรอ False ดวยการท างานของ โอเปอเรเตอร not จะเปลยนคาขอมลไปในทางตรงกนขามเชนถาคาในตวแปร A มคาเปน True เมอน า โอเปอเรเตอร not มาใชกบตวแปร a หรอ not a ผลลพธจะไดคา false ดวยเหตนถาขอมลทจะน ามาใชกบ โอเปอเรเตอร not ตองม2สถานะเสมอคอ True และfalse
จะเหนไดวาลกษณะการใชโอเปอเรเตอรการเปรยบเทยบของภาษา Python จะมการใชงานเหมอนภาษาโปรแกรมอนๆตามมาตรฐานทวไปจงงายตอการเรยนรรปแบบการเขยนและการท างาน
ตารางสรปการใชเครองหมายโอเปอเรเตอรเปรยบเทยบ
โอเปอเรเตอร ความมาย ตวอยาง ผลลพธ
== เทากบ A == 10 จะไดคา True กตอเมอตวแปร A มคาเปน 10 เทานน
> มากกวา A > 3 ถาคาขอมลในตวแปร A มคาตงแต 4 ขนไปจะไดผลลพธเปน True
>= มากกวาหรอเทากบ A >=3 ผลลพธจะเปน True ตงแตคาในตวแปรมคาเปน 3 ขนไป
< นอยกวา A < 2 จะเปน True เมอคาขอมลในตวแปร A มคาเปน 1 หรอนอยกวา 1 เสมอ
<= นอยกวาหรอเทากบ A <= 2 เมอไรคาขอมลในตวแปร A มคาเปน 2
!= ไมเทากบ A! = 10 จะไดผลลพธเปน True ตราบใดทคาขอมลใน A ไมเทากบ 10
not ตรวจคาตรงกนขามระหวาง True กบ False
Not A
ทดลองเขยนค าสงและสงเกตผลลพธทไดจากการท างานตามตวอยางตอไปนใน Python Shell ตวอยางท 1 โอเปอเรเตอรเปรยบเทยบส าหรบทดสอบคาทเทากน >>> a=100 >>> b=50 >>> a==b ตรวจคาในตวแปร a และ b เทากนหรอไม >>> b=100 แกไขคาใน b เปน 100 >>> a==b ตรวจคาใดตวแปรทง 2 ตวอกครง >>> a='TV' >>> b='VCD' >>> a==b >>> b='tv'
>>> a==b >>> b='TV' >>> a==b >>> a=['TV SONY','TV LG'] >>> a==b >>> print(a[0]) >>> a[0]==b >>> print(a[0][:2]) ตดค าวา TV จาก TV SONY ซงไดจากตวแปร a [0] >>> a[0][:2]==b น าค าวา TV ใน a[0] [:2] มาเปรยบเทยบกบตวแปร b ตวอยางท 2 โอเปอเรเตอรเปรยบเทยบมากกวาและนอยกวา >>>a = input (‘ปอนคาตวเลขอะไรกได’) >>>a = int(a) >>>a > 50 ตรวจคาในตวแปร a มคามากกวา 50 หรอเปลา >>>a = ‘d’ >>>b = ‘D’ >>>a > b >>> a = ‘ปลาท’ >>> b = ‘ปลาท’ >>>a > = b ภาษาไทยไมคอยมปญหาเรองตวอกษรเลกหรอใหญ >>>a = ‘PASSWORD’ >>>b = ‘password’ >>>a >= b >>>a.lower() >= b >>>a = 1 >>>a < 2 คาในการเปรยบเทยบคอ 1 < 2 >>>a = 2
นาแปลกท TV ตวอกษรตวใหญในตวแปร a ไมเทากบ tv ของตวแปร b เนองจากเปนจาก
เปนการเปรยบเทยบดวยรหส ASCll หรอ Unicode ของตวอกษร
แปลงคาในตวแปรทรบคาจากฟงกชน Input (ซงจะเปนขอมลชนด String เสมอ) ใหเปน
ตวเลขชนดจ านวนเตมหรอ Integer ผานฟงกชนแปลงชนดทชอ Int
ตรวจคาในตวแปร a และ b ดวยโอเปอเรเตอร > (มากกวา) กระบวนการเปรยบเทยบจะน าคา ‘d’ ตวอกษรตวเลก และ ‘D’ ตวอกษรตวใหญไปถอดเปนรหส ASCll หรอ Unicode แลวน า
รหสมาเปรยบเทยบกน
ใชฟงกชน Lower แปลงคาตวอกษรในตวแปร a ใหเปนตวอกษรตวเลกทงหมด แลวคอยน าไปเปรยบเทยบกบตวแปร b
>>> a < 2 คาทใชทดสอบคอ 2 < 2 >>> a <= 2 ลองใหมกบการใช <= ดวยคา 2<=2 >>> a = 1 >>> a > 2 ทดสอบคามากกวาดวย 1 > 2 >>> a = 2 >>> a > 2 ดการทดสอบเมอ a มคาเปน 2 ดวย 2 > 2 >>> a >= 2 เมอใช >= กบคา 2 >= 2 อะไรจะเกดขน
ตวอยางท 3 โอเปอเรเตอรเปรยบเทยบกบการทดสอบคาทไมเทากน >>> a='TV' >>> b='tv' >>> a!=b TV ตวอกษรพมพใหญไมเทากบ tv ตวอกษรตวพมพเลกใชหรอไม >>> a=10 >>> b=7 >>> a!=b 10 ไมเทากบ 7 ใชไหม
ตวอยางท 4 โอเปอเรเตอรเปรยบเทยบกบ Not >>> a=True >>> not a >>> b=False >>> a==b เปรยบเทยบคาใน a และ b >>> not a==b >>> 10>7 ผลลพธจากการเปรยบเทยบจะได True เพราะเงอนไข 10>7 เปนจรง >>> not 10>7
ใช not a ส าหรบกลบคาใน a จาก True ใหเปน False แลวคอยน าไปเปรยบเทยบกบ b
กระบวนการจะเรมจากการเปรยบเทยบ 10 > 7 เพอใหไดผลลพธจากการ
เปรยบเทยบกอน ซงในทนจะได True แลวท าการเพม Not ส าหรบกลบคาผลลพธทไดใหเปนคาตรงกนขาในทนคอจาก True ไปเปน False
หลงจากท าความเขาใจการก าหนดเงอนไขดวย Operator ดานการเปรยบเทยบเมอตองน านนไขมาประกอบการเขยนรวมกบค าสง If โดยผลลพธของค าสง if มม 2 สถานะเมอตรวจสอบตรงตามเงอนไขจะไดสถานะเปน True และไดสถานะเปน false เมอการตรวจสอบไมตรงตามเงอนไขซงจะมการระบการกระท าส าหรบแตละสถานะของผลลพธตามโครงสรางของค าสง If แตงรปแสดงเสนทางการกระท าของผลลพธทเกดจากการตรวจสอบเงอนไข(ภายใตโครงสรางของค าสง If จะมวธก าหนดพนทยอยโดยแบง indent ของค าสงยอย ซงไดกลาวไวในบทท 2 เกยวกบการก าหนดกลมค าสงยอยภายใตค าสงหลก)
การเขาถงพนทของกลมค าสงยอยภายใตค าสง If ซงจะแบงออกเปน 2 พนทคอพนทของกลมค าสงยอยเมอผลลพธของการตรวจสอบเงอนไขมสถานะเปนจรง ( True) และพนทของกลมค าสงยอยทจะท างานไดกตอเมอผลการตรวจสอบเงอนไขไมตรงตามทก าหนดของเงอนไขหรอไดสถานะเปนเทจ (False) ค าสง If
เมอตองน าค าสง If มาใชรวมกบการเขยนโปรแกรม python จะมรปแบบทนกพฒนาโปรแกรมนยมเขยนอย 4 รปแบบ ตามเหตการณของการตรวจสอบเงอนไขดงนทมนคด
1. การใชค าสง If ตรวจสอบเงอนไขและท างานกลมค าสงยอย เมอการตรวจสอบเงอนไขเปนจรง ( True) เทานน
2. การใชค าสง If รวมกบ elif ส าหรบตรวจสอบเงอนไขและท ากลมค าสงยอย เมอผลลพธการตรวจสอบเปนจรง ( True) เทานน
3. การใชค าสง If ทมลกษณะการตรวจสอบเงอนไขแบบสอนกน (Nested) 4. การใชค าสง If รวมกบค าสง else
เสนทางการท างานเมอการตรวจสอบเงอนไขเปนจรง( True) a = 10 if a = = 10: else : print(‘พมพคาของ a = %d’ %a) print(‘คาของ b= ‘%d’ %b)
เสนทางการท างานของค าสง If เมอการตรวจสอบเปนเทจ Fasle a = 1 if a = = 10: else : print(‘พมพคาของ a = %d’ %a) print(‘คาของ b= ‘%d’ %b)
พนทของกลมค าสงยอยจะท างานเมอเงอนไขทตรวจสอบตรงตามเงอนไขหรอมสถานะเปน True
พนทของกลมค าสงยอยจะท างานกตอเมอการตรวจสอบไม
ตรงตามเงอนไขทก าหนด โดยมสถานะเปน False
พนทของกลมค าสงยอยจะท างานเมอเงอนไขทตรวจสอบ
ตามเงอนไขหรอมสถานะเปน True
พนทของกลมค าสงยอยจะท างานกตอเมอการตรวจสอบไม
ตรงตามเงอนไขทก าหนดโดยมสถานะเปน false
การใชค าสง if ตรวจสอบเงอนไข และท างานกลมค าสงยอย เมอการตรวจสอบเงอนไขเปนจรง ( True) เทานน การใชค าสง If ตรวจสอบเงอนไข และท างานกลมค าสงยอย เมอการตรวจสอบเงอนไขเปนจรง ( True) เทานน a = 10 if a == 10: ทดลองพมพการใช if ตามรปแบบท 1 ลงในโมดลของ Python (ใน Python shell เลอกเมน file คลกเมนยอยทชอวา New เพอเปดโมดลของ Python) a = {'STV50' : 'TV SONY 50 นว', 'LG100' : 'TV LG', 'SCD' : 'VCD SONY', 'TDVD' : 'SAMSUNG DVD'} b = input('ปอนรหสสนคา TV SONY : ') if a[b] == 'TV SONY 50 นว': print('ยงมสนคา TV SONY ในโกดง 10 เครอง') print('\n ตองการเบกตดตอฝายคลง') b = input('ปอนรหสสนคา VCD SONY : ') if a[b] == 'VCD SONY': print('สนคาอยระหวางจดสงมายงโกดง') print('\n อก 2 วนจะมาถง สามารถสงของ') print('\n ลวงหนาไดเลย')
พนทกลมค าสงยอยเมอตรวจสอบเงอนไข ตรงตามท
ก าหนดในค าสง If หรอมสถานะจรง (True)
การใชค าสง if รวมกบ elif ส าหรบการตรวจสอบเงอนไขและการท างานกลมค าสงยอย เมอผลลพธการตรวจสอบเปนจรง (True)
มรปแบบการเขยน ดงน A = 10 If a == 10: ท าค าสงยอยในพนทนเมอคาในตวแปร a มคาเทากบ 10 Elif a == 100: ท าค าสงยอยในพนทนเมอคาของตวแปร a มคาเทากบ 100 Ekif a > 200: ท าค าสงยอยในพนทนเมอคาของตวแปร a มคามากกวาหรอเทากบ 200 Elif a < = 0 : ท าค าสงยอยในพนทนเมอคาในตวแป a นอยกวาหรอเทากบ 0
ถาหากมโจทยทตองการตรวจคาในตวแปร a โดยมเงอนไขและการกระท าเมอการตรวจสอบเงอนไขเปนจรองทแตกตางกน ดงเชนตวอยางขางตน การตรวจสอบคาในตวแปร a จะมถง 4 ครง สงเกตจากการใชค าสง if และ elif ตรวจสอบเงอนไขและมการท างานของกลมค าสงยอยของใครของมน เมอผลลพธ
การตรวจสอบมสถานะเปนจรง จ านวนของค าสง if + elif กคอ จ านวนของความตองการทตรวจสอบคาในตวแปร a นนเอง เสนทางล าดบการตรวจสอบคาในตวแปร a เมอผลการทดสอบเปนเทจทงหมด a = 9 if a == 10: Print('a มคาเปน 10 จรง') elif a == 100: Print('a มคา') elif a >= 200: print('มคามากกวา 200') print('จบขนตอนการตรวจคา a') print('ท าค าสงอนๆ ตอไป')
เสนทางล าดบการตรวจสอบคาในตวแปร a เมอผลการทดสอบเปนจรง a = 100 if a == 10: print('a มคาเปน 10') elif a == 100: print('a มคา 100') elif a >= 200: print('a มคามากกวา 200') print('จบการทดสอบ') print('ท าค าสงอนๆ ')
ดานซายแสดงลกษณะการท างานของรปแบบการเขยนค าสง if + elif เมอผลลพธการตรวจสอบเปนเทจทงหมด และทางดานขวาแสดงการท างานเมอการตรวจสอบคาในตวแปร a มผลลพธการตรวจสอบมสถานะเปนจรง และไดมการกระท าของกลมค าสงยอยของค าสง if หรอ elif นน
เพอใหงายตอการท าความเขาใจจงก าหนดล าดบการตรวจสอบในแตละค าสง if และ elif ตาม
เงอนไขทก าหนดไว โดยโครงสรางการเขยนจะเรมตนดวยค าสงตรวจสอบแรกสดคอ ค าสง if และเมอตองเพมค าสงตรวจสอบถดไปใหใชค าสง elif จงจะถอวาเปนค าสงตรวจสอบตามรปแบบในหวขอท 2 น
ทดลองการใชค าสง if + elif ลงในโมดลของ Python (บนจอภาพ Python Shell เลอกเมน file เลอกเมนยอย New เพอท าการเปด Python โมดล) import time ท าการอางองโมดลมาตรฐานเกยวกบฟงกชนเวลาหรอ time มาใชในโมดลน loadtime=time.localtime() สรางตวแปรชอ loadtime เพออานวน เวลาจาระบบปฏบตการ loadhour=loadtime.tm_hour สรางตวแปรทชอ loadhour ส าหรบอานชวโมงปจจบนมาใชงาน print('ขณะนเวลา') print(loadhour) if loadhour<7: ตรวจสอบตารางเวลาส าหรบกจกรรมประจ าวน print('ยงไมตน') elif loadhour<9: print('อาบน า ทานขาว')
elif loadhour<16: print('ท างาน') elif loadhour<19: print('กลบบาน ทานขาว') elif loadhour<21: print('ดทวรายการสดโปรด')
การใชค าสง if ทมลกษณะการตรวจสอบเงอนไขแบบซอนกน (Nested) การเขยนค าสง if แบบ Nested ฟงดแลวนาจะเปนการเขยนอะไรทตองแปลกแตกตางจากรปแบบการเขยนค าสงในขอท 1 และ 2 อยางแนนอน แตความเปนจรงกคอ การเขยนค าสงแบบ Nested เปนการใชค าสง if ซอนภายในกลมค าสงยอยของค าสง if แรกเทานนเอง ประโยชนของการเขยนค าสง if แบบ Nested กเพอทจะมการตรวจสอบเงอนไขยอยลกลงไป ยกตวอยาง หากค าในตวแปร a มขอมลเกยวกบทวโซน (TV Sony), ทวแอลจ(TV LG), ทวโตชบา(TV Toshiba), ทวซมซง(TV Samsung), วซดโซน(VCD Sony), วซดแอลจ(VCD LG) เปนตน เราจะใชค าสง if ส าหรบการตรวจสอบเงอนไข ส าหรบการแบงประเภทของขอมลในตวแปร a ออกเปน 2 ประเภท หรอ 2 ค าสง if ประกอบดวย ประเภททวและประเภทวซด ตามรปแบบการเขยนค าสง ตอไปน a = ['tv sony','tv lg', 'tv toshiba', 'tv samsung', 'vcd sony', 'vcd lg']
if a[1][:2]== 'tv:':
พนทกลมค าสงยอยจะท างานกตอเมอคาในตวแปร a[1][:2] เปนประเภททวเทานน
elif a[1][:3]=='vcd':
การใชค าสง if ตรวจสอบเงอนไขเพอแยกประเภทของขอมลในตวแปร a นบเปนการกรองขอมลชนท 1 ดวยค าสง if คราวนลองมาเพมการตรวจสอบเงอนไขยอยดวยค าสง if เพมลงในพนทกลมค าสงยอยของแตละค าสง if ในชนท 1 เพอตรวจสอบคาขอมลเฉพาะ ยกตวอยาง ตองการตรวจสอบหาคาในตวแปร a ทตรงกบค าวา ‘tv lg’ โดยทคาดงกลาวจะตรงกบ a[1] (เนองดวยตวแปร a เปนชนด Sequence แบบ List ซงตองใชหมายเลขอางองขอมลภายในของตวแปร a อานรายละเอยดตวแปรชนดนไดในบทท 3) ซงจะมรปแบบการเขยนค าสง if เพมเตมซอนลงในกลมค าสงยอยของค าสง if ในชนท 1 ดงตอไปน a = ['tv sony','tv lg', 'tv toshiba', 'tv samsung', 'vcd sony', 'vcd lg'] if a[1][:2]== 'tv:': b = a[1] if b == 'tv sony': print('คาในควแปร b คอ tv sony') if b == 'tv lg': print('คาในตวแปร b คอ tv lg') if b == 'tv toshiba': print('มคา tv toshiba ในตวแปร b') if b == 'tv samsung': print('ในตวแปร b มคา tv samsung ') elif a[1][:3] == 'vcd': b = a[1] if b == 'vcd sony': print('คาในตวแปร b ม vcd sony เกบไวภายใน') if b == 'vcd lg': print('มคา vcd lg ในตวแปร b')
พนทกลมค าสงยอยจะท างานเมอผลการตรวจสอบคาในตวแปร a[1][:3] เปนประเภทวซดเทานน
ตรวจสอบเงอนไขดวยค าสง if ในชนท 1 เพอแยกประเภทคาในตวแปร a เปนประเภททว
พนทกลมค าสงยอยของการตรวจสอบเงอนไขประเภททว
พนทกลมค าสงยอยของการตรวจสอบ
เงอนไขเมอตวแปร a[1] เปนประเภทวซด
จากรปแบบการเขยนค าสงทเหนในตวอยาง จะใชค าสง if ซอนกนเปนชนๆ โดยการตรวจสอบเงอนไขจะมล าดบจากค าสง if ชนท 1 ซงประกอบดวย a[1][:2] == ‘vcd’ ภายใตเงอนไขแรกคอ a[1][:2] == ‘tv’ หรอการตรวจขอมลส าหรบกลมทว จะมค าสง if ยอยเปนชนท 2 อก 4 ค าสงส าหรบการตรวจสอบเฉพาะคาขอมลของตวแปรจรง เชน คาใน b (ซงรบคาโอนถายมาจากตวแปร a[1]) มคาเทากบ ‘tv lg’ ใชหรอไม ถาใชกท าค าสงยอยของค าสง if b == ‘tv lg’ คอท าค าสง print(‘คาในตวแปร b คอ tv lg’) ตามรปแบบการใชค าสง if ดงทอธบายไวเปนวธการใชค าสง if แบบ Nested ส าหรบการตรวจสอบเงอนไขในเชงลก เสนทางล าดบการตรวจสอบเงอนไขเชงลกดวยค าสง if แบบ Nested a = ['tv sony', 'tv lg', 'tv lg', 'tv to shiba',...] if a[1][:2] == 'tv': b = a[1] if b == 'tv sony': print('คาในตวแปร b คอ tv sony') if b == 'tv lg': print('คาในตวแปร b คอ tv lg') if b == 'tv toshiba': print('มคา toshiba ในตวแปร b') if b == 'tv samsung': print('.....') elif a[1][:3] == 'vcd': b = a[1] if b == 'vcd sony': print('........') if b == 'vcd lg': print('........') print('จบการตรวจสอบ')
ค าสง if ชนท 1 ทมค าสง if ยอยอก 4 ค าสงภายใน
การตรวจสอบเงอนไขมสถานะเปนจรง
ทดลองพมพการใชค าสง if แบบ Nested ลงในโมดลของ Python a = 100 if a < 40: if a == 25: print('a มคาเทากบ 25') if a == 30: print('a มคาเทากบ 30') elif a > 80: if a == 50: print('a มคาเทากบ 50') if a == 100: print('a มคาเทากบ 100')
การใชค าสง If รวมกบค าสง else พนฐานการท างานของค าสง If มหนาทตรวจสอบเงอนไขตามทก าหนด และตองมการตอบสนอง
ตอผลลพธของการตรวจสอบเงอนไขในพนทกลมค าสงยอย เมองเงอนไขเปนไปตามทก าหนดหรอมสถานะทเปนจรง ( True) แตถาหากตองการเพมพนทกลมค าสงยอยกรณผลลพธของการตรวจสอบเงอนไขไมตรงตามทก าหนดหรอมสถานะเปนเทจ (false) รปแบบการเขยนค าสงในกรณนจ าเปนตองเพมค าสง else ใหกบค าสง If
a = 10 if a == 10: พนทของกลมค าสงยอยจะตอบสนองเมอ ผลลพธการตรวจสอบตรงทก าหนดหรอม สถานะเปนจรง (True) print(‘ท าตอไปเรอยๆ’) แสดงรปแบบการใชค าสง if ส าหรบการตรวจสอบเงอนไขและตอบสนองกลมค าสงยอยเมอตรงตามทก าหนดเพยงอยางเดยว
a = 7 if a == 10: พนทของกลมค าสงยอยเมอการตรวจสอบเงอนไขตรงตามเงอนไขหรอมสถานะทเปนจรง (True) else: พนทของกลมค าสงยอยกรณผลลพธของการตรวจสอบไมเปนไปตามเงอนไขหรอมสถานะทเปนเทจ (False) print(‘ท าตอไปเรอยๆ’) แสดงรปแบบการใชค าสง if รวมกบค าสง else ส าหรบตอบสนองผลลพธทเกดจากการตรวจสอบเงอนไขและกระท ากบกลมค าสงยอยทอยในพนทตามสถานะทเปนจรงหรอเทจ
แสดงรปแบบการเขยนและลกษณะการท างานของค าสง if และ else
ทดลองพมพค าสง if และค าสง else ส าหรบการตรวจสอบเงอนไขลงในโมดลของ Python ตวอยางท 1
ตวอยางท 2
ตวอยางท 3
การก าหนดเงอนไขมากกวาหนงเงอนไขใหกบค าสง if การก าหนดเงอนไขมากกวา 1 เงอนไขใหกบค าสง If
ถาหากตองการสรางเงอนไขตรวจคาขอมลทอยในตวแปร A ซงเปนขอมลชนดตวเลขจ านวนเตมทมคาตวเลขอยในชวง 37 ถง 76 จะมวธการสรางเงอนไขเพอน าไปตรวจสอบและค าสง If ถง 2 เงอนไขโดยเงอนไขแรกจะตรวจดคาตวเลขในตวแปร A ทมคามากกวาหรอเทากบตวเลข 37 ( มรปแบบการเขยนเพอน าไปใชในงานคอ a >= 37 และเงอนไขท 2 จะตรวจคาตวเลขของตวแปร A ทนอยกวาหรอเทากบตวเลข 76 (มรปแบบของการเขยนเงอนไขส าหรบน าไปใชในค าสง If ดงน a<=76) ซงในการตรวจสอบดวยค าสง If จ าเปนตองน าเงอนไขแลกมาผกรวมกบเงอนไขท 2 จงจะท าใหการตรวจสอบเงอนไขไดตามจดทตงขนสงทนาสนใจคอการผกเงอนไขทง2เขาดวยกน ใหท างานผสมผสานกนเปนอยางดโดยอาศยการใช Combining Operator ซงประกอบดวย and และ or โอเปอเรเตอรทท าหนาทผกเงอนไขของค าสง If เขาดวยกนม 3 รปแบบดงน
1. รปแบบการเขยนค าสง If รวมกบ and operator 2. รปแบบการเขยนค าสง If รวมกบ or operator 3. รปแบบการเขยนค าสง If รวมกบ and และ or operator
รปแบบการเขยนค าสง if รวมกบ and opreator บรรทดท 1 a = 5 บรรทดท 2 if a >= 2 and a <= 7: บรรทดท 3 print(‘ตวเลขอยในชวง 2 ถง 7 เทานน’) บรรทดท 4 print(‘ท าเรองอนตอไป’) จากการใชโอเปอเรเตอร and ในบรรทดท 2 แสดงใหเหนการทดสอบเงอนไขแรกสดคอ a >= 2 และเงอนไข a <= 7 โดยจะน าผลลพธของทงสองเงอนไขมาเทยบคณสมบตของ and operator (คณสมบตของการ and operator จะไดผลลพธเปนจรง (True) กตอเมอผลลพธของทงสองเงอนไขเปนจรง (True) เทานน) จากตวอยางค าสงในบรรทดท 2 ตวแปร a มคา 5 เมอน ามาตรวจสอบกบเงอนไขท 1 คอ a >= 2 หรอแทนคา 5 ทตวแปร a ของเงอนไขแรกจะได 5 >= 2 แนนอนผลลพธของเงอนไขนเปนจรอง (True) เชนเดยวกบเงอนไขท 2 คอ a <= 7 แทนคา 5 ทตวแปร a ในเงอนไขจะได 5 <= 7 ซงผลลพธทไดจากการตรวจสอบเงอนไขท 2 กเปนจรง (True) เชนกน เมอน าผลลพธของทงสอง 2 เงอนไขมาใชรวมกบ and ภายใตค าสง if สงผลใหการตรวจสอบเงอนไขทงหมดเปนไปตามทก าหนด หรอมสถานการณตรวจสอบเปนจรง(True) ในทนค าสงถดไปหลงการตรวจสอบเงอนไขกคอ ค าสง print บรรทดท 3 นนเอง เทคนคการเขยน and operator รวมกบค าสง if ใน Python บางรปแบบจะมลกษณะดงตอไปน รปแบบค าสง if รวมกบ and ปกต If a >= 2 and a <= 7 รปแบบค าสง if รวมกบ and operator วธลด If 2 >= a <= 7: รปแบบการเขยนค าสง if รวมกบ or operator บรรทดท 1 a,b = 5,10 บรรทดท 2 if a == 5 or b == 2: บรรทดท 3 print(‘คาในตวแปร a คอ 5 หรอคาในตวแปร b มคาเปน 2 เทานน’) บรรทดท 4 print(‘ท าค าสงอนตอไป’) โอเปอเรเตอร or จะถกน ามาใชรวมกบการตรวจสอบเงอนไขภายใตค าสง if กตอเมอตองการใหผลลพธของเงอนไขใดเงอนไขหนงเปนจรง (True) ซงเทานกสงผลใหกลมค าสงยอยทจะท างานเมอผลลพธมคาเปนจรง (True) เกดการท างาน ยกตวอยางตามบรรทดท 2 คาในตวแปร a คอ 5 และคาของตวแปร b ทมคา 10 เมอน าคาในตวแปร a มาตรวจสอบเงอนไข จะมสถานะเปนจรง (True) ตามเงอนไขก าหนดไวในขณะทการตรวจสอบเงอนไขท 2 ผลลพธทไดจากการตรวจสอบจะมสถานะเปนเทจ (False) เนองจากคาในตวแปร b ไมตรงตามเงอนไขทก าหนดไว เมอน าผลลพธของทง 2 เงอนไขมาใชกบโอเปอเรเตอร or ในบรรทดท 2 นจะท า
ใหการตรวจสอบของค าสง if นมสถานะเปนจรงหรอ True (เนองจากผลลพธการตรวจสอบเงอนไขแรกสดมสถานะเปนจรง) ซงจะท าค าสงตอไปในบรรทดท 3 ทอยในพนทกลมค าสงยอยของค าสง if รปแบบการเขยนค าสง if รวมกบ and และ or operator บรรทดท 1 a, b = 5, 10 บรรทดท 2 if a >= 2 and a <= 7 or b == 10: บรรทดท 3 print(‘คาของตวแปร a อยในชวง 2 ถง 7’) บรรทดท 4 print(‘หรอคาในตวแปร b มคาเทากบ 10’) บรรทดท 5 print(‘ท าค าสงอนตอไป’)
การใชค าสง If ส าหรบการตรวจสอบเงอนไขทจ านวนของเงอนไขอาจจะมมากกวา 1 เงอนไขจงมความจ าเปนทจะตองผกเงอนไขเขากบการใช and หรอ or Operator ทงนตองค านงถงคณสมบตการท างานของ operator ทน ามาใชส าหรบการผกเงอนไขบางกรณจ านวนเงอนไขมมากกวา 2 เงอนไขจ านวนของ operator ทจะน ามาผกเงอนไขกจะมมากขนอกทงยงสามารถใช Operator ทงสองชนดผสมผสานในการตรวจสอบภายใตค าสง is เดยวตามตวอยางการใชค าสงบรรทดท 2 จะเหนไดวามจ านวนเงอนไขถง 3 เงอนไขภายใตการตรวจสอบของค าสง If โดยทโจทกถกก าหนดใหเงอนไขท 1(a >= 2) และเงอนไขท 2 (a <= 7) จ าเปนตองผานตามก าหนดหรอมผลสถานะการตรวจสอบเงอนไขเปนจรง (True) ทงคความเหมาะสมตอการใช Operator กตองเลอก and operator มาผกเงอนไขท 1 และ 2 เขาดวยกนจงจะถกตองตามความตองการของโจทยในหวขอนส าหรบเงอนไขท 3 (b == 10 )ถาผลลพธการตรวจสอบเงอนไขเปนจรง(True) ค าสง if กจะสงใหป มค าสงยอยในพนททสถานการณตรวจสอบเปนจรง(True) หรอตรงตามทเงอนไขก าหนดใหท างานไดทนท เปนทนาสงเกตส าหรบการท างานของเงอนไขท 3(b == 10 ) ทมความเปนอสระในการตรวจสอบของค าสง If โดยไมตองไปยงกบเงอนไขอนๆทคนกนในค าสง If น Combining Operator ควรจะใชกบการท างานของเงอนไขทมความเปนอสระแบบนกคอ or operator พมพค าสงตอไปนส าหรบทดลองการใช Combining Operator รวมกบค าสง if โดยเขยนค าสงลงในโมดลของ python ( ทจอภาพของ Python Shell เลอกเมน file และเลอกเมนยอยทชอ New เพอก าหนดเปดโมดล python) ตวอยางท 1 การใช and operator username = input('ปอนชอผใชงาน : ') password=input('ปอนรหสผาน') if username is None : print('ปอนชอดวยคะ') elif password is None: print('ปอนรหสเทานน')
elif username == 'admin' and password == 'password': print('ยนดตอนรบ') else: print('คณไมสามารถผานเขาไปใชงานในระบบได') print('\nตดตอผดแลระบบ') print('เสรจสนการทดสอบ')
การทดลองในตวอยางนเปนการใชโอเปอเรเตอร and ส าหรบตรวจสอบคาในตวแปร username และ password เพอเขาสการใชงานในระบบตามล าดบ โดยทการลอกอนเขาสระบบจะส าเรจกตอเมอชอผใชงานเปน admin และรหสผานเปนค าวา 1234
ตวอยางท 2 การใช or operator a = [] b = input('ปอนผลไมทคณชอบล าดบท 1 : ') a.append(b) b = input('ปอนผลไมทคณชอบล าดบท 2 : ') a.append(b) b = input('ปอนผลไมทคณชอบล าดบท 3 : ') a.append(b) b = input('ปอนผลไมทคณชอบล าดบท 4 : ') a.append(b) b = input('ปอน 1 ใน 4 ผลไมทปอนจดเกบไว') if b == a[0] or b == a[1] or b == a[2] or b == a[3]: print('ยนดดวยคะ คณจ าผลไมทปอนไดคะ') else : print('แยแลวคะ คณจ าผลไมทปอนไวไมไดคะ')
ลองใชโอเปอเรเตอร or ส าหรบตรวจคาผลไมทตองการปอนเกบไวในตวแปร a (เปนตวแปร Sequence แบบ List เปนจ านวน 4 ชนด จากนนกท าการทดสอบความจ าโดยการเลอกพมพชอผลไมทเคยปอนเกบไว 1 ชนดจากทงหมด 4 ชนด ตวอยางท 3 การใช and และ or operator a = input('ปอนอเมลของคณ : ') if '@' in a and '.' in a or a == 'admin' : b = input('ปอนรหสผาน : ') if b == '1234' : print('เตรยมสงขอความจากระบบ') print('ขอความถกสงแลว') else : print('อเมลคณมรปแบบการเขยนทไมถกตอง') print('%s กรณาตรวจใหมอกครง' %a) print('ท าขนตอนตอไปน')
การทดลองสมมตใหใชอเมลของผใช login เขาสระบบโดยตรวจสอบรปแบบของการเขยนอเมลจากคาในตวแปรเอดวยการสงเกตเครองหมาย @ และ . ทเปนองคประกอบของชออเมลดวยเงอนไขท 1 (‘@’ in a ) และเงอนไขท 2 (‘.’ in a ) เทคนคการเขยนค าสงดวยการใช in ซงท าหนาทคนหาตวอกษรเครองหมายหรอคาทตองการคนหา ฯลฯ ผลลพธจากการคนหาดวยค าสง in ถาไมเจอจะใหคาเทจ (False) และใหคาทเปนจรง (True) เมอเจอสงทตองการคนหาจากคาในตวแปรโจทยของการตรวจสอบรปแบบของ e mail คอเงอนไขท 1 (‘@’ in a) และเงอนไขท 2 (‘.’ in a) จ าเปนตองผกกนดวย operator an เพราะตองการผลลพธทมสถานะจรง (True) ทงคเสมอในขณะเดยวกนโจทกกยงตงเงอนไขพเศษส าหรบการ login เขาสระบบในเงอนไขท 3 (a == ‘admin’) ทมความเปนอสระจากเงอนไขอนในค าสง If นนนคอ Operator ทเหมาะสมส าหรบเงอนไขท 3 กคอ or
บทท 5 ค ำสงกำรวนซ ำ
ดวยพนฐานของการเขยนโปรแกรม จะมกลมค าสงหลกอกประเภทหนงทท างานรวมกบกลมค าสงยอยโดยบงคบใหค าสงยอยทงหมดท างานตามจ านวนครงทระบในค าสงหลก เรามกจะเรยกค าสงหลกทม
ลกษณะการท างานเชนนวา ค าสงการวนท าซ า (Repetition) ส าหรบภาษา Python กลมค าสงการวนท าซ าจะประกอบดวยค าสง for และค าสง while กอนทจะอธบายลงไปในรายละเอยดของท ง 2 ค าสง ลองมาด
ประโยชนของการใชค าสงการวนท าซ า และการตดสนใจทจะน าค าสงการวนท าซ ามาใชระหวางการพฒนา
งาน (การทดลองค าสงจะท าการเขยนค าสงลงในโมเดล Python โดยไปทเมน File เลอกเมนยอย New ส าหรบเปดโมดล)
ตวอยำงท 1 เปนค าสงรบขอมลแบบลกทงลกทง
a = 1
c = []
print (‘กรณาปอนชอผลไม 6 ชอ’)
b = input(‘%d ปอนชอผลไมสดโปรดของคณ’ %a) c.append(b) a = a + 1
b = input(‘%d ปอนชอผลไมสดโปรดของคณ’ %a) c.append(b) a + = 1
b = input(‘%d ปอนชอผลไมสดโปรดของคณ’ %a) c.append(b) a + = 1
b = input(‘%d ปอนชอผลไมสดโปรดของคณ’ %a) c.append(b)
a + = 1
b = input(‘%d ปอนชอผลไมสดโปรดของคณ’ %a) c.append(b)
print (‘ผลไมโปรดของคณคอ %s’%c)
print(‘จบค าสง’)
การท างานของกลมค าสงในตวอยางท 1 จะรอใหผใชงานปอนชออาหารใหครบ 6 ชอ เมอครบตามจ านวนรายชออาหาร กจะท าการพมพรายการชอเหลานนเปนขนตอนสดทายของการท างานในโปรแกรมน
ลองมาดลกษณะการเขยนค าสงของตวอยางท 1 พบวามการใชค าสงการรบคาจากการปอนผานคยบอรด คอ
ค าสง input และคาขอมลทไดจะถกเกบลงในตวแปร b ชวคราว (b = input (‘%d ปอนชออาหารสดโปรดของคณ%a) ซงคาขอมลในตวแปร b กคอชออาหารโปรดทผใชจะตองท าการปอน 1 ชอ หลงจากไดชออาหารก
จะน าไปเกบรวมกนในตวแปร c ทเปนชนด Sequence แบบ List โดยการใชค าสง c.append(b) เพยงเทานกครบตาม
กระบวนการใชงานส าหรบการปอนชออาหาร และจดเกบไวในโปรแกรม แตโจทยตองการชออาหารทงหมด 6 รายชอ ดวยวธการแบบเดมคอ การปอนชออาหารตามกระบวนการทไดอธบาย และค าสงท
น ามาใชส าหรบการเขยนโปรแกรมกอนหนานไปแลว ดงนนกลมค าสงชดท 2,3,4 ไปจนถง 6 หรอมากกวาน กจะใชเหมอนกนกลมค าสงในชดท 1 ซงถาดตามตวอยางท 1 จะเหนกลมค าสงทท างานซ าๆ กน โดยแบง
ออกเปน 6 ชด ประกอบดวย ค าสงตอไปน
b = input(‘%d ปอนชออาหารสดโปรดของคณ’ %a) c.append(b) คราวนลองมาดประโยชนของการน าค าสงการวนท าซ าของภาษา Python มาดดแปลงลงในกลมค าสงทใชในตวอยางท 1 ใหสงเกตการณเปลยนแปลงของค าสง หลงจากการน าค าสงการวนซ ามาใชงานรวมกน
เนองจากค าสงการวนท าซ าของภาษา Python ม 2 ค าสง วธหรอรปแบบการเขยนค าสงเพอใชงานจะคลายกน
เพยงแตแตกตางกนทวธการสนสดการวนท าซ าของกลมค าสงยอย ถาหากเปนการท าซ าทมจดเรมตน สมมตวาเรมจากตวเลข 1 และก าหนดตวเลข 5 ใหเปนจดสนสด ซงจะมความชดเจนในการก าหนดจดเรมตนและ
จดสนสด ค าสงการวนท าซ ากตองใชค าสง for โดยการมรปแบบการเขยนตามตวอยางท 2 ยง เหลอวธการ
สนสดการวนท าซ าจากค าสง while ซงอาศยการก าหนดเงอนไข และตรวจสอบเงอนไขในแตละรอบของการวนท าซ า เมอผลลพธของการตรวจสอบเงอนไขเปนเทจ (False) กจะถอวาสนสดการวนท าซ า ตวอยางท 3 จะ
แสดงวธการเขยนค าสง while และก าหนดเงอนไขส าหรบการสนสดการวนท าซ าของกลมค าสงยอย
ตวอยางท 2 เปนค าสงรบขอมลโดยใชค าสงการวนท าซ า for มาแทนการเขยนแบบลกทงลกทงใน ตวอยางท
1
บรรทดท 1 c = []
บรรทดท 2 for a in [1,2,3,4,5] :
บรรทดท 3 b = input(‘%d ปอนชออาหารสดโปรดของคณ’ %a)
บรรทดท 4 c.append(b) บรรทดท 5 print(‘อาหารโปรดของคณคอ %s ‘%c)
บรรทดท 6 print(‘จบค าสง’)
สงเกตรปแบบการเขยนค าสง for ซงจะเรมจากบรรทดท 2 โดยมกลมค าสงยอยทจะท าการวนท าซ า
คอ บรรทดท 2 และ 3 ทมจดเรมตนจากตวเลข 1 (แบบเรยงจากนอยไปมาก หรอจะแกจากมากไปนอยกพมพ
5,4,3,2,1 กได หรอชอบแบบผาดโผน เชน 1,9,17,4,100 เปนตน) ในการวนท าซ ารอบแรกซงจดเกบคาตวเลขไวทตวแปร a เมอเรมการวนท าซ าในรอบท 2 หรอรอบถดไปกจะอานคาตวเลขทเกบเรยงไวคอ 2,3,4,5 จงจะ
สนสดการวนซ าของค าสง for อกเทคนคหนงทนยมน ามาใชรวมกบการก าหนดตวเลขเรมตนไปจนถงตว
เลขทสนสด ดวยการใชฟงกชน range ทมรปแบบการเขยนฟงกชน ดงน
แบบท 1 range (1,5) มคาเทากบ [1,2,3,4,5] เหมอนทใชในบรรทดท 2 เมอน าฟงกชน range มารวมกบ
ค าสง for จะมรปแบบการเขยน ดงน c = []
for a in range(1,5) :
b = input(‘%d ปอนชออาหารสดโปรดของคณ’ %a) c.append(b) print(‘อาหารโปรดของคณคอ %s’ %c) print(‘จบค าสง’)
แบบท 2 range (5,1, -1) มคาเทากบ [5,4,3,2,1] เปนการก าหนดตวเลขจากมากไปนอย จะใหลดทละ 1 ก
ก าหนด -1 ในอารกวเมนตตวท 3 ซงท าหนาทก าหนดการเพมหรอลดคาตวเลขของฟงกชน range ฟงกชนจะ
ก าหนดคาเปน 1 ไวเสมอ ซงหมายถงจะท าการเพมทละ 1 โดยอตโนมต) c = []
for a in range (5,1,-1) :
b = input(‘%d ปอนชออาหารสดโปรดของคณ’ %a)
c.append(b) print(‘อาหารโปรดของคณคอ %s’ %c) print(‘จบค าสง’)
แบบท 3 แสดงการใชค าสง while ส าหรบกลมค าสงยอยในการวนท าซ าและสนสดดวยการตรวจสอบเงอนไข
บรรทดท 1 a = 1
บรรทดท 2 c = [] บรรทดท 3 while a < 5 :
บรรทดท 4 b = input(‘%d ปอนชออาหารสดโปรดของคณ’ %a)
บรรทดท 5 c.append(b) บรรทดท 6 a += 1
บรรทดท 7 print(‘อาหารโปรดของคณคอ %s’ %c) บรรทดท 8 print(‘จบค าสง’)
ในบรรทดท 3 เปนรปแบบการเขยนค าสงการวนซ าดวยค าสง while พรอมเงอนไขทก าหนดขนเพอ
หยดการวนท าซ า ซงตองการผลลพธของการตรวจสอบเงอนไขทเปนเทจ (False) เทานน จากตวอยางจะเหนวาคาในตวแปร a จะเรมท 1 (ก าหนดทบรรทดท 1 ) เมอน าคาในตวแปรมาตรวจสอบเงอนไข a < 5 ของค าสง
while ผลลพธทไดจากการตรวจสอบจะเปนจรง (เนองจากคาในตวแปร a นอยกวา 5 ตามเงอนไข) กระบวนการวนท าซ ากบกลมค าสงยอยในบรรทดท 4 ถง 6 กจะเรมตนท างานแตละรอบจนกวาจะจบตาม
เงอนไขของค าสง while คราวนลองมาดตวอยางเพมเตมกรณมเงอนไขทสามารถจบการวนท าซ ามากกวา 1
เงอนไข
ตวอยำงท 4 แสดงการใชค าสง while ทมมากกวา 1 เงอนไขส าหรบการวนท าซ า
บรรทดท 1 a = 1
บรรทดท 2 c = [] บรรทดท 3 while a < 5 or b != ‘exit’ :
บรรทดท 4 b = input(‘%d ปอนชออาหารสดโปรดของคณ’ %a) บรรทดท 5 c.append(b)
บรรทดท 6 a += 1
บรรทดท 7 print(‘อาหารโปรดของคณคอ %s’ %c) บรรทดท 8 print(‘จบค าสง’)
จากตวอยางท 4 ในบรรทดท 3 จะมเงอนไข b <> ‘exit’ เพมเตม ซงมประโยชนส าหรบการหยดการ
ปอนชออาหารสดโปรด โดยการพมพค าวา exit แทนชออาหาร เทานการวนท าซ าของค าสง while กจะสนสดการท างาน
พอเหนตวอยางท 4 ท าใหนกถงเทคนคการเขยนค าสงการวนท าซ าทเปนลกษณะการวนท าซ าแบบไมมวนสนสดหรอ Infinity Repetition โดยใชค าสง while ซงเปนทนยมใชแพรหลายกบการเขยนในภาษา Python
ลองดเทคนคการก าหนดเงอนไขในลกษณะ Infinity Repetition ตามตวอยางตอไปน
ตวอยำงท 5 การใชค าสง while กบการก าหนดเงอนไขในลกษณะ Infinity Repetition (ขอควรระวงของ
ตวอยางนคอ คณจะตองพมพชออาหารจนเมอยมอแนๆ เพราะคณไมสามารถออกจากค าสงการวนท าซ าได)
บรรทดท 1 a = 1
บรรทดท 2 c = []
บรรทดท 3 while True :
บรรทดท 4 b = input(‘%d ปอนชออาหารสดโปรดของคณ’ %a)
บรรทดท 5 c.append(b)
บรรทดท 6 a += 1 บรรทดท 7 print(‘อาหารโปรดของคณคอ %s’ %c)
บรรทดท 8 print(‘จบค าสง’) จากตวอยางท 5 บรรทดท 3 ค าสง while ถกก าหนดเงอนไขดวยคาประเภทบลน (Boolean) ทเปนคา
จรง (True) ซงเปนรปแบบการเรยงเงอนไขทสนมาก แตสงผลใหการวนท าซ าจะกลายเปนแบบ Infinity
Repetition ไปเลย คอ จะท าค าสงกลมยอยในบรรทดท 4 และ 5 ทท าหนาทรนชออาหารโปรดของคณและจดเกบไวในตวแปร c ไปเรอยๆ วธหยดกตองหาทางหยดดวยตวเอง เทคนคใคร เทคนคมน ถาใครไมรจรง
กด Ctrl + C กแลวกน บาคนสงสยกบเทคนคการเขยนในลกษณะ Infinity Repetition จะน าไปใชประโยชนอะไร
ในเชงการใชงาน แถมยงไมสามารถหยดโปรแกรมจากค าสงปกตไดอก เรองแรกมาดประโยชนของการใชเทคนคแบบน ตามตวอยางท 5 จะเหนวากรปอนชออาหารและการจดคาลงในตวแปร c สามารถท าไปเรอย
ไมตองอยภายใตขอบเขตจ านวนรอบของคาในตวแปร a เหมอนในตวอยางท 4 เรองทสองของเทคนคการเขยนค าสงวนท าซ าแบบไมมวนสนสด คอ การหยดการวนท าซ าจากค าสงทชอวา break (เมอค าสง break
ท างานจะเปลยนสถานะเงอนไขของค าสง while จาก True ใหเปน False โดยอตโนมตซงจะท าใหการวนท าซ า
ของค าสง while หยดกระบวนการท างานทนท) ส าหรบการใชค าสง break เพอหยดการวนท าซ าของค าสง while
จะเขยนไดตามตวอยางขางลางน
บรรทดท 1 a = 1
บรรทดท 2 c = [] บรรทดท 3 while True :
บรรทดท 4 d = input(‘%d ปอนชออาหารสดโปรดของคณ’ %a) บรรทดท 5 if d = = ‘exit’:
บรรทดท 6 break
บรรทดท 7 c.append(d) บรรทดท 8 a += 1
บรรทดท 9 print(‘อาหารโปรดของคณคอ %s’ %c)
บรรทดท 10 print(‘จบค าสง’)
ตวอยางน จะแกไขปญหาการวนท าซ าแบบไมมวนสนสดทเกดขนในตวอยางท 5 โดยจะเพมค าสง if เพอตรวจสอบคาในตวแปร b (บรรทดท 5) มการปอนค าวา exit เพอตองการหยดการวนท าซ าเกยวกบการ
ปอนชออาหารสดโปรด ดวยค าสง break ในบรรทดท 6 และเมอไรทค าสง break ท างานกจะกระโดดกลบไปทบรรทดท 3 ทเปนค าสง while พรอมกบเปลยนสถานะของเงอนไขในการวนท าซ าจาก True ใหเปน False เพยง
เทานค าสง while กเลกท าการวนท าซ า ในกลมค าสงยอยภายในทงหมด (บรรทดทเปนกลมค าสงยอยเรมจาก
บรรทดท 5 ถง 8) และเรมในค าสงถดไปทอยในระดบเดยวกนกบค าสง while คอ บรรทดท 9 เปนตนไป เพอใหเขาใจลกษณะการท างานของค าสงการวนท าซ ารวมกบค าสง break โดยศกษาจากเสนทางการท างาน
ของค าสงดงรปท 5.1
รปท 5.1 แสดงเสนทางการท างานของค าสงการวนท าซ าแบบไมมวนสนสดและวธการหยดการวนท าซ าดวยค าสง break
อกค าสงหนงทนยมน ามาใชรวมกบค าสงการวนท าซ า (for และ while) คอ ค าสง continue ทมรปแบบ
การใชงานคลายๆ ค าสง break แตการท างานจะแตกตางกนตรงทค าสง continue จะตดขนรอบใหมของการวนท าซ า เพอใหงายตอการท าความเขาใจการท างานของค าสง continue ขอใหดจากรปท 5.2 ทเปรยบเทยบการ
ท างานของค าสงการวนท าซ าทไมมค าสง continue และทมค าสง continue
รปท 5.2 แสดงเสนทางการเปรยบเทยบการท างานของการวนท าซ าปกต และเพมค าสง continue ในกลมค าสงยอยของค าสงวนท าซ า for
++++++++++++++++++++++++รปท 007,008,009 และ 010 ++++++++++++++++++++
สรปไดวาค าสงการวนท าซ า ซงประกอบดวยค าสง for และ while มความเหมาะสมตอการน ามาใชกบ
กลมค าสงยอยทตองการวนท าซ า โดยทค าสงทงคจะมความแตกตางกนทวธการหยดวนท าซ า ทมขอสงเกต
จากลกษณะของเงอนไขคกบค าสงวนท าซ า เชน เงอนไขก าหนดการหยดวนท าซ าทชดเจน สมมตเรมนบตวเลขจาก 4 ไปจนถง 20 เพอท าค าสงยอยเปนจ านวน 17 รอบ เงอนไขแบบนเหมาะกบค าสง for เปนอยางยง
แตถาเงอนไขของการหยดวนท าซ ามรปแบบคอ a == ‘จบ’ หรอ a > 500 หรออะไรทมเครองหมาย =,>,< ท านอง
น ตองใชค าสง while เทานน นอกจากนยงมค าสงพเศษทใชภายในค าสง for และ while คอ ค าสง break และ continue ทมรปแบบการเขยนใชงานคลายกน คอตองใชภายในรวมกบกลมค าสงยอยของค าสง for และ while
เทานน ทงสองค าสงพเศษ (break และ continue) เมอถงเวลาท างานจะกระโดดไปทค าสง for หรอ while ทนท ทจดนจะแตกตางกบทค าสง break จะหยดการวนท าซ า และออกจากค าสง for หรอ while ไปท าค าสงอนๆ
ภายนอกตอไป แตค าสง continue จะเรมรอบใหมส าหรบท างานของกลมค าสงยอยภายในของค าสง for หรอ
while ในขณะนนตอไป ทดลองพมพค าสง for รวมกบค าสงพเศษ break และ continue ตามตวอยางตอไปน
ตวอยางท 6
บรรทดท 1 a = ['fc shirts','fcskirt','fc pants','fc hat'] บรรทดท 2 brand = []
บรรทดท 3 for c in a : บรรทดท 4 if ‘fc’ in c :
บรรทดท 5 brand.append(c[2:])
บรรทดท 6 print('Fashion clothing %s' %c[2:]) บรรทดท 7 if ‘skirt’ in c :
บรรทดท 8 print(‘No discounts.!!’)
บรรทดท 9 continue
บรรทดท 10 elif ‘hat’ in c :
บรรทดท 11 print(‘Waiting to order’) บรรทดท 12 break
บรรทดท 13 print(‘Waiting to order’)
บรรทดท 14 print('รานนขายเสอผาแฟชน %s' %brand) บรรทดท 15 print('ท าค าสงตอไปเลยคะ !!!')
++++++++++++++++++++++รปโคด 011 และ 012+++++++++++++++++++++++++++++++
จากตวอยางท 6 จะเปนการคนหาและจดเกบยหอเสอผาลงในตวแปรทชอ Brand (ซงเปนตวแปรแบบ
Sequence ชนด List) จากกลมของสนคาทเกบไวในตวแปร a โดยใชการวนท าซ าจากค าสง for ดงสนคาจากตวแปร a มาทละ 1 รายการ เพอจะแจงลกคาถงสวนลดของราคาสนคา 20% ของแตละรายการยกเวนกระโปรง
ทไมสวนลด (สงเกตเมอมการพมพ skirt' จะไมมการพมพค าวา “ลดราคา 20% วนนเทานน” เหมอนเสอผา
อนๆ เนองจากมค าสง continue ในบรรทดท 9 ) และการอานรายการสนคาจากค าสง for จะสนสดกอนความเปนจรง เนองจากถาพบทวยหอ hat (สมมตวาหมวกทจะขายยงมาไมถง) จากการตรวจเงอนไขในบรรทดท 10
กจะท าการ break ดวยค าสงจากบรรทดท 12 เปนผลใหการวนท าซ าของค าสง for นหยดลง และกระโดดไปท าค าสงในบรรทดท 14,15 ตอไป
ตวอยางท 7 การใชค าสง while รวมกบ break และ continue สมมตขอมลรายชอลกคาทมรปแบบการปอนขอมล
ดงน
1406: มาณ:กทม
3767:ประเสรฐ:อยธยา 7499:หนาตาด:ขอนแกน
และตองการผลลพธเปนรายงานทมรปแบบตอไปน -----------------------------------------------------
รหส ชอ จงหวด
----------------------------------------------------- 1406 มาณ (กทม )
3767 ประเสรฐ (อยธยา )
7499 หนาตาด (ขอนแกน )
บรรทดท 1 a = []
บรรทดท 2 while True :
บรรทดท 3 b = input(‘รานคา \n เพม [a] \n แสดง [s] \n ออกจากระบบ [x]’)
บรรทดท 4 b = b.lower()
บรรทดท 5 if b = = ‘a’ :
บรรทดท 6 c = input(‘ปอนรายการลกคา’)
บรรทดท 7 a.append(c)
บรรทดท 8 print(‘***ขอมลไดเขาสระบบแลว***’)
บรรทดท 9 elif b = = ‘s’ :
บรรทดท 10 print(‘{0:-<6}{0:-<10}{0:-<10}’.format(‘’))
บรรทดท 11 print(‘{0:<6}{1:<10}{2:10}’.format(‘รหส’,’ชอ’,’จงหวด’))
บรรทดท 12 print(‘{0:-<6}{0:-<10}{0:-<10}’.format(“”))
บรรทดท 13 for d in a :
บรรทดท 14 e = d.split(“:”)
บรรทดท 15 print(‘{0[0]:<6} {0[1]:<10} ({0[2]:10})’.format(e))
บรรทดท 16 continue
บรรทดท 17 elif b = = ‘x’ :
บรรทดท 18 break บรรทดท 19 print(‘ท าค าสงถดไป.....’)
จากตวอยางท 7 เปนโปรแกรมสมมตของรานคาในสวนของลกคา เมอโปรแกรมท างานจะมเมนให
ผใชเลอกเมนเกยวกบการเพมลกคา, การพมพรายการของลกคา และการสนสดการใชงานของโปรแกรม เปนตน โดยทลกษณะการท างานของโปรแกรมจะใชวธการวนท าซ าดวยค าสง while ทใชเงอนไขแบบไมม
วนสนสดคอ True แสดงวากลมค าสงยอยภายในค าสง while จะตองมค าสงพเศษทชอ break เพอหยดการวนท าซ าเปนอยางแนนอน (สงเกตบรรทดท 17.18 เปนการตรวจดการเลอกเมนเพอเลกใชงาน โดยการพมพ
ตวอกษร x เพอสงใหค าสง break ท างานนนเอง) ส าหรบเทคนคการสรางเมนใหผใชเลอกกอาศยเทคนคงายๆ
จากบรรทดท 2 คอการรอรบการปองกนขอมลผานคยบอรดจากค าสง input ทสามารถแสดงขอความได เราก
ดดแปลงขอความนนมาท าเปนเมนดวยการเพมเครองหมาย \n ส าหรบขนบรรทดใหมเทานนกเปนเมนได
แลว เมอผใชงานตองการเพมรายการลกคาใหพมพตวอกษร a ซงจะท าใหค าสงบรรทดท 5,6 และ 7 ท างาน
หากตองการดรายการลกคาทงหมด ใหพมพตวอกษร s จะมการท างานในบรรทดท 9 ไปจนถงบรรทดท 16 ส าหรบการพมพรายการของลกคาแตละคน ตามรปแบบรายงานทก าหนดไวในโจทย
บทท 6 การสรางโพรซเจอรหรอฟงกชนของ Python
โพรซเจอร หรอฟงกชน มกจะเปนชอทนกพฒนาโปรแกรมทงหลายตองคนห และจ าเปนตองรจก
รปแบบการเขยน ประโยชนของการใชงาน เทคนคการเขยนในลกษณะตางๆ ตามความสามารถของแตละ
ภาษา ทงโพรซเจอรและฟงกชนจะมความคลายคลงกนมาก จงมกจะเกดค าถามส าหรบนกพฒนาโปรแกรมมอใหม ถงการเลอกใชโพรซเจอรหรอฟงกชนเสมอ กลาวตามหลกการวชาการมกจะใหค าจ ากดความ
เกยวกบโพรซเจอรและฟงกชน พอสรปใหงายตอการท าความเขาใจ ตามตารางตอไปน
โพรซเจอร ฟงกชน 1. เปนทอยของกลมค าสงทมโอกาสเรยกใชงานซ าๆได
2. สามารถก าหนดตวแปรทใชงานเฉพาะภาพในโพรซเจอรนไดเทานน
3. รองรบการผานคาขอมลจากภายนอกในรปแบบอารกวเมนต
4. สามารถดงตวแปรภายนอกโพรซเจอรมาใชรวมภายในโพรซเจอรได
5. ไมสามารถสงคาผลลพธกลบในรปแบบการ return ได
ขอ 1-4 มคณสมบตเหมอนกบโพรซเจอร ขอ 5 สามารถ return คาผลลพธภายในของฟงกชนกลบไปยงจดทเรยกฟงกชนมาใชงานได
จากรายละเอยดในตาราง จะเหนความแตกตางกนเพยงขอท 5 ความสามารถในการสงคาผลลพธ
ภายในกลบออกไปดวยการใชค าสง return ซงจะมใชเฉพาะกบฟงกชนเทานน ดวยเหตทมความแตกตางจากลกษณะการใชงานเพยงเลกนอย ภาษา Python จงรวมโครงสรางของทงโพรซเจอรและฟงกชนใหเปนเรอง
เดยวกน โดยจะอางองคณลกษณะของการใชงานแบบฟงกชนเปนหลก ดงนนในภาษา Python จะมเพยงแค
การสรางฟงกชน (Custom Function) ส าหรบใชงานในโมดลเทานน กอนทจะท าความเขาใจรปแบบการสรางฟงกชนดวยค าสงของภาษา Python ลองมาดโครงสรางโดยรวมและเสนทางการท างานของฟงกชน
ตามรปท 1
รปท 1 แสดงการสรางฟงกชน, วธการเรยกใชงาน พรอมเสนทางการท างานของแตละ
ฟงกชนในโมดลของ Python
ต าแหนงของการสรางฟงกชนส าหรบการใชงายภายในโครงสรางของโมดล รวมทงลกษณะวธการ
เรยกใชฟงกชน (สงเกตสนทางเมอฟงกชนแตละชอถกเรยกใชงาน โดยเรมจากฟงกชนทชอ main เปน
จดเรมตนของโมดลน) ยกตวอยางตามรปท 1 ส าหรบโมดลนค าสงจะเรมตนทหลงสนประขางลางของกลมฟงกชนทงหมด ค าสงแรกหลงเสนประจะพบการเรยนใชงานฟงกชนทชอวา main เมอฟงกชนนท างานจะ
import os จดเรมตนของโมดลตวอยางน
yourchoice = 0 ก าหนดตวแปรส าหรบใชในโมดลและฟงกชน
def main( ) :
def showdirectory ( ):
def showfilelist( ):
main( )
showdirectory( )
print(‘ท าตอไป’)
ค าสงยอยของฟงกชน Main
กลมค าสงยอยของฟงกชนแสดงรายชอ Folder
กลมค าสงยอยของฟงกชน
ส าหรบแสดงรายชอไฟล
กลม Custom ฟงกชน
พรอมกบการแสดง
เสนทางการเรยกใชฟงกชนของโมดลน
ค าสงทเรมท างานของ
โมดลน โดยเรมจากการเรยนฟงกชน main
2
1
4
5
4
3
4
6
4
กระโดดไปยงฟงกชน main ตามเสนทางหมายเลข 1 และเรมท างานกบกลมค าสงยอยภายในฟงกชน main จนสนสดจงกระโดดกลบมาทกลมค าสงเรมตนตามเสนทางกลบหมายเลข 2 ทค าสงถดไป คอ ค าสงทเรยกฟงกชนทชอวา showdirectory ซงจะกระโดดไปทฟงกชนตามเสนทางหมายเลข 3 เพอท าค าสงยอยตางๆ
ภายในของฟงกชน showdirectory ขณะทท าค าสงยอยภายใน จะมการเรยกฟงกชนทชอ showfilelist ซงจะกระโดดไปยงทอยของฟงกชนดงกลาวตามเสนทางหมายเลข 4 เพอท างานกบกลมค าสงยอยภายในของ
ฟงกชน showfilelist จนกระทงสนสดการท างานของกลมค าสงยอยจงกระโดดกลบตามเสนทางหมายเลข 5
มายงกลมค าสงยอยภายในของฟงกชน showdirectory และท าค าสงยอยภายในของฟงกชนน จนกระทงเสรจสนจงจะกระโดดกลบไปกลมค าสงหลกดวยเสนทางหมายเลข 6 เพอท าค าสงในกลมค าสงหลกตอไปจนจบ
โปรแกรม คงพอจะเหนภาพการท างานและวธเรยกใชงานฟงกชนภายในโมดลของภาษา Python และเพอให
งายตอการท าความเขาใจในรายละเอยดของการเขยนโปรแกรมรวมกบฟงกชนทจดสรางขน จะขอแบงการอธบายออกเปนหวขอดงตอไปน
1. รปแบบการสรางฟงกชนของภาษา Python และวธเขยนโปรแกรมเพอเรยกใชงาน
2. การก าหนดขอบเขตของตวแปรภายในของฟงกชน
3. ลกษณะการใชคยเวรดอารกวเมนตและพารามเตอรรวมกบฟงกชน (Argument And Parameter
Function Keyword)
4. ความแตกตางระหวางฟงกชนทใชและไมใชค าสง return
รปแบบการสรางฟงกชนของภาษา Python และวธเขยนโปรแกรมเพอเรยกใชงาน
ลกษณะการสรางฟงกชนมรปแบบ (Syntax) ของการเขยนทคอนขางงาย ดงรปท 2 แสดงวธการ
เขยนฟงกชนทแบงตามการน าไปใชงาน 4 รปแบบ ไดแก
1. การสรางฟงกชนทท างานเหมอนโพรซเจอร (ไมมการสงคาใดๆ กลบ)
2. การสรางฟงกชนทท างานเหมอนโพรซเจอร แตมการสงผานคาตางๆ รวมกบตวแปรอารกวเมนต
3. การสรางฟงกชนรวมกบการสงคาผลลพธกลบดวยค าสง return 4. การสรางฟงกชนทมการใชตวแปรอารกวเมนตและการสงคาผลลพธกลบ
1. def ชอฟงกชน( ) :
a = 100 print(‘a=%d’ % a) print(a+10)
เหมาะตอการใชงานกบกลมค าสงททการเรยกใชซ าๆหรอถกเรยกใชงานจากหลายๆ ทโปรแกรมของโมดล
2. def ชอฟงกชน(ตวแปรอารกวเมนต):
a = คาอารกวเมนต print(a+10)
รปแบบในหวขอนจะถกเรยดใชงานเหมอนหวขอท 1 แตสามารถสงผานคาจากการเรยกใชงานฟงกชนดวยตวแปรอารกวเมนตทก าหนดรวมกบฟงกชน
3. def ชอฟงกชน( ) :
a = 1 b = 2 print(a + b) return a + b
การสรางฟงกชนลกษณะนเหมาะตอการประมวลผลทเกดจากกลมค าสงยอยภายใน ซงผลลพธ ทไดสามารถสงยอนกลบ โดยการใชค าสง return ของฟงกชน
4. def ชอฟงกชน(ตวแปรอารกวเมนต): a = คาอารกวเมนต b = 5 print(a * b) return a * b
การท างานของฟงกชนในหวขอนมหลกการท างานเหมอนหวขอท 3 โดยแตกตางกนตรงทฟงกชนสามารถผานค าขอมลจากภายนอกดวยตวแปรอารกวเมนตมาใชงานภายในฟงกชนได
รปท 2 แสดงรปแบบวธการสรางฟงกชนของภาษา Python
ซงทง 4 รปแบบจะถกน ามาใชงานภายในโมดลของภาษา Python ตามคณสมบตของแตละรปแบบโดยนกพฒนาโปรแกรมจะเปนผทตดสนใจเลอกใชงานใหตรงกบรปแบบโปรแกรมค าสงทก าลงพฒนา และ
ตรงตามการออกแบบโครงสราง เพอพฒนาโปรแกรม เชน โปรแกรมทเปนลกษณะ Procedural ซงกเปนรปแบบการเขยนโปรแกรมทเปนพนฐานของภาษา Python ทมการใชฟงกชนทง 4 รปแบบ เปนสวนรวม
ภายในโมดล และแบงลกษณะการใชงานฟงกชนทง 4 รปแบบ ออกเปน 2 ลกษณะ คอ
1. ฟงกชนทใชงานแบบ Global 2. ฟงกชนทใชงานแบบ Local
ฟงกชนทใชแบบ
ฟงกชนประเภทนถกสรางขนภายในโมดลมาตรฐานปกตของ Python ซงสามารถน าฟงกชนนไปใช
งานรวมกบโมดลอนๆ โดยเชอมโยงการใชงานดวยค าสง import จากรปท 3 แสดงวธการ import การใช Global ฟงกชนระหวางโมดลกบโมดล
รปท 3 แสดงลกษณะการสราง Global ฟงกชนและการเรยกใชงานฟงกชนระหวางโมดล
เงอนไขเลกๆ นอยๆ ทผใชงานไมควรพลาดในการสรางโมดลและฟงกชนลกษณะ Global ส าหรบใชงานรวมกบโมดลอนๆ คอการจดบนทกไฟลโมดลทงหมดไวในโฟลเดอรเดยวกน มาลองท าตวอยาง
เกยวกบฟงกชนประเภท Global
มฟงกชนทชอวา
check และเปน
global ฟงกชน
check
เปนวธการเรยกใชทกๆ
ฟงกชนทเปน global
ของโมดล stock Import stock
stock.check
วธการเรยกใช
ฟงกชน check
ทเปน global ของโมดล
stock โมดล stock.py โมดล shop.py
ตวอยางท 1 สรางโฟลเดอรใน Local Drive ทชอวา Go Sample (ถาใชระบบปฏบตการวนโดวสให
ทดลองสรางไวใน Drive C:\Go Sample) จากนนเปดโปรแกรม IDLE Python เลอกเมน File, เมนยอยNew
Window เมอจอภาพโมดลของ Python ปรากฏใหบนทกไฟลลงในโฟลเดอร Go Sample โดยใชชอวา check.py กลบไปท IDLE Python เปด New Window อกครงหนง ท าการบนทกจอภาพโมดลท 2 ลงในไฟล
ทชอวา shop.py ลงในโฟลเดอรเดยวกบไฟล check.py
รปท 4 ล าดบการสรางโมดลไปเกบไวใน C:\Go Sample
โมดล
Check.py
โฟลเดอร
โมดล
shop.py
IDLE Python
ทดลองสรางฟงกชน Global ลงในโมดล check.py ดงน
จากนนท าการบนทกไฟลโมดล check.py เมอเสรจสนแลวใหท าการทดลองเปดโมดล shop.py เพอเรยกใชฟงกชน Global จากโมดล check.py ตามค าสงตอไปน
Import check ส าหรบอางองโมดล check.py
check.stockin( ) เรยกใชฟงกชน global ทชอ stockin จากโมดล check.py
check.stockout( ) check.checkstock( )
ท าการทดสอบโปรแกรมโดยการรนค าสงในโมดล shop เพอดผลลพธการเรยกใชงานฟงกชนGlobal จากโมดล check.py ขอควรสงเกตการณเรยกใชฟงกชนแบบ Global เนองจากชอฟงกชนแบบ Global
มโอกาสซ ากบชอฟงกชนภายในโมดล shop ซงเปนฟงกชนแบบ Local ได รปแบบการเขยนโปรแกรม
เรยกใชฟงกชน Global จ าเปนตองมชอโมดล (บางครงเรยก Name Space) ของฟงกชน Global พมพไวขางหนาการเรยกใชฟงกชนเสมอ
ฟงกชนทใชงานแบบ Local
การสรางฟงกชนใดๆ ภายในโมดลมาตรฐานของ Python และมการเรยกใชงานฟงกชนเฉพาะ
ภายในโมดลนน กลมฟงกชนภายในโมดลนนจะถกจดใหเปนฟงกชนภายในหรอแบบ Local นนเอง ทดลองสรางและใชงานฟงกชนแบบ Local ตามตวอยางดงน
ตวอยางท 1 ท าการเปดโมดลวนโดวจาก IDLE Python
จากตวอยางน จะตองทดลองสรางโฟลเดอร python31 ไวใน Drive C:\ โดยสรางโฟลเดอรและไฟล
นามสกลตางๆ ไวในโฟลเดอร python31 กอน เพอใหโปรแกรมทเขยนขนสามารถเรยกดไฟลและโฟลเดอรได โดยค าสงท เขยนข นจะประกอบดวยฟงกชนแบบ Local ในโมดลนมท งหมด 3 ฟงกชน main,
showdirectory, showfilelist โดยฟงกชนแรกทถกเรยกใชงานคอฟงกชน main ท าหนาทเปนเมนส าหรบ
เรยกใชฟงกชน showdirectory และ showfilelist ผานตวแปรทชอ yourchoice ทเกบคาหมายเลขหวเรองจากภายในฟงกชน main ส าหรบฟงกชนแสดงรายชอโฟลเดอรใน Drive C คอฟงกชนทชอ showdirectory
ประกอบดวยค าสง os.listdir( ) รวมกบค าสง for เพออานรายชอโฟลเดอรและไฟลตามทระบชอ Path หรอ Drive ในตวอยางนระบใหอานใน Drive C:\ ทงหมด เนองจากค าสง os.listdir( ) จะอานรายชอโฟลเดอรและ
ไฟล จงจ าเปนตองเลอกเฉพาะชอโฟลเดอรเทานน วธการกใชค าสง if เพอสรางเงอนไขในการแยกชอทเปน
โฟลเดอร (สงเกตไมมการใชเครองหมาย. และนามสกล) ออกจากชอไฟลโดยการคนหาเครองหมาย. ภายใน
ตวแปร sNamedir ทมรปแบบค าสงในการคนหาเครองหมายดงน ‘.’in sNamedir ซงผลลพธทไดจากการคนหาเครองหมายจด เมอตรวจพบจะมคาเปน True เมอน าค าสงการคนหามารวมกบค าสง if (if ‘.’ In
sNamedir) จะเปนการสรางเงอนไขเพอตรวจชอในคาตวแปร sNamedir ทเปนเกยวกบไฟลเทานน ถาหากตองการตรวจชอทอยในตวแปร sNamedir ทเปนโฟลเดอร ตองดดแปลงค าสงการตรวจเงอนไขตามน if not
‘.’ in sNamedir จะเหนวามการเพมค าสง not แทรกลงในการตรวจเงอนไข แคนกจะคนหาเฉพาะชอทเปน
โฟลเดอรเทานน นอกจากการใชงานฟงกชนทเปน Global และ Local แลวกมการสรางหรอเขยนฟงกชนเพอใชงาน
ภายใตรปแบบการเขยนโปรแกรมเชงวตถ (Object Oriented Programming) ตอนนหากเปดโมดลมาตรฐาน
ปกตทวไปมาเขยนโปรแกรม OOP แลวเราจะเรยกโมดลเปน Class Module แทนค าวาโมดลเฉยๆ และแนนอน ค าวาฟงกชนทเราสรางในโมดลเฉยๆ กตองเปลยนชอเรยกฟงกชนใหมเปนค าวา Method ของ Class
Module โดยแบงลกษณะการใชงาน Methon ออกเปน 2 ลกษณะการใชงาน คอ 1. Internal Method หรอ Private Method
2. Interface Method
การก าหนดขอบเขตของตวแปรภายในของฟงกชน
การเขยนโปรแกรมในโมดล สงหนงทขาดไมไดเลยกคอ ตวแปร เมอมการใชงานตวแปรในโมดลก
ยอมมโอกาสทตองน าตวแปรเหลานนมาใชงานรวมกบกลมฟงกชนทสรางไวภายในโมดลเชนกน ลกษณะ
ของการประกาศตวแปรในโมดล เพอน ามาใชในฟงกชนมรปแบบตามตวอยางตอไปน
ตวอยางท 1 การใชตวแปรระดบโมดลรวมกบค าสงยอยภายในฟงกชน
จากตวอยางท 1 เปนการแสดงตวแปรทประกาศและใชงานในโมดล สงเกตในฟงกชน test จะมการ
เรยกใชงานตวแปร fullname รวมกบกลมค าสงยอยภายในฟงกชน เมอท าการทดสอบรนโปรแกรมตวแปร fullmane ทประการไว และตองน ามาใชรวมภายในฟงกชน test กสามารถแสดงคาขอมลทเกบไวในตวแปร
ไดอยางถกตอง ซงผลลพธทไดจะแสดงดงตอไปน
ผลลพธของการทดสอบโปรแกรมในตวอยางท 1 >>> จองพนท 3 X 3 ม.
>>> ของรานชอ shop
ตวอยางท 2 ท าไมถงตองใชค าสง Global กบตวแปรของโมดลภายในฟงกชน
โปรแกรมเรมตนท างานทจดนโดยเรมจากฟงกชน one และ two
เมอรนโปรแกรมเพอทดสอบจะไดผลลพธดงน
นาแปลกมากทเกด Error เกดขนเมอเรยกใชฟงกชนทชอวา two ในบรรทด (x=x+300) ทตวแปร
ของโมดลมการเปลยนแปลงคาใหมภายในฟงกชนน ขอความ Error ทปรากฏจะถามถงตวแปร x ทก าลงจะเปลยนแปลงคาใหมเปนตวแปร x แบบ Local ภายในฟงกชนหรอตวแปร x นไดมาจากขางนอกฟงกชน (ตว
แปรของโมดล) ตรงนผพฒนาโปรแกรมตองเปนผเลอกการใชตวแปร x ตวนเอง ถาใชตวแปร x แบบ Local กแกไขค าสงเพมตามตวอยางตอไปนลงในฟงกชน two และท าการทดลองรนโปรแกรมใหม
ในบรรทด x=0 ทท าการเพมในฟงกชน two จะถอวาเปนตวแปรใหมทชอ x และจะใชงานเฉพาะในฟงกชน two เทานน ส าหรบตวแปร x ของโมดลจะไมสามารถน ามาใชงานในฟงกชนไดอกเลย
ตอมาในกรณทตองการใชตวแปร x ของโมดล ซงประกาศอยภายนอกฟงกชน มเงอนไขคอ ตอง
เกด Error จาก
ฟงกชนทชอ two
เกดจากการเรยกใชฟงกชนทชอ one ซงแสดงคาขอมลในตวแปร x
เปลยนแปลงคาภายในของตวแปร x ของโมดลนไดตลอดเวลา ตวอยางการเพมค าสง global เสรมลงใน
ฟงกชน two แสดงไวดงน
เมอก าหนด global x ในฟงกชน two ตอไปน การใชงานตวแปร x ตวนจะสามารถเปลยนแปลงคาภายในตวแปรได (ตวแปร x ตองประกาศในโมดลกอนเรยกใชในฟงกชนเสมอ)
ตวอยางท 3 แสดงการก าหนดขอบเขตของตวแปรทใชงานกบฟงกชน ใหเปดวนโดวโมดลใหมจาก IDLE ของ Python Shell เพอทดลองโปรแกรมตอไปน
import os #เชอมตอโมดลค าสงเกยวกบการเรยกใชไฟลตางๆ ใน Drive C:\
choice = 0 #ประกาศตวแปรโมดลเพอใชงานรวมกนในโมดลน filename = ‘’
def menu() :
global choice #อางถงตวแปรโมดลมาใชภายในฟงกชนและสามารถเปลยนแปลงคาขอมลของตวแปรนไดดวย
print(‘ เมนใชงาน \n 1.เปดใชเครองคดเลข \n 2.บนทกขอความ \n3.ออกจากการใชงาน’) choice = input('เลอกเมนยอยเพอใชงาน :')
def opennotpad():
filename = 'C:\\Windows\\notepad.exe' #เปนตวแปร Local ของฟงกชนเทานน
print('บนทกหมายเหตดวย %s' %filename)
os.system(filename)
def opencalculator():
filename = 'C:\\Windows\\system32\\calc.exe'
เพมค าสง global ตวแปรกอนเปลยนแปลงคาในตวแปร x
print('คดเงนดวยโปรแกรมเครองคดเลขทชอ %s' %filename)
os.system(filename)
#จดเรมตนของโปรแกรม
while True : menu()
if choice == '1':
opencalculator() elif choice == '2' :
opennotepad()
else : break
จากตวอยางท 3 จะใชตวแปรทชอ choice เปนตวแปรเกบหวขอทตองการใชงาน (ตวแปร choice จะถกใชงานในหลายแหง เชน ในฟงกชนทชอ menu และทกลมค าสงเรมตนทค าสง if กรณนตวแปร choice
ควรประกาศในระดบโมดลจงจะเหมาะสมตอการใชงาน) จากฟงกชนทชอ menu ซงจะท าหนาทแสดงรายการของเมนการใชงานและรอรบหวเรองทตองการใชงานจากค าสง input ภายในฟงกชน เนองจากจะม
การเปลยนแปลงคาขอมลในตวแปร choice ทอยภายนอกฟงกชน จงจ าเปนตองระบค าวา Clobal choice ลง
ในฟงกชน menu เมอไดหมายเลขหวเรองกจะน าไปตรวจดวยกลมค าสง if เพอเรยกใชฟงกชนยอยอนๆ เชน กดหมายเลข 1 จะเรยกใชฟงกชน opencalculator ซงภายในฟงกชนนจะมตวแปรภายในทเปนแบบ Local
(ตวแปรชอ filename) เพอก าหนดชอไฟลเครองคดเลขหรอ call.exe (ไฟลเครองคดเลขทเรยกใชงานจาก
ตวอยางนจะไดรบการตดตง และมใชงานในระบบปฏบตการ Windows อยแลว) โดยจะน าคาในตวแปร filename ไปใชรวมกบค าสง os.system(filename) ซงท าหนาทรนไฟลทมนามสกลเปน .exe ของ
ระบบปฏบตการ Windows กดหมายเลข 2 ส าหรบรยกฟงกชน opennotepad (ลกษณะการใชค าสงและตวแปรจะคลายกบฟงกชน opencalculator) ส าหรบเปดโปรแกรม Notepad ของระบบปฏบตการสรปไดวาการ
ท างานของโปรแกรมในตวอยางท 3 ตวแปร choice คอยขางมบทบาทในการใชคาทไดรบมาจากภายใน
ฟงกชน menu เชอมโยงกบกลมค าสงในจดอนๆ ภายในโมดล ดงนนฟงกชนใดตองการใชตวแปร choice ท
ตองการเปลยนแปลงคาขอมลกอยาลมใช Global choice ไวในฟงกชนดวย
ลกษณะการใชคยเวรดอารกวเมนตและพารามเตอรรวมกบฟงกชน
(Argument And Parameter Function Keyword)
“ เพมอารกวเมนตสก 2 ตวในฟงชน Payment ดวย “ ถาใครเปนนกพฒนาโปรแกรมมอใหมหรอมอ
เกากคงไมมปญหาในการสรางอารกวเมนตเพมใหกบฟงกชนมากนก เพยงแตขอตวอยางรปแบบ (Syntax)
ของการเขยนใน python วาเคามรปแบบอยางไร เทานกลยท างานทเหลอตอไปได กอนทจะมาดวธการใชอารกวเมนตหรอบางครงกเรยกวาพารามเตอรเพมใหกบฟงกชน ตองมาดเหลผลวาท าไมตองใชอารกวเมนต
หรอพารามเตอรรวมกบฟงกชน ค าตอบงายๆ กคอ เราตองการสงคาขอมลผานเขาไปภายในฟงกชน เพอทจะไดน าคาขอมลเหลานนไปใชงานกบตวแปร Local, การค านวณ หรอใชกบกลมค าสงยอยภายใน
ฟงกชน
รปท 1 แสดงรปแบบการก าหนดอารกวเมนตใหกบฟงกชน
รปท 1 แสดงรปแบบการก าหนดอารกวเมนตส าหรบใหงานกบฟงกชน
อารกวเมนตทใชรวมกบฟงกชนของ Python จะประกอบดวย 2 ลกษณะคอ 1. อารกวเมนตแบบต าแหนงและจ านวนใชงานทแนนอน (Positional Argument)
2. อารกวเมนตแบบขยายจ านวนตามคาขอมล (Sequence Unpacking Operator)
อารกวเมนตแบบต าแหนงและจ านวนใชงานทแนนอน (Positional Argument)
การใชงานอารกวเมนตลกษณะนมกนยมใชงานทวไปรวมกบฟงกชนปกต รปแบบการประกาศ
อารกวเมนตคอนขางเขยนงาย ต าแหนงของอารกวเมนตในการประกาศและใชงานกแนนอนไมเปลยนแปลง วธการผานคาขอมลเขาไปจดเกบและเรยกใชคาขอมลภายในอารกวเมนตคลายกบการใชงานตวแปรทวไป
ดงแสดงไวในตวอยางตอไปน
ตวอยาง แสดงวธประกาศอารกวเมนตทชอวา startno และ endno
การระบ startno และ endno ใหกบฟงกชน shownumber เปนทางผานคาขอมลจากภายนอกฟงกชนเขาไปใช
งานภายในฟงกชน ดวยการเรยกใชงานฟงกชนตามตวอยางตอไปน
a, b = 5, 10
shownumber(a, b)
โดยก าหนดคา 5 ใหกบตวแปร a และคา 10 ใหกบตวแปร b เมอเรยกใชฟงกชน shownumber ก
ก าหนดตวแปร a ณ ต าแหนงอารกวเมนตแรกฟงกชน ซงจะตรงกบอารกวเมนตทชอ startno เชนเดยวกบตวแปร b ทจะก าหนดต าแหนงอารกวเมนตท 2 ซงตรงกบอารกวเมนต endno
a, b = 5, 10 def shownumber (startno, endno)
shownumber (a, b) for …
……. …….
ค าสงดานเรยกใชฟงกชน ฟงกชนและค าสงภายใน
รปท 2 แสดงการผานคาขอมลจากตวแปร a และ b ตรงตามต าแหนงของอารกวเมนตแตละตว
การโอนถายคาขอมลในตวแปร a ไปยงอารกวเมนต startno จะเกดขนโดยอตโนมต (ชนดการโอนยายขอมลระหวางตวแปรปกตกบอารกวเมนตจะเปนแบบ Tuple ซงมความหมายวา เมอคาขอมลอารกวเมนตมการ
เปลยนแปลงจากเดมไป จะไมสงผลใหคาขอมลในตวแปรตนทางเปลยนตามไป ตวอยาง ตวแปร a มคาคอ 5
ซงเปนตวแปรตนทาง เมอตวแปร a ผานคาขอมลไปยงอารกวเมนต startno จาก 5 ไปเปน 7 คาขอมลในตว
แปรตนทางคอ ตวแปร a กคงคาเทากบ 5 ไวดงเดม) เมอฟงกชนถกเรยกใชงานเสนอ ลองพมพกลมสงเกยวกบฟงกชนรวมกบอารกวเมนตแบบท 1 ตามตวอยางตอไปน
ตวอยางท 1 แสดงการเรยกใชฟงกชนพรอมการผานคาขอมลใหกบอารกวเมนตของฟงกชน เปดวนโดวโมดลใหมจาก IDLE ของ Python Shell เพอทดลองโปรแกรม
จากตวอยางท 1 สมมตใหเปนโปรแกรมเกยวกบรายชอนกเรยนในหองเรยนภาษาองกฤษ
โดยจดเกบรายชอนกเรยนไวในตวแปร englishroom ในโปรแกรมตวอยางนประกอบดวย 2 ฟงกชนท า
หนาทคนหาชอทมตวอกษรของชอมากนอยตามทตองการ ยกตวอยาง ถาตองการแสดงรายชอนกเรยนทมมากกวา 3 ตวอกษร ใหเลอกเมนหมายเลข 1 จะเปนการเลอกฟงกชนชอ namemorechar ทประกอบดวย
อารกวเมนตชอ room ส าหรบรบคาขอมลทเปนรายชอนกเรยน ซงจะไดจากตวแปร englishroom และ
อารกวเมนตชอ numchar ส าหรบรนจ านวนตวอกษรทตองการเปรยบเทยบในฟงกชน โดยจะไดคาจากตวแปร b หรอหากตองการแสดงรายชอนกเรยนทมนอยกวา 3 ตวอกษร ใหเลอกเมนหมายเลข 2 ซงจะ
เรยกใชฟงกชนชอ namemorechar ทม 2 อารกวเมนตและมการท างานคลายๆ กบฟงกชนแรก
อารกวเมนตแบบขยายจ านวนตามคาขอมล (Sequence Unpacking Operator)
การสรางฟงกชนทมอารกวเมนตส าหรบใชงาน โดยสวนใหญจะก าหนดอารกวเมนตใชงานเปนจ านวนทแนนอน แตในกรณทตองการสรางฟงกชนทจ าเปนตองมอารกวเมนต แตไมตองการก าหนดจ านวน
ทแนนอน แบบนควรจะใชอารกวเมนตแบบ Sequence Unpacking Operator (ในภาษา Python จะใชเครองหมาย * น าหนาอารกวเมนตแบบน) ลองมาดรปแบบการก าหนดอารกวเมนตแบบนรวมกบฟงกชน
ตามตวอยางตอไปน
def shownumber(*startendno) : for x in range(startendno[0], startendno[1])
print(x)
จากตวอยางนฟงกชน shownumber จะมเพยงแคหนงอารกวเมนตทชอ *startendno (ซงในตวอยางจากหวขอท 1 ซงเปนแบบ Positional Argument จะม 2 อารกวเมนตคอ startno endno) แตสามารถรองรบ
การขยายจ านวนอารกวเมนตทตองใชงานโดยอตโนมต ตามรป 9 แสดงการเรยกใชฟงกชนทมอารกวเมนตแบบขยายจ านวนตามคาขอมล
เสนทางการสงผานคาขอมลของทง 3 ตวแปร
ภาพแสดงการเรยกใชฟงกชนและผานคาขอมลไปใหกบอารกวเมนต
ค าสงดานเรยกใชฟงกชน
a,b,c = 5,7,10
Shownumber(a,b,c)
def
shownumber(*startendno) :
(a)
startendno[0]
(b)
startendno[2] (c)
startendno[1]
แสดงการขยายจ านวนอารกวเมนตของ startendno
ออกเปน 3 อารกวเมนตโดยอตโนมต โดยภายใน
ฟงกชนจะเรยกเปน startendno[0] ส าหรบ
อารกวเมนตแรก ซงไดคาขอมลจากตวแปร a,
อารกวเมนต startendno[1] ไดจากตวแปร b
ตามล าดบไปจนครบ
ทดลองการใชงานอารกวเมนตตามตวอยางโปรแกรมตอไปน
ตวอยางท 1 เปดวนโดวโมดลใหมจาก IDLE ของ Python Shell ทดลองปอนค าสงตอไปน
จากตวอยางท 1 แสดงการผานคาตวแปรจ านวน 3 คาไปยงฟงกชน showitem ซงภายในฟงกชนจะแสดงวธการเขยนโปรแกรมดงคาจากอารกวเมนตแบบขยายจ านวนตามคาขอมลดวย (Item[0], Item[1],
Item[2])
ตวอยางท 2 แสดงวธดงคาจากอารกวเมนตในฟงกชนดวยค าสง for
ตวอยางนแสดงการผานคาจากตวแปรตนทางจ านวน 3 คา ผานอารกวเมนตทชอ * item เมอตองการ
ใชคาในอารกวเมนตภายในฟงกชนจะใชวธอานคาดวยค าสงวนท าซ าหรอค าสง for เพออานคาทเกบไวใน
อารกวเมนต * item ตงแตคาแรกไปจนคาสดทาย (ลกษณะคาทจดเกบใน * item จะมวธเกบเหมอนกบตวแปร Collection Data ประเภท Tuple ภาพจ าลองการเกบคาขอมลในอารกวเมนตเปนดงน
* item = (TV’, ‘DVD’, ‘VCD’)
การอางต าแหนงโดยตรง (Item[0], Item[1], Item[2])
ดงนนการเรยกใชคาภายในอารกวเมนตจงเรยกไดจากต าแหนงโดยอางองหมายเลข Index ตามตวอยางท 1 หรอใชวธการอานจากค าสง for ในตวอยางท 2
ตวอยางท 3 แสดงโปรแกรมการใชอารกวเมนตแบบ Sequence Unpacking Operator โดยผานตวแปร
Collection Data ประเภท Dictionary ดวยเทคนคการผานคาขอมล **- Operator
ตวอยางท 3 เปนเทคนคการใช Unpacking Operator ในฝงคาขอมลตนทาง ใหสงเกตทตวแปรตน
ทาง ซงปกตจะมจ านวนตวแปรเทากบจ านวนคาขอมลทตองการผานไปยงอารกวเมนตของฟงกชน แตใน
ตวอยางนตวแปรตนทางจะมเพยงตวเดยว และเปนตวแปรชนด Dictionary คอมคาขอมลในตวแปรไดมากกวาหนงคา ในทนประกอบดวย code : sotv42, title : sony42tv, cost : 50000 ซงนบไดจ านวน 3 คา
ขอมล เมอสงผานไปยงอารกวเมนตของฟงกชน ซงประกอบดวย code, title, cost (การตงชออารกวเมนตของฟงกชนเมอตองใชเทคนคการสงผานคาจากตวแปรตนทางหนงตวแปรหลายคาขอมล ชออารกวเมนต
จ าเปนตองตงชอใหตรงกบชอของคย (Key) ในคาขอมลตนทางเสมอ
Stock = [‘code’ : ‘sotv42’, ‘title’ : ‘sony42tv’...]
น าชอ Key มาก าหนดชออารกวเมนต
Def showitem(code, title..) :
จงจะสามารถสงผานขอมลดวยเทคนค Unpacking Operator ตนทางได จากตวแปร stock ซงอาศย
เทคนคการกระจายคาขอมลภายในแบบ Dictionary ใหลงพอดกบอารกวเมนตจงตองระบเครองหมาย ** ไวหนาตวแปรตนทาง ซงจะเขยนไดเปน **stock รวมกบการเรยกฟงกชน showitem(**stock) เพอใชงาน
ความแตกตางระหวางฟงกชนทใชและไมใชค าสง return
การสรางฟงกชนเพอใชงานในโมดลบางกรณ เมอมการประมวลผลภายในฟงกชนเสรจสน กม
ความจ าเปนทตองการผลลพธทไดจากการประมวลผลภายใน สงกลบออกไปใชงานภายนอกฟงกชน ดวย
เงอนไขดงทไดกลาวมา จงมความจ าเปนทตองเพมเตมค าสงบางค าสงลงภายในฟงกชน เพอสงผลลพธนนกลบไปจดทเรยกใชงานฟงกชน ซงค าสงนนกคอ ค าสง return นนเอง ตอไปนเปนการแสดงรปแบบการใช
ค าสง return ภายในฟงกชน Factorial ตามตวอยาง
เมอมการค านวณคาของ Factorial ภายใตค าสง for เสรจสนแลวจะท าการสงคาทอยในตวแปร a กลบไปจดทเรยกใชฟงกชน ตามตวอยางการเรยกใชฟงกชน Factorial ดงน
Key ท 1 คาขอมลท 1 Key ท 2 คาขอมลท 2
Resultfactorial = factorial(5)
การเรยกใชงานฟงกชนทมการสงคาผลลพธกลบมาจ าเปนตองมตวแปรตนทางรองรบคาผลลพธทไดจากฟงกชน ซงในทนคอตวแปรตนทาง resultfactorial ในทางตรงกนขามกบฟงกชนทไมมค าสง return
ภายในฟงกชน กไมมความจ าเปนตองมตวแปรตนทางรอรบคา เนองจากฟงกชนนนๆ จะไมสงคาผลลพธใดๆ กลบออกมายงจดทท าการเรยกใชฟงกชนนนเอง
ทดลองโปรแกรมตามตวอยางตอไปน ส าหรบการใชค าสง return รวมกบฟงกชน
ตวอยางท 1 เปดวนโดวโมดลใหมจาก IDLE ของ Python Shell และทดลองปอนค าสงตอไปน
ตวอยางขางตนเปนโปรแกรมส าหรบค านวณคา Factorial และ Fibonacci โดยเลอกจากเมนท
ตองการค านวณ เชน เลอกเมนหมายเลข 1 ส าหรบค านวณคา Factorial โดยเรยกใชฟงกชนทชอ Factorial พรอมสงคาขอมลผานอารกวเมนตของฟงกชน เขาสกระบวนการค านวณกลมค าสงในลปหรอค าสง for จน
ไดค าตอบสดทายทเกบคาผลลพธนน ตวแปร a ในขนตอนสดทายของฟงกชนคอการใชค าสง return คาใน
ตวแปร a กลบออกไปขางนอกฟงกชน ซงจะสงผานคาขอมลไปยงตวแปรตนทางทชอ y ส าหรบฟงกชน Fibonacci กมลกษณะการ return ผลลพธเชนเดยวกน
บทท 7 ฝกเขยนโปรแกรมกบเตาไพทอน
ไพทอนมโมดล turtle ซงมตนฉบบมาจากภาษา Logo โดยจะมในโปรแกรม Python เวอรชน Python
2.6 และ Python 3 เปนตนมา สาหรบใชฝกเขยนโปรแกรมขนเรมตน โดยใชเตาในการลากเสนหรอวาดรป
ในทนจะแนะนาใหใชโหมดสครปต
ตวอยาง ใหทดลองเขยนคาสงดงตอไปน
เมอรนโปรแกรม จะไดผลลพธคอ
บรรทดบนสดของโคดคาสง จะตองใชคาสง from turtle import * เพอเรยกใชตวแปร ฟงกชน หรอเมธ
อดทงหมดจากโมดล turtle เพอใชในการวาดภาพได
1. forward() / fd() ลากเสนตรงไปขางหนามหนวยเปนพกเซล โดยภายในวงเลบใสตวเลขทเปนชนด integer
หรอ float เชน
forward(100) เตาจะเดนหนา 100 พกเซล
forward(-100) เตาจะเดนหนา -100 พกเซล หรอถอยหลง 100 พกเซลนนเอง (ทศตรงขาม)
2. back() / bk() / backward() ลากเสนตรงไปขางหลง มหนวยเปนพกเซล เชน
backward(100) เตาจะเดนถอยหลง 100 พกเซล
backward(-100) เตาจะเดนถอยหลง -100 พกเซล หรอเดนหนา 100 พกเซลนนเอง
3. right() / rt() หนไปทางขวา ทามมตามองศาทกาหนดจากมมเดม เชน right(90) หนหวเตาไปทางขวา 90
องศาจากมมเดม
4. left() / lt() หนไปทางซาย ทามมตามองศาทกาหนดจากมมเดม เชน left(90) หนหวเตาไปทางซาย 90 องศา
จากมมเดม
5. goto(x, y) / setpos(x, y) / setposition(x, y) ยายเตาไปยงตาแหนงทแนนอน โดยไมเปลยนทศทางของเตา
ตวอยางเชน
6. setx() ตงคาพกดในแกน x ของเตา โดยทพกดในแกน y ไมมการเปลยนแปลง
7. sety() ตงคาพกดในแกน y ของเตา โดยทพกดในแกน x ไมมการเปลยนแปลง
8. setheading() / seth() กาหนดหวเตาใหหนไปตามทศทตองการ ในวงเลบใหใสตวเลของศาเขาไป โดย 0
คอทศตะวนออก, 90 คอ ทศเหนอ, 180 คอ ทศตะวนตก และ 270 คอ ทศใต
9. home() ยายเตาไปยงจดเรมตน นนกคอ พกด (0,0) และตงคาหวเตาไวททศทางเรมตน นนคอ 0 องศา หรอ
ชไปทางขวา
10. circle(รศม, องศา, จานวนเหลยม) ใชวาดรปวงกลม
- circle(รศม) ใชวาดรปวงกลม เชน circle(50) จะไดวงกลมทมรศมเทากบ 50
- circle(รศม, องศา) ใชวาดรปวงกลมไมครบวง ตามองศาทกาหนด เชน circle(50,180) จะไดครง
วงกลมทมรศมเทากบ 50
- circle(รศม, องศา, จานวนเหลยม) ใชวาดรปหลายเหลยม เชน circle(100,360,5) จะไดวงกลมทม
หาเหลยม
11. dot(ขนาดเสนผานศนยกลาง, "ส") ใชวาดจดวงกลม โดยระบเสนผานศนยกลางและส
12. stamp() ปมตวเตาใหอยในตาแหนงทกาหนด เชน เมอเดนเตาเดนหนาไป 100 พกเซล ใหทาการปมรป
เตาไวตาแหนงนน ตวอยางเชน
13. clearstamp() ลบตวเตาทเราทาการปมเอาไว
14. undo() ยกเลก (ซ าๆ) การกระทาของเตาครงลาสด
15. speed() ใสความเรวในการเดนของตวเตา มคาตงแต 0 - 10 โดย 0 = เรวทสด, 10 = เรว, 6 = ปกต, 3 = ชา,
1= ชาทสด เชน speed(3)
1. position() / pos() สงกลบคาตาแหนงปจจบนของเตา (x, y)
2. towards(x, y) สงกลบคามมระหวางเสนจากตาแหนงเตาไปยงตาแหนงทระบ
3. xcor() สงกลบคาพกดแกน x ของตวเตา
4. ycor() สงกลบคาพกดแกน y ของตวเตา
5. heading() สงกลบคาองศาของหวเตา
6. distance(x, y) สงกลบคาระยะทางจากเตาไปยงตาแหนง (x, y) ทอางอง
1. pendown() / pd() / down() เปนคาสงวางปากกา
2. penup() / pu() / up() เปนคาสงยกปากกา
3. pensize() เปนคาสงสาหรบใชกาหนดขนาดตวเตาและขนาดของเสนเปนหนวยเปนพกเซล เชน pensize(3)
4. pen() ตงคาแอตทรบวตหลายๆ อยางของปากกาในคาสงเดยว ซงมคาดงตอไปน :
- shown แสดงหรอซอนปากกา ม 2 คา คอ True/False
- pendown วางปากกา ม 2 คา คอ True/False
- pencolor ใสสปากกา โดยระบชอสลงไป เชน pencolor = "red"
- fillcolor เตมสวตถแบบปด โดยระบชอสลงไป เชน fillcolor = "red"
- pensize ใสขนาดปากกา
- speed ใสความเรวในการวาดของปากกา มคาตงแต 0 - 10
5. isdown() สงกลบคา True ถาสถานะเปนวางปากกา และสงกลบคา False ถาสถานะเปนยกปากกา
1. pencolor() สงกลบคาหรอตงคาสปากกา โดยม 3 รปแบบ คอ
- pencolor() สงกลบคา pencolor ปจจบน สงคากลบมาเปนสตรงระบส
- pencolor(ชอส) ตงคา pencolor เปน colorstring เชน "red", "yellow" หรอ "# 33cc8c"
- pencolor(r, g, b) ตงคา pencolor เปนส RGB โดยแตละ R, G และ B ตองอยในชวง 1.0 - 255
2. fillcolor() สงกลบคาหรอตงคาการเตมส โดยม 3 รปแบบ คอ
- fillcolor() สงกลบคา fillcolor ปจจบน สงคากลบมาเปนสตรงระบส
- fillcolor(ชอส) ตงคา fillcolor เปน colorstring เชน "red", "yellow" หรอ "# 33cc8c"
- fillcolor(r, g, b) ตงคา fillcolor เปนส RGB โดยแตละ R, G และ B ตองอยในชวง 1.0 - 255
3. color() เปนคาสงกาหนดสใหกบเสน (ชอสในภาษาองกฤษ) เชน color("yellow") ตวอยางเชน
1. begin_fill() กาหนดจดเรมตนในการเตมส โดยจะตองใสคาสงนกอนคาสงวาดรปทรง
2. end_fill() เตมสรปทรง โดยจะตองใสคาสงนหลงคาสง begin_fill()
1. reset() เปนคาสงทใชลบภาพวาดของเตาออกจากหนาจอ ปรบตาแหนงตวเตามาอยตรงกลางหนาจออก
ครง และตงคาตวแปรใหเปนคาเรมตน
2. clear() เปนคาสงทใชลบภาพวาดของเตาออกจากหนาจอ แตตาแหนงของเตาและภาพวาดของเตาอน ๆ จะ
ไมไดรบผลกระทบ
3. write(arg, move, align, font) ใชเขยนขอความ เชน write("Python", True, align = "left", font = ("Arial",
8, "normal"))
- arg การแทนสตรงของอารกวเมนต เชน "Python"
- move หากเปน True ปากกาจะถกยายไปทมมลางขวาของขอความ โดยคาเรมตนยายเปน False
- align การจดตาแหนงขอความ ไดแก "left", "center" และ "right" เชน align = "left"
- font กาหนดรปแบบตวอกษร ไดแก fontname, fontsize, fonttype เชน font = ("Arial",
8, "normal")
1. hideturtle() / ht() คาสงในการซอนเตาไมใหมองเหนตวเตา เมออยในระหวางการทาภาพวาดทซบซอน
บางสวน เพราะการซอนเตาจะชวยใหการวาดภาพสามารถสงเกตไดงายขน
2. showturtle() / st() คาสงในการแสดงเตา
3. isvisible() สงกลบคา True ถาอยในสถานะแสดงตวเตา สงกลบคา False ถาอยในสถานะซอนตวเตา
4. shape() เปนการระบรปรางของตวเตา โดยระบรปรางเปนสตรงอยภายในวงเลบ ()
ไดแก "arrow", "turtle", "circle", "square", "triangle", "classic" ลงไป เชน shape("circle") หรอ
shape("square") หากตองการเปลยนกลบเปนรปลกศรใหใช shape("classic")
5. shapesize(กวาง, ยาว) / turtlesize(กวาง, ยาว) กาหนดขนาดรปราง
6. tilt(angle) หมนรปรางของเตาใหเอยงจากมมของรปรางเดมของเตา แตไมเปลยนทศทางของหวเตา
1. onclick() กาหนดเหตการณเมอมการคลกเมาสทตวเตา โดยมการสงคาพกด x, y ของจดทคลกบนตวเตา
เชน เมอคลกทตวเตาใหโปรแกรมเรยกฟงกชน rectangle
2. onrelease() กาหนดเหตการณเมอมการปลอยเมาสทตวเตา
เมอคลกเมาสทตวเตา เมอปลอยเมาส
3. ondrag() กาหนดเหตการณเมอมการคลกคางทตวเตาแลวลาก ตวอยางเชน คาสง ondrag(goto) เมอคลก
คางทเตาแลวลาก จะเปนการวาดเสนตามตาแหนงของเตาทเคลอนทไป
1. bgcolor() เปนคาสงกาหนดสภาพพนหลง (ชอสในภาษาองกฤษ) เชน bgcolor("orange")
2. clear() / clearscreen() ลบภาพวาดทงหมดและเตาทงหมดออกจากหนาจอ รเซตหนาจอใหมสถานะ
เรมตน คอ พนหลงสขาว
3. reset() / resetscreen() รเซตเตาทงหมดบนหนาจอใหอยในสถานะเรมตน
4. screensize() เปนคาสงกาหนดขนาดใหกบหนาตาง มหนวยเปนพกเซล เชน screensize(2000,1500)
5. title() เปนคาสงกาหนดหวขอ title ของหนาตาง เชน title("Rectangle")
6. mainloop() เปนคาสงลปคางหนาจอไวสาหรบรอวาดรปตอ
ตวอยางท 1
ตวอยางท 2
บทท 8 Python กบการเชอมตอฐานขอมล
ภาษา Python มชองทางในการเชอมโยงกบฐานขอมล 2 แบบ คอ
1. การเชอมโยงกบฐานขอมลผานไลบรารมาตรฐานประเภท DBM (Database Manager) เหมาะ
กบขอมลทไมมความซบซอนมาก เชน ขอมลมเพยง 1 ตาราง เปนตน
2. การเชอมโยงฐานขอมลผานไลบรารมาตรฐาน DB-API 2.0 เหมาะกบฐานขอมลประเภท
RDBMS (Relational Database Management System) เชน Oracle, MySQL หรอ MS SQL Server เปนตน
โครงสรางฐานขอมล
1. ตาราง (Table) ส าหรบจดเกบกลมขอมล เชน ตารางลกคา ภายในตารางจะเปนขอมลของลกคา
ทงหมด ตารางสนคา จะเกบกลมรายละเอยดสนคาแตละรายการไวในตารางสนคาเทานน
2. เรคอรด (Record) บางครงเรยกวา Row รายละเอยดขอมลแตละรายการ เชน เรคอรดของลกคา
คนท 1 มรายละเอยดดงน คอ รหส, ชอ, นามสกล, ทอย, เบอรโทร, อเมล หรอเรคอรดของสนคาชนท 1 จะมรายละเอยดดงน คอ รหสสนคา, ชอ, ยหอ, รน, หมายเลขเครอง, สสนคา เปนตน
3. ฟลด (Field) หรอบางครงเรยกวา คอลมน (Column) เปนองคประกอบของเรคอรด เชน เรคอรด
ของลกคาคนท 1 มการเกบรายละเอยด 6 รายการตอการบนทก 1 เรคอรด ภายในรายละเอยด 6 รายการดงกลาว ประกอบดวย รหส, ชอ, นามสกล, ทอย, เบอรโทร, อเมล ซงทกรายการยอยทยกตวอยางกคอ Field
ยอยภายในเรคอรดนนเอง
ทมาของภาพ : https://www.9experttraining.com
1. การเลอกใชฐานขอมลประเภท Flat File Database
เปนพนฐานการจดเกบขอมลเปนไฟล Text หรอ Binary เหมาะกบขอมลขนาดเลกจนถงขนาดกลาง ไฟลชนดนจะมความจทไมจ ากด ขนอยกบปรมาณของขอมลทจดเกบ เมอเทยบกบอก 2 ประเภท ไฟล
ฐานขอมลประเภทนจะมความจไฟลนอยทสด อกทงยงงายตอการสราง คาใชจายนอย สามารถใชงานรวมกบโปรแกรม Spreadsheet ได แตขอดอยคอความเรวในการเรยกใชงานขอมล ยงมขอมลมาก ความเรว
ในการคนหาหรอดงขอมลมาใชกจะท างานไดชา ส าหรบภาษา Python สามารถใชค าสงในการสราง อาน
เขยนคาขอมลทตองการจดเกบในไฟลฐานขอมลประเภทนได
ตวอยางท 1 โปรแกรมจะท าการสรางไฟล datatest.txt ขนมาหนา Desktop แลวใหรบคาการปอนชอ
สนคาและราคาสนคาในหนาตาง Python Shell ไปเรอยๆ จนกวาจะพมพ exit ในชองปอนชอสนคาและปอนราคาสนคา ขอมลชอสนคาและราคาสนคาจะถกจดเกบในไฟล datatest.txt โดยอตโนมต
- เขยนค าสง Python
- ปอนชอสนคาและราคาสนคาในหนาตาง Python Shell
- เปดไฟล datatest.txt บนหนา Desktop จะมขอมลดงน
จากตวอยาง ใหลองรนโปรแกรมอกครง เมอเราปอนขอมลชอสนคาและราคาสนคาใหมเขาไป
ขอมลใหมนจะไปทบขอมลเดม ท าใหขอมลเดมหายไป เพราะจากค าสงในบรรทดท 2 คอ fdata =
open('C:\\Users\OFFBKK\Desktop\datatest.txt', 'w') จะพบวาเมอใชอารกวเมนตตวอกษร 'w' จะท าใหขอมลใหมไปทบขอมลเดม หากตองการเพมขอมลเขาไป โดยไมใหขอมลเดมสญหาย ตองเปลยนจาก 'w' เปน 'a'
คาคงทส าหรบใชงานกบอารกวเมนต ลกษณะการท างานรวมกบค าสง open
a สรางไฟลหรอแกไขขอมลแบบเพมเตม w สรางไฟลหรอแกไขขอมลแบบทบซ า r อานขอมลในไฟลทก าลงเปดใชงาน
จากตวอยางท 1 ประกาศตวแปร lineno เพอใชเกบจ านวนครงในการปอนขอมล โดยมคาเรมตน
เทากบ 1 และจะเพมขนทละหนงเพอรบขอมลชอสนคาและราคาสนคาชดใหม โปรแกรมจะเชอมตอกบไฟล datatest.txt ดวยค าสง open และสนสดการเชอมตอดวยค าสง close ในการวนซ าเพอรบคาการปอนขอมล
ของสนคาแตละรอบจะใชค าสง while True ซงในแตละครงของการวนลปจะเขยนขอมลลงในไฟล datatest.txt ดวยค าสง write
ตวอยางท 2 เขยนโปรแกรมรวมค าสงเขยนไฟล และอานคาขอมลแบบ read, readline และ
readlines
เมอพมพ 1 จะท าตามค าสงฟงกชน writefile() จนกวาจะปอนค าวา exit กจะออกจากฟงกชน
เมอพมพ 2 จะท าตามค าสงฟงกชน readallfile()
เมอพมพ 3 จะท าตามค าสงฟงกชน readonelinefile()
เมอพมพ 4 จะท าตามค าสงฟงกชน readlineloopfile ()
2. ฐานขอมลประเภท File Server-Based Database
ภาษา Python มโมดลทมความสามารถในการจดสรางไฟลฐานขอมลแบบ RDBMS (Relational
Database Management System) ทมขนาดของไฟลเหมาะกบการจดเกบขอมลระดบเลกถงระดบกลาง ส าหรบโมดลของ Python ทใชดแลไฟลฐานขอมลน คอ SQLite3 ซงถกตดตงพรอมกบโปรแกรม Python
แลว โดยรองรบการใชค าสง select, insert, delete, update, create, drop, alter เปนตน
การใชงาน SQLite3 แบงออกเปนล าดบขนตอนดงน คอ
2.1 การอางองโมดลของ SQLite3
2.2 สรางไฟลฐานขอมล มรปแบบการเขยน ดงน
โดย cn เปนตวแปรของ Connect Object
sqlite3 เปนประเภทของฐานขอมลทใชงาน ในทนคอโมดล SQLite3 student เปนทอยของไฟลฐานขอมล ซงจะตอง path ทอยของไฟลใหถกตอง
2.3 การใช Cursor Object เมอเชอมตอกบฐานขอมลไดแลว ตอมาจะตองใช Cursor Object เพอ
เขาถงตารางและขอมลในตาราง โดยตองเขยนค าสง cur = cn.cursor() เพอเชอม Cursor เขากบ Cursor
Object
2.3.1 การใช Cursor Object กบการอานคาขอมลดวยค าสง Select ค าสงทใชในการอานคาขอมล
ตางๆ จากตาราง คอ ค าสง select โดยมรปแบบการเขยน ดงน คอ
รปแบบการใช select ส าหรบอานเฉพาะ Field ทระบ
รปแบบ : select ชอฟลดท 1, ชอฟลดท 2 from ชอตาราง
ตวอยาง : select id, name, lastname from student
รปแบบการใช select ส าหรบอานทกฟลดในตาราง
รปแบบ : select * from ชอตาราง
ตวอยาง : select * from student
รปแบบการใช select พรอมเงอนไขทตองการอานเรคอรด
รปแบบ : select * from ชอตาราง where เงอนไข
ตวอยาง : select * from student where age > 15
รปแบบการใช select รวมกบการเรยงขอมล (Sort)
รปแบบ : select * from ชอตาราง order by ชอฟลด
ตวอยาง (นอยไปมาก) : select * from student order by age
ตวอยาง (มากไปนอย) : select * from student order by age desc
รปแบบการใช select พรอมเงอนไขและการเรยงขอมล
รปแบบ : select * from ชอตาราง where เงอนไข order by ชอฟลด
ตวอยาง : select * from student where age > 15 order by age
รปแบบการใช select กบการเชอมระหวางตาราง รปแบบค าสง จะเขยนไดดงน
select ชอตารางท 1.ชอฟลด, ชอตารางท 2.ชอฟลด from ชอตารางท 1, ชอตารางท 2
where ชอตารางท 1.ชอฟลด (คยรองหรอ FK) = ชอตารางท 2.ชอฟลด (คยหลก หรอ PK)
ตวอยาง : select ORDER.OrderNo, ORDER.OrderDate, CUSTOMER.CustFirst,
CUSTOMER.CustLast, CUSTOMER.CustPhone
from ORDER, CUSTOMER
where ORDER.CustID = CUSTOMER. CustID
2.3.2 การใช Cursor Object กบการเพมขอมลใหมในตารางดวยค าสง Insert
รปแบบการเขยนค าสง insert ส าหรบเพมขอมลใหม
รปแบบการใชค าสง insert ส าหรบเพมขอมลลงทกฟลดของตาราง
รปแบบ : insert into ชอตาราง values (คาขอมลท 1, คาขอมลท 2, ..., คาขอมลท n)
ตวอยาง : insert into student values (1,'Sawittree', 'Taweekarn', 13, 'M.2/5')
รปแบบการใชค าสง insert ส าหรบเพมขอมลบางฟลดของตาราง
รปแบบ : insert into ชอตาราง(ชอฟลดท 1, ชอฟลดท 2)values(คาขอมลท 1, คาขอมลท 2)
ตวอยาง : insert into student (id, name, lastname) values (2,'Tawee', 'Meesuk')
2.3.3 การใช Cursor Object กบการแกไขขอมลในตารางดวยค าสง Update
รปแบบการเขยนค าสง update ส าหรบแกไขขอมลในตาราง
รปแบบการใชค าสง update ส าหรบแกไขขอมลในฟลดทระบทกเรคอรดในตาราง
รปแบบ : update ชอตาราง set ชอฟลดท 1 = คาขอมล, ชอฟลดท 2 = คาขอมล
ตวอยาง : update student set age = age + 1
จากตวอยางจะเปนการเพมอายนกเรยนทกคนในตาราง โดยเพมขนคนละ 1 ป
รปแบบการใชค าสง update โดยใชรวมกบค าสง where เพอแกไขขอมลบางเรคอรด
รปแบบ : update ช อตาราง set ช อ ฟลดท 1 = ค าขอ มล , ชอ ฟลดท 2 = ค าขอ มล
Where ชอฟลด 1 = คาขอมล
ตวอยาง : update student set classroom = 'M.3/2' age = 14 where id = 1
2.3.4 การใช Cursor Object กบการลบเรคอรดขอมลจากตารางดวยค าสง Delete
รปแบบการใชค าสง delete ส าหรบลบเรคอรดทงหมดในตาราง
รปแบบ : delete from ชอตาราง
ตวอยาง : delete from student
รปแบบการใชค าสง delete รวมกบค าสง where ส าหรบลบบางเรคอรดในตาราง
รปแบบ : delete from ชอตาราง where ชอฟลด = คาขอมล
ตวอยาง : delete from student where id = 1
2.4 การสรางตารางและความสมพนธของตาราง (Relationship)
การสรางตารางในไฟลฐานขอมล ม 2 วธ คอ การเขยนโคดค าสงสรางตาราง และการใชโปรแกรมส า เรจรปสรางตาราง โดยใหท าการดาวนโหลดโปรแกรม DB Browser for SQLite จากเวบไซต
https://sqlitebrowser.org/ และท าการตดตงโปรแกรมเพอใชจดการฐานขอมล ดงน
รปแบบการเขยนค าสง create เพอสรางตาราง :
create table ชอตาราง (
ชอฟลดท 1 ชนดขอมล, ชอฟลดท 2 ชนดขอมล,
ชอฟลดสดทาย ชนดขอมล)
ตวอยาง :
เปดโปรแกรม DB Browser for SQLite ขนมา แลวคลกทป ม open Database เปดไฟลฐานขอมล
product.db ทสรางไวขนมา เพอดตารางทสรางขนจากการเขยนโคดค าสง
รปแบบการเขยนค าสง create เพอสรางตาราง โดยระบ Primary Key:
create table ชอตาราง (
ชอฟลดท 1 ชนดขอมล, ชอฟลดท 2 ชนดขอมล,
ชอฟลดสดทาย ชนดขอมล,
constraint[] primary key (ชอฟลดทเปนคยหลก PK))
ตวอยาง :
เปดโปรแกรม DB Browser for SQLite ขนมา แลวคลกทป ม open Database เปดไฟลฐานขอมล
student.db ทสรางไวขนมา เพอดตารางทสรางขนจากการเขยนโคดค าสง
รปแบบการเขยนค าสง create เพอสรางตารางทมความสมพนธ (Relationship) กบตารางอน :
create table ชอตาราง (
ชอฟลดท 1 ชนดขอมล,
ชอฟลดท 2 ชนดขอมล, ชอฟลดท 3 ชนดขอมล, constraint [ชอฟลดทเปน Foreign Key] references
ชอตารางทอางอง Primary Key(ฟลดทเปน Primary Key)
on update cascade
on delete cascade
)
ตวอยาง :
เมอรนโปรแกรม จะไดตาราง 2 ตาราง คอ product และ productgroup ดงรป
2.5 เพมเรคอรดขอมลลงในตาราง ดวยค าสง insert ของ SQL Statement
รปแบบการใชค าสง insert เพมเรคอรดในตาราง
insert into ชอตาราง values (คาขอมล, คาขอมล, คาขอมล)
ตวอยาง :
จากตวอยาง มการสรางฟงกชน productinput() ขนมาเพอรบคาขอมลใสในตาราง product (สราง
เอาไวกอนแลวในขนตอนการสรางตาราง) โดยรบคาขอมลทางคยบอรดดวยค าสง input() แลวบนทกไวในตวแปร a, b, c, d, e ตามล าดบ (ตามจ านวนฟลดในตาราง) หลงจากนนใชค าสง cur.execute("insert into
product values(?,?,?,?,?)",(a,b,c,d,e)) โดยใชเครองหมาย ? อางองคาขอมลของตวแปรทจะน าไปใสในแตละ
ฟลดของตาราง product
เมอรนโปรแกรม จะเขาสหนาจอ Python Shell ใหเราท าการกรอกขอมล ดงรป
เมอเปดโปรแกรม DB Browser for SQLite กจะไดเรคอรดขอมลในตาราง ดงรป
2.6 อานคาขอมลจากตารางดวยค าสง select มหลายรปแบบ ดงน
รปแบบท 1 การอานเรคอรดระหวางค าสง cursor กบตวแปร Python แบบสงผานคาขอมลไปยงตว
แปรโดยตรง
รปแบบ : cur.execute("select * from ชอตาราง")
ชอตวแปร = cur.fetchall() print(ชอตวแปร)
ตวอยาง :
ผลลพธ :
เมอใชค าสง fetchall ขอมลจะออกมาเปนชนด List โดยสามารถอานคาขอมลบางฟลดของบางเร
คอรดได โดยการอางหมายเลขล าดบของตวแปร List เชน เมอใชค าสง showgroup = cur.fetchall() ผลลพธทไดคอ [('01', 'computer'), ('02', 'stationery'), ('03',
'clothes')] โดยสามารถระบขอมลบางสวนของเรคอรดได ดงนคอ
- showgroup[0] คอ เรคอรดท 1 ในทนคอ ('01', 'computer') ถาระบต าแหนง showgroup[0][0] คอ ฟลดแรกของเรคอรดแรก คอ '01' สวน showgroup[0][1] คอ ฟลดท 2 ของเรคอรดท 1 คอ ' computer '
- showgroup[1] คอ เรคอรดท 2 ในทนคอ ('02', 'stationery') ถาระบต าแหนง showgroup[1][0] คอ ฟลดแรกของเรคอรดท 2 คอ '02' สวน showgroup[1][1] คอ ฟลดท 2 ของเรคอรดท 2 คอ 'stationery'
- showgroup[2] คอ เรคอรดท 3 ในทนคอ ('03', 'clothes') ถาระบต าแหนง showgroup[2][0] คอ
ฟลดแรกของเรคอรดท 3 คอ '03' สวน showgroup[2][1] คอ ฟลดท 2 ของเรคอรดท 3 คอ 'clothes'
ดงนนถาเราตองการเรยกดขอมลบางสวนของเรคอรด กใหระบต าแหนงไปเลย เชน
ผลลพธทไดคอ
รปแบบท 2 การใชค าสง for รวมกบค าสง Cursor Object ส าหรบอานคาขอมลในตาราง
รปแบบ : cur.execute("select * from ชอตาราง")
for ชอตวแปร in cur.fetchall()
print(ชอตวแปร)
ตวอยาง :
ผลลพธ :
ถาตองการอานคาขอมลบางฟลดของเรคอรด ใหระบค าสงเปน print(a[0]) แสดงคาขอมลในฟลด
แรก print(a[1]) แสดงคาขอมลในฟลดท 2 ไปเรอยๆ ตามล าดบ ตวอยางเชน
รปแบบท 3 การใชค าสง select อานคาขอมลตารางมากกวา 1 ตารางทมความสมพนธกน
ตวอยางเชน :
ผลลพธทได คอ จะแสดงขอมลในฟลด pid, title, price ของตาราง product และฟลด title ของตาราง
productgroup โดยเรยงล าดบขอมลตามทเราก าหนด ซงสามารถแสดงขอมลจาก 2 ตารางได เพราะมฟลดท
สมพนธกนคอ ฟลด groupid นนเอง
2.7 แกไขคาขอมลเดมในตารางดวยค าสง update
รปแบบ : update ชอตาราง set ชอฟลด = คาขอมลใหม where ชอฟลด = คาขอมล
เชน : update product set title = 'computer' where pid = '01'
ตวอยาง :
ผลลพธทได คอ
2.8 ลบคาขอมลในตารางดวยค าสง delete
รปแบบ : delete from ชอตาราง where ชอฟลด = คาขอมล
เชน : delete from product where pid = '01'
ตวอยาง
ผลลพธทได
2.9 ปดการเชอมตอฐานขอมล
การปดการเชอมตอไฟลฐานขอมล มรปแบบการเขยนค าสง ดงนคอ
cn.close()
มกใชค าสงนกอนสนสดการใชงานของโปรแกรม เพอไมใหกระบวนการท างาน Engine ดานฐานขอมลตกคางในระบบปฏบตการ เมอยตการใชโปรแกรมไปแลว
3. ฐานขอมลประเภท Database Server
3.1 ดาวนโหลดและตดตง Appserv เพอใชงาน localhost โดยมขนตอนดงน
3.1.1 ดาวนโหลด appserv จากเวบไซต https://www.appserv.org/th/ ดงรป
จะไดไฟลตดตง Appserv ชอวา appserv-win32-8.6.0.exe ใหดบเบลคลกทไฟลเพอท าการตดตง
โปรแกรม
3.1.2 ตดตงโปรแกรม appserv โดยท าตามขนตอนตอไปน
3.1.3 เปดบราวเซอร Internet Explorer หรอ Google Chrome ขนมา แลวเขาสหนาแรกของ Appserv
โดยพมพค าวา http://127.0.0.1:81 แลวคลกท phpMyAdmin Database Manager Version 4.6.6 ดงรป
3.1.4 กรอก Username และ Password ทไดก าหนดไวในขนตอนการตดตง แลวคลกป ม Go
3.1.5 สรางฐานขอมล หรอ Database โดยคลกท New
ใสชอ database และภาษา ซงทนจะเลอกเปน utf8_unicode_ci เพอใหรองรบขอมลภาษาไทย แลวกดป ม Create
3.2 ดาวนโหลดโมดลพเศษ MySQLdb
3.2.1 ท าการตดตงโมดลพเศษทชอวา MySQLdb เพอเชอมตอฐานขอมล MySQL กบภาษา Python
จากเวบไซต https://pypi.org/project/mysqlclient/#files โดยเลอกไฟลทชอวา “mysqlclient-1.3.12-cp36-cp36m-win32.whl” ดงรป
3.2.2 เมอท าการดาวนโหลดไฟลเรยบรอยแลว ไฟลตดตงจะอยในโฟลเดอร Downloads ของเครองคอมพวเตอร ใหท าตามขนตอนดงตอไปน
1) คดลอกต าแหนงทอยของไฟลทเพงดาวนโหลดมา
2) เปดโปรแกรม Command Prompt ขนมา แลวพมพวา cd ตามดวยต าแหนงไฟลท เราคดลอกมา ในทนจะเปน cd C:\Users\OFFBKK\Downloads ดงรป
แลวกดป ม Enter จะไดผลลพธดงรป
3) หลงจากนนใหพมพค าสง pip install ตามดวยชอไฟล (โดยคดลอกชอไฟล ดงรป) ในทน
ไฟลทดาวนโหลดมาชอวา mysqlclient-1.3.12-cp36-cp36m-win32.whl
จงตองพมพวา pip install mysqlclient-1.3.12-cp36-cp36m-win32.whl แลวกด Enter เพอท าการตดตง เมอตดตงเรยบรอยแลว จะมขอความวา Successfully
3.2.3 เปดโปรแกรม Python ขนมา หลงจากนนใหลองพมพค าสง import MySQLdb ถาไมม Error
แสดงวาไดท าการตดตงโมดล MySQLdb เรยบรอยแลว
3.3 การเขยนโปรแกรมส าหรบเชอมตอฐานขอมล MySQL ดวยโมดล MySQLdb
3.3.1 เรยกใชโมดล MySQLdb โดยใชค าสง
import MySQLdb
3.3.2 ใช Connect Object เชอมตอกบฐานขอมล MySQL โดยจะตองระบชอผใชและรหสผาน โดย
มรปแบบการเขยนดงน คอ
cn = MySQLdb.connect(host = "ชอ host", user = "ชอผใช", passwd = "รหสผาน", db = "ชอฐานขอมล")
cur = cn.cursor()
ตวอยางเชน
3.3.3 เขยนโปรแกรมส าหรบเชอมตอฐานขอมล MySQL
การเขยนโปรแกรมส าหรบเชอมตอฐานขอมล MySQL ดวยโมดล MySQLdb จะมลกษณะเหมอนกบการใชโมดล SQLite ในหวขอทผานมา โดยมค าสงในการจดการฐานขอมล เชน การสรางตาราง
ดวยค าสง create, การเพมเรคอรดขอมลใหมดวยค าสง insert, การเรยกดขอมลดวยค าสง select, การแกไขเร
คอรดขอมลดวยค าสง update, การลบเรคอรดขอมลดวยค าสง delete เปนตน
1) การสรางตารางดวยค าสง create
2) การเพมเรคอรดขอมลใหมดวยค าสง insert
ผลลพธทได
หมายเหต : %s ใชส าหรบตวแปรชนด integer สวน '%s' ใชส าหรบตวแปรชนด string
3) การเรยกดขอมลดวยค าสง select
ผลลพธทได
4) การแกไขเรคอรดขอมลดวยค าสง update
ผลลพธทได
ลกษณะการท างานของโปรแกรม
รบคารหสนกเรยนทางคยบอรดดวยค าสง input() และแปลงคาเปน integer เพราะจะตองน าคาตวแปร student_id ไปเปรยบเทยบกบฟลด id (row[0]) ของตาราง ซงเปนชนด integer หลงจากนนใชค าสง
cur.execute("select * from student") เพอเรยกดขอมลทงหมดในตาราง วนลปค าสง for row in cur.fetchall()
เพอดขอมลทละเรคอรด ในระหวางการวนลปใหท าการตรวจสอบเงอนไขวา รหสนกเรยนทกรอกเขามาตรงกบฟลด id ในตารางหรอไม (student_id == row[0]) ถาตรงกนใหแสดงเรคอรดนนมาทางหนาจอดวยค าสง
print(row) จากนนใหกรอกคาเดมทตองการแกไข แลวน าคามาเปรยบเทยบวาตรงกบฟลดใด เชน ถาตรงกบฟลด id กใหท าการแทนทขอมลของฟลด id ดวยค าสง cur.execute("update student set id = %s where id =
%s",(newdata, row[0])) โดย %s ตวแรกคอตวแปร newdata กคอขอมลใหมทตองใสเขาไป สวน %s ตวท
สองคอ row[0] เปนการระบต าแหนงของเรคอรดทตองการแกไข
5) การลบเรคอรดขอมลดวยค าสง delete
ผลลพธทได
ลกษณะการท างานของโปรแกรม
รบคารหสนกเรยนทางคยบอรดดวยค าสง input() และแปลงคาเปน integer เพราะจะตองน าคาตวแปร student_id ไปเปรยบเทยบกบฟลด id (row[0]) ของตาราง ซงเปนชนด integer หลงจากนนใชค าสง
cur.execute("select * from student") เพอเรยกดขอมลทงหมดในตาราง วนลปค าสง for row in cur.fetchall() เพอดขอมลทละเรคอรด ในระหวางการวนลปใหท าการตรวจสอบเงอนไขวา รหสนกเรยนทกรอกเขามาตรง
กบฟลด id ในตารางหรอไม (student_id == row[0]) ถาตรงกนใหแสดงเรคอรดนนมาทางหนาจอดวยค าสง
print(row) จากนนใหท าการยนยนการลบ ถามการพมพ y หรอ Y ทางคยบอรดใหท าการลบเรคอรดนนดวยค าสง cur.execute("delete from student where id = %s", (row[0],))
บทท 9 พนฐานการใชโมดล tkinter ส าหรบ Graphical User Interface (GUI)
รปแบบการเขยนค าสงภาษาไพธอนม 2 รปแบบ คอ แบบปอนค าสงทละบรรทด (Command line
interface และแบบกราฟก คอ การตดตอสอสารกบระบบคอมพวเตอรโดยอาศยอนเตอรเฟสแบบกราฟก ซง
ประกอบไปดวยเมน รปภาพ ไอคอน โดยการใชเมาสคลกเพอสงงาน ซงในบทนจะอธบายการสรางอนเตอรเฟสแบบกราฟกดวยภาษาไพธอนเปนหลก
ไพธอนไดรบการสนบสนนโมดลส าหรบพฒนา GUI (Graphic User Interface) ไวมากมาย เชน
tkinter, wxPython, JPython, wxWidgets, Qt, Gtk+, FLTK, FOX และ OpenGL เปนตน ซงมรายละเอยดเฉพาะโมดลทส าคญๆ ดงนคอ
1. Tkinter เปนโมดลทพฒนามาจาก Tk GUI Toolkit ซงทางานอยบนระบบปฏบตการยนกซมา
กอน ไพธอนไดเลอกโมดลนในการพฒนากราฟกบนไพธอนเปนหลก
2. wxPython เปนโมดลทถกพฒนาขนเพอใหทางานอยบนระบบปฏบตการวนโดวสเปนหลก และ
เปนลขสทธแบบ Open source
3. JPython เปนโมดลทพฒนาขนเพอใหไพธอนสามารถท างานรวมกบกราฟกของภาษาจาวาได
1. แนวความคดในการออกแบบ GUI
กอนการพฒนา GUI ดวยไพธอน จะตองออกแบบหนาตาของ GUI เสยกอน โดยการสเกตชภาพบน
กระดาษ หรอออกแบบดวยโปรแกรมส าหรบสรางงานกราฟกดวยคอมพวเตอรอยางคราวๆ เสยกอน ดงรป
รปท 9.1 การสเกตช GUI อยางคราวๆ บนกระดาษ
ยกตวอยางการเขยนโปรแกรมแปลงคาหนวยวดระยะทางจากฟต (feet) เปนเมตร (meters)
รปท 9.2 แสดงภาพสเกตชของโปรแกรมแปลงจาก feet เปน meters
จากรปท 9.2 ผใชจะปอนตวเลขจ านวนจรงในชอง Feet เมอกดป ม calculate โปรแกรมจะท าการแปลงคาจ านวนจรงทปอนใหกบโปรแกรมเปนเมตรและแสดงใน meters ขนตอนตอไปใหผเขยนโปรแกรม
ท าการวาดเสนกรดเพอใชก าหนดขอบเขตส าหรบจดวางต าแหนง (Layout) ของออปเจกตตางๆ ในโปรแกรม จากตวอยางดานบน จะท าการก าหนดเสนกรดเปน 3 แถว 3 คอลมนดงรปท 9.3
รปท 9.3 แสดงการวาดเสนกรด 3 x 3 ลงบนภาพสเกตช
2. การสราง GUI ดวย Tk
กอนการสรางกราฟกจาก Tk หรอ Tkinter ผเขยนโปรแกรมจ าเปนตองเขาใจถงแนวความคดและหลกการท างานของ Tk เสยกอน เพอเปนพนฐานในการสราง GUI ทสมบรณตอไป Tk ประกอบไปดวย 3
สวนทส าคญคอ widgets, geometry management และ event handling ซงมรายละเอยดดงน
2.1 Widgets คอสงตางๆ (หรอเรยกวา ออปเจกต) ทปรากฏอยบนจอภาพ เชน Button, Label, Frame,
checkbox, tree views, scrollbars, text areas เปนตน ดงรปท 9.4
รปท 9.4 แสดงตวอยาง Widgets บนระบบปฏบตการตางๆ
Widgets ตางๆ เหลานถกออกแบบใหมลกษณะการท างานแบบล าดบชน นน คอ การสราง GUI ใดๆ ใหปรากฏบนจอภาพ จะเรมตนสรางจากล าดบชน ทเรยกวา root window (root) ขนเสยกอน ดงรปท
9.5 ล าดบชนท 2 จงสรางเฟรม (Content frame) หรอผนผา (Canvas) เพอบรรจ widgets ตางๆ ลงบน root
window ในล าดบชนท 3 เปนการเพม Widgets ตางๆ ทไดออกแบบไวบนกระดาษลงบนเฟรมหรอ Canvas ทไดจดเตรยมไว ส าหรบการควบคมการท างานของWidgets จะเปนแบบล าดบชนเชนเดยวกน
รปท 9.5 แสดงล าดบของการสราง GUI ดวย Tk
จากรปท 9.5 แสดงล าดบชนการสราง GUI ของโปรแกรมแปลงหนวยวดระยะทางจากฟตเปนเมตร
โดยเรมตนจากการสรางหนาตางหลก (Root) ขนกอนเสมอ เพอรองรบ Widgets ทท าหนาทตางๆ กน โดย Widgets จะถกสรางขนลงบนเฟรม (Content frame) อกท ซงเฟรมดงกลาวเปรยบเสมอนหนากระดาษบน
คอมพวเตอรนนเอง
2. การเรยกใชงาน Widgets โดย Widgets ในภาษาไพธอนถกเขยนขนดวยโปรแกรมเชงวตถ ดงนน
ทกๆ Widget ทสรางขนจะถกเรยกวา ออปเจกต (Object) หรอวตถ เมอท าการสรางอนสแตนซของ Widget
ใดๆ ขนจะตองสงพารามเตอรใหกบคลาสแมตามล าดบชนตามทกลาวมาแลว ยกเวน Root ซงเปนคลาสแมทอยในต าแหนงบนสด (Top level window) ของล าดบชน คลาสลกทกๆ คลาสจะถกสรางภายใน root เทานน
จากตวอยางตอไปนเปนตวอยางการสราง Root, Content frame และ Widgets
Widget แตละประเภทมหนาทการท างานทตางกน ดงนนเมอสราง Widget ขนมาแลวจ าเปนท
จะตองการท าการปรบแตงคณสมบตของ Widgets (Configuration option) แตละตวใหเหมาะสมกบงานทจะ
ท า ตวอยางเชน Label และ Button สามารถก าหนดขอความทแสดงผลดวยออฟชน text = "Textname" ในขณะท scrollbar ไมจ าเปนตองใชออฟชนดงกลาว และถามการกดป ม Button จะตองเรยกใชฟงกชนหรอ
เมธอดทเหมาะกบงานดงกลาวโดยใชค าสง command แตส าหรบ Label ไมจ าเปนตองใชค าสง command ในการท างาน เปนตน
Configuration option จะถกก าหนดในขณะทท าการสราง Widget โดยการสงเปนพารามเตอรท
เหมาะสมใหกบแตละ Widget ทจะถกสรางขน ตวอยางเชน เมอตองการสรางป ม Button โดยป มดงกลาวประกอบดวยชอของป ม และเหตการณทเกดขนหลงจากมการกดป มดงกลาว ดงน
1. น าเขาโมดล tkinter
2. สรางป ม Button โดยสงพารามเตอรให 2 คา คอ ขอความทแสดงบนป ม (text = "Hello") และ
วธการตอบสนองเมอป มดงกลาวถกกด (command = "buttonpressed") พรอมกบก าหนดคากรด
ผลลพธทได คอ
3. ทดสอบเปลยนขอความทแสดงบนป มจาก "Hello" เปน "Goodbye"
หรอใชเมธอด configure() เพอเปลยนขอความบนป มแทนกได
ผลลพธทได คอ
3. การจดการรปทรงเรขาคณตใหกบ Widgets (Geometry management) จากทกลาวมาแลวขางตนวาการวาง Widgets ลงบนเฟรมนน จะตองก าหนดต าแหนงในการวาง โดยอาศยศาสตรทางดานเรขาคณตเขาชวย เพอให Widgets ทจะวางอยในต าแหนงทเหมาะสม ซงไพธอนม 3 เมธอดในการจดการเกยวกบ
เรขาคณตของ Widgets ประกอบไปดวยเมธอด pack(), grid() และ place() ซงจะกลาวในหวขอการจดวาง Widgets ดวยเรขาคณต
ส าหรบปญหาการวาง Widgets ทเกดขนเสมอ คอ การปรบขนาดของเฟรมหรอ Widgets จะสงผล
กระทบซงกนและกน เชน ถาผใชงานยอหรอขยายขนาดของหนาตางหลก จะสงผลใหกระทบกบออปเจกตตางๆ ทอยภายในหนาตางหลกนนๆ ทนท ซงอาจจะท าใหป ม ตวอกษร ลาเบล เกดความผดเพยนไปจากเดม
ปญหาตางๆ เหลานจะถกจดการดวย Geometry management ทอยใน Tk โดยใชเทคนคทเรยกวา Master and
Slave โดย Master คอออปเจกตทท าหนาทรองรบ Widgets ตางๆ ทจะท างาน เชน root หรอ content frame ส าหรบ Slave คอ Widgets ตางๆ ทวาดหรอวางลงบน Master นนเอง
ส าหรบการท างานของ Geometry management นนจะใชวธสอบถามไปยง Widgets ตางๆ ทก าลงจะท างานวาแตละ Widgets ตองการพนทๆ ใชส าหรบการท างานมากนอยเพยงใด จากน น Geometry
management จะค านวณพนททงหมดในภาพรวม เพอจดวาง Widgets เหลานนในต าแหนงทเหมาะสมตอไป
จากตวอยาง เมอผใชตองการเพม Widget อนใดอนหนงลงบนเฟรมจะเรยกใชเมธอด grid() และตามดวยพารามเตอรคอลมน (Column) และแถว (Low) ในการก าหนดต าแหนงการวาง พรอมกบพารามเตอร
"sticky" เพอบอกวาใหวาง Widget ตามขนาดจรงทปรากฏ เชน ความกวางและยาวของป มจะมขนาดตาม
ฟอนตทปรากฏบนป ม เปนตน หรออาจจะใชเมธอด columnconfigure() หรอ rowconfigure() เพอปรบขนาดของ Widget ตามทผใชงานตองการกได
4. การจดการกบเหตการณตางๆ (Event Handling) Event handling คอ เหตการณตางๆ ทผใชงาน
กระท ากบ Widgets ใดๆ บน GUI เชน การกดป ม การกดป มใดๆ บนแปนพมพ การเคลอนเมาส การปรบ
ขนาดของหนาตางวนโดวส เปนตน ซงเหตการณตาง ๆ เหลานจะถกจดการโดย Tk ซงเรยกวา event loop
โดยจะท างานรวมกบระบบปฏบตการโดยตรง เชน เมอเคลอนเมาสไปยงป มจะสงผลใหป มดงกลาวจะเปลยนส และเมอเคลอนเมาสออกจากป มจะท าใหสของป มกลบไปเปนสเดม เปนตน
5. การตอบสนองตอเหตการณทเกดขน (Command Callbacks) มหลาย Widgets จ าเปนตองกระท า
อยางใดอยางหนงเมอมการคลกหรอกระท ากบ Widgets เหลานน เชน เมอกดป ม Save as… จะสงผลใหมการเปดหนาตางวนโดวส เพอใหผใชเลอกไดเรคทอรทตองการบนทกผลลงฮารดดสก เปนตน ในไพธอนจะ
ใชค าสง "command" หรอเรยกวา "Callbacks" ในการตอบสนองตอเหตการณตางๆ ทเกดขนกบ Widgets โดยมรปแบบค าสงคอ
command = functionName
ตวอยางเชน เมอคลกป ม Hello แลวไปยงฟงกชน helloCallBack เพอพมพค าวา Hello World!
ผลลพธทได คอ
6. การผกเหตการณตางๆ เขากบไพธอน Widgets มค าสง "command" ซงมาพรอมกบขณะทมการ
สราง Widget อยแลว เพอผกเหตการณตางๆ เขากบการกระท าอยางใดอยางหนงในโปรแกรม แตผใช
สามารถเรยกใชค าสง bind เพอเปนทางเลอกในการดกจบเหตการณตางๆ เหมอนกบการใชค าสง command ไดเชนเดยวกน ดงตวอยางตอไปนจะแสดงการจดการกบ Widget ชนด Label ดวยค าสง bind ดงน
ผลลพธทไดเมอสงรนโปรแกรม คอ
เรมโปรแกรม เคลอนเมาสไปใน
วนโดวส เคลอนเมาสออก
จากวนโดวส ดบเบลคลกเมาส
ในวนโดวส คลกขวาและลาก
เมาส
จากภาพดานบนแสดงการท างานของโปรแกรม โดยเรมจากบรรทดท 2 โปรแกรมท าการสราง
หนาตางหลก (root) โดยเรยกคลาส Tk() ขนมาท างาน จากนนบรรทดท 3 โปรแกรมท าการสราง Label ลงบนหนาตางหลก โดยมพารามเตอร 2 ตวคอ หนาตางหลกทจะเพม Label ลงไป ในทนคอ root และขอความ
ทจะใหปรากฏบน Label คอ text="Starting..." บรรทดท 4 โปรแกรมเรยกใชเมธอดกรด (เมอไมก าหนด
คอลมนและแถวจะมคาเปน 1 คอลมน และ 1 แถว) บรรทดท 6 ท าการผกเหตการณเมอผใชมการกระท า ใดๆ บน Label ดงกลาวดวยค าสง bind โดยจะท างานกตอเมอผใชเคลอนเมาสเขาไปในวนโดวส โดยจะ
พมพขอความวา "Move mouse inside" บรรทดท 6, 7, 8 และ 9 จะท างานกตอเมอผใชเคลอนเมาสออกจาก
วนโดวส คลกเมาสซาย ดบเบลคลก และการคลกพรอมกบลากเมาสตามล าดบ ผลลพธแสดงดงรปดานบน สวนบรรทดท 10 โปรแกรมจะท าการวนลปเพอรอรบเหตการณตางๆ ของผใชงานไปเรอยๆ จนกวาจะปด
โปรแกรม
7. สรปขนตอนการสราง GUI ดวย tkinter มขนตอนดงน
1. น าเขาโมดล Tkinter ดวยค าสง from tkinter import *
2. สรางหนาตาง GUI หลก ดวยค าสง root = Tk()
3. เพมWidgets หรอออปเจกตลงในหนาตางหลก เชน Button, Canvas หรอ Label เปนตน
4. เขยนโปรแกรมส าหรบตรวจสอบเหตการณตางๆ (Events) ทเกดขนจากผใชงานกระท า
กบออปเจกตใดๆ เชน การคลก การลาก การปลอย เปนตน
5. สงใหโปรแกรมวนลปรบค าสงจากผใชงานไปเรอยๆ จนกวาจะปดโปรแกรม ดวยค าสง
root.mainloop()
- ล าดบการสรางหนาตาง GUI ดวย Tk
- แสดงหนาตางหลก (root window)
3. การจดวาง Widgets ดวยเรขาคณต (Geometry management)
ทกๆ Widgets จะตองอาศยเรขาคณตชวยในการจดวาง (Geometry management) ซงไพธอนไดจดเตรยมไว 3 เมธอดคอ pack(), grid() และ place() ดงน
3.1 เมธอด pack() ท าหนาทจดวาง Widgets ใหอยในกลม (block) กอนวางลงใน Widget แม ซงม
รปแบบค าสงดงน
widget.pack( pack_options )
pack_options ม 3 รปแบบคอ expand, fill และ side
1) expand เมอก าหนดใหเปน True หรอ YES โปรแกรมจะขยายขนาด Widget โดยการเพมชองวาง
เขาไปแทน และอยตรงกลางหนาตางหลก เชน widget.pack(expand = True)
2) fill ก าหนดใหขยายขนาดของ Widget ตามขนาดจรงทนอยทสด หรอสามารถก าหนดเปน Y
(vertically : ขยายทางแนวตง) หรอก าหนดเปน X (horizontally : ขยายทางแนวนอน) หรอทงคกได แตคาด
ฟอลต (default) เปน NONE เชน fill = X, fill = Y หรอ fill = BOTH ตวอยางเชน widget.pack(fill = BOTH)
3) side ก าหนดต าแหนงในการวาง Widget คอ TOP (ดฟอลต) ดานบน, BOTTOM ดานลาง, LEFT
ดานซาย และ RIGHT ดานขวา เชน side = BOTTOM เชน widget.pack(side = BOTTOM)
ตวอยางการใชงานเมธอด pack() ดงน
ผลลพธทได คอ
จากตวอยางโปรแกรม แสดงการใชเมธอด pack() ในการจดวาง Widgets โดยโปรแกรมสรางเฟรม
(บรรทดท 4) ดวยเมธอด Frame(root) ออปเจกตทสรางขนจะเกบไวในตวแปรชอ frame จากนนบรรทดท 5
โปรแกรมเรยกเมธอด pack() โดยไมมพารามเตอร ซงสงผลใหเฟรมดงกลาวจะวางอยในต าแหนงบนสดของหนาตางหลก (root window) บรรทดท 6 – 11 โปรแกรมสรางป มสแดง น าเงน และน าตาลลงบนเฟรม
ดงกลาว
บรรทดท 13 และ 14 โปรแกรมสรางเฟรมชอ bottomframe โดยวางอยในต าแหนงดานลางของหนาตางหลก บรรทดท 15 และ 16 โปรแกรมสรางป มสด า และวางลงในเฟรมชอ bottomframe
2. เมธอด grid() ท าหนาทจดวาง Widgets ลงในหนาตางหลก (root window) โดยอยในรปแบบของ
ตาราง ซงมรปแบบค าสง ดงน
widget.grid( grid_options )
grid_options มรปแบบ ดงนคอ
1. column ต าแหนงคอลมนทตองการวาง Widget คาดฟอลตคอ 0 (คอลมนซายสด)
2. columnspan จ านวนคอลมนทตองการใช คาดฟอลตคอ 1 บรรทด
3. ipadx, ipady ขนาดภายในขอบของ Widget ในแนวตงและแนวนอน มหนวยเปนพกเซล
4. padx, pady ขนาดภายนอกขอบของ Widget ในแนวตงและแนวนอน มหนวยเปนพกเซล
5. row ต าแหนงแถวทตองการวาง Widget
6. rowspan จ านวนแถวทตองการใช คาดฟอลตคอ 1 คอลมน
7. sticky ใชเมอตองการวาง Widget ในต าแหนงทตองการ โดยคาดฟอลตจะอยตรงกลาง แต
สามารถก าหนดต าแหนงดวยการบอกทศทาง โดยใชอกษรตางๆ ดงน N (ทศเหนอ), E (ตะวนออก), S (ใต),
W (ตะวนตก), NE (ทศตะวนออกเฉยงเหนอ), NW (ทศตะวนตกเฉยงเหนอ), SE (ทศตะวนออกเฉยงใต)
และ SW (ทศตะวนตกเฉยงใต) เปนตน
ตวอยางการใชงานเมธอด grid() ดงน
ผลลพธทไดเมอสงรนโปรแกรมดงรป
จากตวอยางโปรแกรม แสดงการใชเมธอด grid() ในการจดวาง Widgets โดยบรรทดท 5 โปรแกรมสรางเลเบลทท าการพมพต าแหนงแถวและคอลมนลงบนหนาตางหลก โดยใชเมธอด grid() ในการก าหนด
ต าแหนงของเลเบล ผลลพธทไดแสดงดงรปดานบน
3. เมธอด place() ท าหนาทจดวาง Widgets ลงในหนาตางหลก (root window) โดยการระบต าแหนง
ซงมรปแบบค าสง ดงน
widget.place( place_options )
place_options มรปแบบดงน คอ
1. anchor ก าหนดต าแหนงการวาง Widget โดยอาศยทศ เชน N (ทศเหนอ), E (ตะวนออก), S, W,
NE, NW, SE หรอ SW เปนตน
2. bordermode ก าหนดต าแหนงการวาง Widget โดยอาศยขอบดานใน (INSIDE) และขอบดาน
นอก (OUTSIDE) คาดฟอลตคอ INSIDE
3. height, width ก าหนดขนาดความกวางและความยาว มหนวยเปนพกเซล
4. relheight, relwidth ก าหนดขนาดความกวางและความยาว โดยใชเลขจ านวนจรงระหวาง 0.0 –
1.0
5. relx, rely ขนาดแนวตงและแนวนอนของ offset โดยใชเลขจ านวนจรงระหวาง 0.0 – 1.0
6. x, y ขนาดแนวตงและแนวนอนของ offset มหนวยเปนพกเซล
ตวอยางการใชงานเมธอด place() ดงน
ผลลพธทไดเมอสงรนโปรแกรม
จากตวอยางโปรแกรม แสดงการใชเมธอด place() ในการจดวาง Widgets โดยบรรทดท 6 โปรแกรม
สรางเมธอดชอวา helloCallBack() ท าหนาทแสดงกลองขอความ (messagebox) โดยพมพขอความวา "Hello World" เมธอดดงกลาวนจะถกเรยกใชเมอมการกดป ม Hello บรรทดท 8 โปรแกรมสรางป มซงมขอความบน
ป มคอ "Hello" โดยมพารามเตอร 3 ตวคอ ออปเจกตของหนาตางหลก (root), ขอความทตองการแสดงบน
ป ม ("Hello") และการกระท า (action) เมอป มถกกด ในทนโปรแกรมจะเรยกเมธอด helloCallBack() มา
ท างาน บรรทดท 10 โปรแกรมจะวางป มดงกลาวนอกขอบ (border = OUTSIDE) ทเมธอด pack() ไดก าหนดไว โดยป มมขนาดความกวางและความยาวเทากบ 100 พกเซล
4. คณสมบตพนฐานของ Widgets
Widgets ตางๆ ทใชส าหรบออกแบบ GUI มคณสมบตพนฐานหลายประการทสามารถใชงาน
รวมกนได เชน ขนาด ส และฟอนต เปนตน ซงมรายละเอยดของคณสมบตตางๆ ดงน
1. Dimension (ขนาด): ขนาดของ Widgets สามารถก าหนดไดหลายแบบดงน
- ก าหนดขนาดดวยตวอกษร เชน 'c' = เซนตเมตร (Centimeters), 'i' = นว (Inches), 'm' =
มลลเมตร (Millimeters), 'p' = Printer's points (ประมาณ 1/72)
- ก าหนดขนาดดวยตวเลข มหนวยเปนพกเซล (Pixels) เชน 1, 3, หรอ 5 เปนตน
Dimension ถกน าไปใชก าหนดคณสมบตของ Widgets ดงตอไปน
- borderwidth ความกวางเสนขอบของ Widget
- highlightthickness ความกวางของรปสเหลยมทใชส าหรบเนนความสนใจ (highlight
rectangle) เมอ Widget ถกโฟกส
- padX padY ขนาดพนทวางเพมเตมรอบๆ Widget
- selectborderwidth ความกวางเสนขอบเมอ Widget ถกเลอก
- wraplength ความยาวสงสดทเกดจากการครอบค าหรอขอความ
- height ก าหนดความสงของ Widget
- width ความกวางของ Widget
- underline ขดเสนใตตวอกษรทตองการ (0 คออกษรตวแรกของขอความ)
2. Color (ส) การก าหนดสใหกบตวอกษรหรอ Widgets ได 2 รปแบบคอ
- ก าหนดคาของสโดยใชเลขฐาน 16 ตวอยางเชน #ffff คอสขาว, #0000 คอสด า หรอ #00ffff คอสฟา เปนตน
- ก าหนดคาของสโดยใชขอความ เชน "red" = สแดง, "green" = สเขยว หรอ "white" = สขาว เปนตน ดงรปดานลาง
Color ถกน าไปใชก าหนดคณสมบตของ Widgets ดงตอไปน
- activebackground ก าหนดสพนหลงของ Widgets เมอ Widgets ท างาน (Active)
- activeforeground ก าหนดสดานหนาของ Widgets เมอ Widgets ท างาน (Active)
- background ก าหนดสพนหลงของ Widgets หรอเขยนยอเปน bg
- foreground ก าหนดสดานหนาของ Widgets หรอเขยนยอเปน fg
- disabledforeground ก าหนดสดานหนาของ Widgets เมอ Widgets ถก Disable
- highlightbackground ก าหนดสพนหลงเมอ Widgets ถกโฟกส
- highlightcolor ก าหนดสดานหนาเมอ Widgets ถกโฟกส
- selectbackground ก าหนดสพนหลงเมอมการเลอกรายการใดรายการหนงใน Widget
เชน เลอกรายการจาก Dropdown
- selectforeground ก าหนดสดานหนาเมอมการเลอกรายการใดรายการหนงใน Widget
3. Font (ฟอนต) การก าหนดรปแบบของฟอนตใหกบ Widgets สามารถก าหนดได 2 รปแบบ คอ
- ก าหนดฟอนตโดยใชเครองหมายวงเลบครอบ เชน ("Helvetica", "16") หรอ ("Times", "24", "bold italic")
- ก าหนดฟอนตโดยใชเมธอด font ทมากบ Tk ซงมรปแบบคอ
myFont = font.Font( option, ... )
ส าหรบ option มรายละเอยดดงน
- family ชอของฟอนต เชน 'Helvetica', 'Verdana', 'Times' ตวอยาง family = 'Helvetica'
- size ขนาดของฟอนต เชน size = 15
- weight ขนาดความหนาของฟอนต เชน bold คอฟอนตตวหนา, normal คอ ความหนา
ปกต ตวอยาง weight = 'bold'
- slant ตวอกษรเอยง เชน italic คอตวอกษรเอยง, roman คอ ตวอกษรปกต
- underline ขดเสนใต เชน underline = 1 คอการขดเสนตวอกษร, 0 คอ ตวอกษรปกต
- overstrike ขดเสนทบตวอกษร เชน overstrike = 1 คอขดเสนทบตวอกษร, 0 คอไมขดเสน
ทบ
4. Anchors ก าหนดจดอางองทใชส าหรบจดวาง Widgets มรปแบบคอ NW: ทศตะวนตกเฉยงเหนอ
, N: ทศเหนอ , NE: ทศตะวนออกเฉยงเหนอ , W: ทศตะวนตก , CENTER: จดกลางของแผนท , E: ทศตะวนออก, SW: ทศตะวนตกเฉยงใต, S: ทศใต, SE: ทศตะวนออกเฉยงใต
ตวอยางเชน anchor = NE, anchor = SE ส าหรบตวอยางต าแหนงทศตางๆ แสดงดงรป
5. Relief styles ก าหนดลกษณะภาพในรปแบบ 3 มต (3D) รอบๆ บรเวณ Widgets มรปแบบคอ
- FLAT แสดงภาพในลกษณะแบนราบ (ไมเปนภาพนน)
- RAISED แสดงภาพในลกษณะยกขน หรอนนขน
- SUNKEN แสดงภาพในลกษณะจมลงไป
- GROOVE แสดงภาพในลกษณะกรอบเปนรองลก
- RIDGE แสดงภาพในลกษณะกรอบนนขน
ตวอยางการใชงาน Relief แสดงในโปรแกรม
ผลลพธทไดเมอสงรนโปรแกรม
6. Bitmaps (บตแมป) Bitmap คอภาพทเกดจากจดสทเรยกวา Pixel (พกเซล) ประกอบกนเปน
รปรางบนพนททมลกษณะเปนเสนตาราง (กรด) แตละพกเซลจะมคาของต าแหนง และคาสของตวเอง ภาพหนงภาพ จะประกอบดวยพกเซลหลายๆ พกเซลผสมกน ไฟลภาพเหลานมหลายรปแบบ อาท เชน BMP,
TIF, JPG, PCT เปนตน ไพธอนมภาพบตแมปใหเลอกใชงานดงรป
ตวอยางการใชงาน Bitmaps
ผลลพธทไดเมอสงรนโปรแกรม
7. Cursors เคอรเซอรหรอตวชเมาส คอ สญลกษณแสดงต าแหนงของเมาสบนจอภาพ ไพธอน
เตรยมสญลกษณส าหรบใชเปนเคอรเซอรใหเลอกใชงานดงรป
ตวอยางการใชงานเคอรเซอร
ผลลพธทไดเมอสงรนโปรแกรม
5. การสรางและใชงาน Widgets พนฐาน
ในหวขอนจะกลาวถงวธการสราง Widgets พนฐานทส าคญๆ ส าหรบใชในการสราง GUI เชน
frames, labels, buttons, checkbuttons, radiobuttons, entries และ comboboxes เปนตน
1. Frame เฟรมเปน Widget ทมลกษณะเปนรปสเหลยม โดยปกตเฟรมจะถกใชส าหรบจดกลมหรอ
บรรจ Widgets อนๆ ทเกยวของหรอสมพนธกนเขาไวดวยกน
รปแบบค าสงส าหรบการสรางเฟรม คอ f = Frame( root, option=value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของเฟรม แสดงในตารางดานลาง
Option ค าอธบาย bd ก าหนดขนาดความกวางของขอบเฟรม มหนวยเปนพกเซล คาเรมตนเทากบ 2 พก
เซล เชน Frame(root, bd = 5, height = 50, width = 100, relief = GROOVE) bg ก าหนดสพนดานหลงของเฟรม เชน Frame(root, bd = 5, height = 50, width =
100, relief = GROOVE, bg = "green")
cursor ก าหนดรปแบบของเคอรเซอร เคอรเซอรจะเปลยนรปเมอเคลอนเมาสทบบนเฟรม เ ชน Frame(root, bd = 3, height = 50, width = 100, relief = GROOVE, cursor = "hand1")
height ก าหนดความสงของเฟรม มหนวยเปนพกเซล เชน Frame(root, bd = 3, height = 50, width = 100, relief = GROOVE)
width ก าหนดความกวางของเฟรม ถาไมก าหนดไพธอนจะก าหนดขนาดเทากบความกวางของฟอนตแทน เชน Frame(root, bd = 3, height = 50, width = 100)
highlightbackground ก าหนดแถบสพนหลงเมอเฟรมไดรบความสนใจ (Focus) เชน Frame(root, bd = 3, height = 50, width = 100, highlightbackground = "green")
highlightcolor ก าหนดแถบสเมอเฟรมไดรบความสนใจ เชน Frame(root, bd = 3, height = 50, width = 100, highlightcolor = "green")
highlightthickness ก าหนดความกวางจากขอบของเฟรม เชน Frame(root, bd = 3, height = 50, width = 100, highlightthickness = 2)
relief ก าหนดลกษณะเฟรมในรปแบบ 3 มต เชน Frame(root, bd = 5, height = 50, width = 100, relief = GROOVE)
ตวอยางการใชงานเฟรม (ตวอยางท 1)
ผลลพธทไดเมอสงรนโปรแกรม
จากตวอยางโปรแกรม แสดงการสรางเฟรมเพอรอบรบการวาง Widget ชนดป มลงในเฟรมดงกลาว
บรรทดท 4 เปนการสรางเฟรมชอ frame ใหมขนาดสงเทากบ 300 และกวางเทากบ 500 โดยมความหนาของ
ขอบเฟรมเทากบ 3 (bd = 3) กรอบของเฟรมเปนแบบรองลก (relief = GROOVE) มขนาดความกวางจากขอบเฟรมเทากบ 20 (highlightthickness = 20) เมอเลอนเมาสเขาใกลเฟรมดงกลาว เคอรเซอรจะเปลยนเปนรปมอ
(cursor = "hand1") และเฟรมทสรางขนจะเขยนลงบนหนาตางหลกของโปรแกรม (root) บรรทดท 5 เปนการก าหนดใหเฟรมดงกลาววางลงตรงกลางหนาตางหลกดวยเมธอด frame.pack(expand=True) บรรทด
ถดไปโปรแกรมท าการสรางป ม มขอความสแดง น าตาล และน าเงนลงบนเฟรมดงกลาวตามล าดบ สงเกตวา
ขนาดของเฟรมจะเทากบขนาดของป ม เนองจากเมธอด pack() จะบบอดใหเฟรมมขนาดเทากบผลรวมความกวางและความยาวของ Widgets ทอยในเฟรมนนเอง (โปรแกรมจะไมสนใจความสงและความกวางท
ก าหนดในเฟรม)
บรรทดท 12 โปรแกรมท าการสรางเฟรมอกครง ชอ bottomframe โดยเฟรมดงกลาวมลกษณะของกรอบทจมลกลงไป (relief = SUNKEN) และเฟรมดงกลาวถกจดวางใหอยในต าแหนงดานลางของหนาตาง
หลกดวยเมธอด bottomframe.pack(side = BOTTOM) จากนนโปรแกรมสรางป มทมขอความสด า ใสลงในเฟรม bottomframe โดยก าหนดใหวางในต าแหนงดานลางของเฟรม (side = BOTTOM) ผลลพธทไดแสดง
ในรปดานบน ผเขยนโปรแกรมสามารถเลอกใชเมธอด grid() แทนเมธอด pack() ในการจดวาง Widgets ก
ได ดงตวอยางโปรแกรมดานลาง
ตวอยางการใชงานเฟรม (ตวอยางท 2)
ผลลพธทไดเมอสงรนโปรแกรม
2. Button (ป ม) Button คอ Widget ทมลกษณะเปนรปสเหลยมผนผา มหนาทตอบสนองกบผใชงาน
โดยวธการกดลงและปลอย การแสดงผลบนป มจะเปนไดทงขอความหรอรปภาพกได เมอกดป มและปลอย
(เกด event) จะสงผลใหเกดการเรยกใชงานฟงกชนหรอเมธอดทฝงอยกบป มได เพอท าหนาทอยางใดอยางหนง เชน กดป ม Cancel จะท าใหโปรแกรมยกเลกค าสงทเพงกระท าเสรจ เปนตน
รปแบบค าสงส าหรบการสรางป ม คอ b = Button( root, option=value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของป ม แสดงในตารางดานลาง
Option ค าอธบาย activebackground ก าหนดสบนพนหลงของป มเมอผใชคลกบนป ม เชน Button(root, text = "Hello",
activebackground = "yellow") activeforeground ก าหนดสขอความบนป มเมอผใชคลกบนป ม เชน Button(root, text = "Hello",
activebackground = "yellow", activeforeground = "red") bd ก าหนดขนาดความกวางขอบป มมหนวยเปนพกเซล คาเรมตนเทากบ 2 พกเซล
เชน Button(root, text = "Hello", bd = 5) bg ก าหนดสพนหลงของป ม เชน Button(root, text = "Hello", bg = "red") command ฟงชนหรอเมธอดทจะถกเรยกใชเมอป มถกกดหรอคลก เชน Button(root, text =
"Hello", bg = "red", command = myFunc) fg ก าหนดสของฟอนต เชน Button(root, text = "Hello", bg = "red", fg = "blue") font ก าหนดรปแบบฟอนตของป ม เชน Button(root, text = "Hello", bg = "red", font =
"Times 10 bold") หรอ font = ("Helvetica", 16) height ก าหนดความสงของป ม (กรณป มทถกสรางดวยรปภาพ จะมหนวยเปนพกเซล)
เชน Button(root, text = "Hello", height = 5) highlightcolor ก าหนดแถบสเมอเฟรมไดรบความสนใจ เชน Button(root, text = "Hello",
highlightcolor = "green") image ก าหนดรปภาพใหกบป มแทนการใชขอความ เชน
image = PhotoImage(file = 'printer.png') B = Button(root, text ="Hello", image=image)
justify ก าหนดต าแหนงการแสดงผลขอความบนป ม โดย LEFT = วางขอความชดดานซายของป ม , RIGHT = ชดดานขวา , CENTER = วางตรงกลางป ม เชน Button(root, text = "Hello\nPython\nLanguage", justify=LEFT)
padx เตมขอความวาง (Padding) ดานซายและขวาของขอความในป ม เชน Button(root, text = "Hello", padx = 5)
pady เตมขอความวาง (Padding) ดานบนและลางของขอความในป ม เชน Button(root, text = "Hello", pady = 5)
relief ก าหนดลกษณะขอบของป มในแบบ 3D เชน Button(root, text = "Hello", relief = GROOVE)
state ก าหนดใหป มท างานหรอไมท างาน ถาก าหนดเปน DISABLED ป มจะไมสามารถกดได แตถาก าหนดเปน ACTIVE จะสามารถกดป มได เชน Button(root, text = "Hello", state = DISABLED)
underline ตวอกษรของป มจะถกขดเสนใต โดยคา -1 คอป มจะไมถกขดเสน แตตวเลขอนๆ ท เปนคาบวกจะท าใหตวอกษรบนป มถกขดเสน (0 คออกษรตวแรก) เชน Button(root, text = "Hello", underline = 1)
width ก าหนดความกวางของป ม (กรณป มทถกสรางดวยรปภาพ จะมหนวยเปนพกเซล) เชน Button(root, text = "Hello", width = 5)
wraplength เมอคาดงกลาวถกก าหนดเปนจ านวนเตมบวก ขอความบนป มจะถกจ ากดพนท โดยจะแสดงผลอยในขอบเขตทก าหนดใน wraplength เทาน น เชน ขอความ "Hello" จะใชพนทในการแสดงผลเทากบ 28 พกเซล เมอก าหนด wraplength = 10 จะท าใหขอความแสดงในแนวต ง ตวอยางเชน Button(root, text = "Hello", wraplength = 10)
Widget ชนดป มมเมธอดทชวยเสรมในการท างานของป มคอ
- เมธอด flash() ท าหนาทวาดป มใหม เชน
B = Button(root, text = "Hello")
B.flash()
- เมธอด invoke() บงคบใหค าสงออฟชน command ทก าหนดไวในป มท างานทนท เชน
B = Button(root, text = "Hello", command = callBack)
B.invoke()
เมอสงรนโปรแกรมจะสงผลใหไพธอนเรยกเมธอด callback() มาท างานทนทโดยไมตองคลกทป ม
ตวอยางการสรางและใชงานป ม
ผลลพธทไดเมอสงรนโปรแกรม ใหทดลองคลกทป ม Go! และป มเครองพมพ
จากตวอยางโปรแกรม แสดงการสรางและใชงาน Button (ป ม) โดยบรรทดท 7 โปรแกรมสรางเมธ
อดชอ helloCallBack() มหนาทสรางกลองขอความโดยพมพขอความวา "Hello World" ออกจอภาพ บรรทดท 10 โปรแกรมสรางเมธอดชอ printCallBack() มหนาทสรางกลองขอความ โดยพมพขอความวา "Hello
Printer" ออกจอภาพ บรรทดท 12 สรางออปเจกต image ทเชอมโยงไปยงรปภาพชอวา "printer.png" เพอใชส าหรบแสดงบนป ม บรรทดท 13 โปรแกรมสรางป มโดยมขอความบนป มคอ "Go!" (text = "Go!"), ขดเสน
ใตทตวอกษร "G" (underline=0), ขอบของป มเปนแบบรองลก (relief=GROOVE), เมอป มถกกด ป มจะเปน
สเหลอง (activebackground = "yellow"), เมอป มถกกดขอความจะเปนสแดง (activeforeground = "red") และเมอป มดงกลาวถกคลก โปรแกรมจะเรยกใชเมธอด helloCallBack()
บรรทดท 15 โปรแกรมสรางป มโดยมภาพบนป มคอ "printer.png" (image = image) เมอป มดงกลาว
ถกคลก โปรแกรมจะเรยกใชเมธอด printCallBack() ผลลพธทไดแสดงดงรปดานบน
3. Canvas คอ Widget ทมลกษณะเปนรปสเหลยม มเปาหมายเพอใชส าหรบจดวางรปภาพ เฟรม
ขอความ หรอวาดรปภาพทมความซบซอนได รปรางของ Canvas แสดงดงรป
รปแบบค าสงส าหรบการสราง Canvas คอ
c = Canvas( root, option=value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของ Canvas แสดงในตารางดานลาง
Option ค าอธบาย confine ก าหนดให Canvas สามารถ เ ล อน Scroll ได ( ดฟอลต เท ากบ True) เ ชน
Canvas(root, bd = 5 , relief = GROOVE, height = 250 , width = 300 , confine = False)
cursor ก าหนดรปแบบของเคอรเซอร เคอรเซอรจะเปลยนรปเมอเคลอนเมาสทบบน Canvas เชน Canvas(root, bd = 5, relief = GROOVE, height = 250, width = 300, cursor = "hand1")
bd ก าหนดขนาดความกวางขอบ Canvas มหนวยเปนพกเซล คาเรมตนเทากบ 2 พกเซล เชน Canvas(root, bd = 3, relief = GROOVE, height = 250, width = 300)
bg ก าหนดสพนหลงของ Canvas เชน Canvas(root, bd = 3, relief = GROOVE, bg = "blue", height = 250, width = 300)
scrollregion ก าหนดพนทท Canvas สามารถขยายไดสงสดเทาใด โดยขอบเขตพนทก าหนดในตวแปรชนด Tuple ซงมรปแบบ tuple(w, e, n, s) โดย w คอขอบดานซาย, e คอขอบดานขวา, n คอดานบน และ s คอดานลาง เชน Canvas(root, bd = 5, relief = GROOVE, scrollregion = (0, 0, 500, 500))
xscrollincrement ก าหนดขนาดการเพมข นของจ านวนคอลมน เมอ Canvas ใช Scrollbar ในแนวนอน ใชในกรณท Canvas ตองการแสดงผลมากกวาขอบเขตท Canvas ก าหนดไว เชน Canvas(frame, xscrollcommand = xscrollbar.set, yscrollcommand = yscrollbar.set, xscrollincrement = 10, yscrollincrement=10)
height ก าหนดความสงของ Canvas เชน Canvas(root, bd = 3, relief = GROOVE, height = 250, width = 300)
highlightcolor ก าหนดแถบสเมอ Canvas ไดรบความสนใจ (Focus) เชน Canvas(root, bd = 5, relief = GROOVE, height = 250, width = 300, highlightcolor = "green")
xscrollcommand ก าหนดให Canvas สามารถใชงาน Scrollbar ในแนวนอนได เชน Canvas(frame, xscrollcommand = xscrollbar.set, yscrollcommand = yscrollbar.set)
yscrollincrement เหมอนกบ xscrollincrement แตเปลยนเปนแนวตงแทน เชน Canvas(frame, xscrollcommand = xscrollbar.set, yscrollcommand = yscrollbar.set, xscrollincrement = 10, yscrollincrement = 10)
yscrollcommand ก าหนดให Canvas สามารถใชงาน Scrollbar ในแนวตงได เชน Canvas(frame, xscrollcommand = xscrollbar.set, yscrollcommand = yscrollbar.set)
relief ก าหนดลกษณะขอบของ Canvas ในแบบ 3D เชน Canvas(root, bd = 5, relief = GROOVE, height = 250, width = 300)
width ก าหนดความกวางของ Canvas เชน Canvas(root, bd = 3, relief = GROOVE, height = 250, width = 300)
Canvas สามารถวาดรปตางๆ ลงบน Canvas ได ดงนนเมธอดตอไปน จงใชงานรวมกบ Canvas ได
เปนอยางด
- การวาดเสนโคงบน Canvas ดวยเมธอด create_arc() ตวอยางเชน
coord = 10, 50, 240, 210
arc = canvas.create_arc(coord, start=0, extent=150, fill="blue")
- การสรางรปภาพบน Canvas ดวยเมธอด create_image() ตวอยางเชน
filename = PhotoImage(file = "sunshine.gif")
image = canvas.create_image(50, 50, anchor = NE, image = filename)
- การวาดเสนบน Canvas ดวยเมธอด create_line() ตวอยางเชน
line = canvas.create_line(x0, y0, x1, y1,..., xn, yn, options)
- การวาดรปวงรบน Canvas ดวยเมธอด create_oval() ตวอยางเชน
oval = canvas.create_oval(x0, y0, x1, y1, options)
- การวาดรปหลายเหลยมบน Canvas ดวยเมธอด create_ polygon() ตวอยางเชน
polygon = canvas.create_polygon(x0, y0, x1, y1,...xn, yn, options)
- การวาดรปสเหลยมบน Canvas ดวยเมธอด create_ rectangle() ตวอยางเชน
rect = canvas.create_rectangle(50, 25, 150, 75,fill = "blue")
- การลบภาพวาดทงหมดออกจาก Canvas ดวยเมธอด create_ delete() ตวอยางเชน
rect = canvas.delect(oval) #remove oval from Canvas
rect = canvas.delect(ALL) #remove ALL from Canvas
ตวอยางการสรางและใชงาน Canvas
ผลลพธทไดเมอสงรนโปรแกรม
จากตวอยางโปรแกรม แสดงการสรางและใชงาน Canvas โดยบรรทดท 4 โปรแกรมสราง Canvas
ทมสพนหลงเปนสน าเงน (bg = "blue") มความกวางเทากบ 300 และสงเทากบ 250 บรรทดท 5 ก าหนดต าแหนงของ coord ซงเปนตวแปรชนด Tuple เทากบ 10, 50, 240, 210 ตามล าดบ บรรทดท 6 โปรแกรมท า
การวาดวงกลมเสยวสแดงลงบน Canvas ดงรปดานบน
4. Checkbutton คอ Widget ทมลกษณะเปนรปสเหลยมเลกๆ เพอใหผใชสามารถเลอกไดโดยการ
คลกบน Checkbutton ดงกลาว ผใชสามารถเลอกไดมากกวา 1 ตวเลอก
รปแบบค าสงส าหรบการสราง Checkbutton คอ
cb = Checkbutton( root, option=value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของ Checkbutton แสดงในตารางดานลาง
Option ค าอธบาย activebackground ก าหนดสบนพนหลงของ Checkbutton เมอผใชคลกบนป ม เชน
Checkbutton(root, text = "Music", activebackground = "gray") activeforeground ก าหนดสขอความบน Checkbutton เมอผใชคลกบนป ม เชน Checkbutton(root,
text = "Music", activebackground = "gray", activeforeground = "white") bd ก าหนดขนาดความกวางขอบ Checkbutton มหนวยเปนพกเซล คาเรมตนเทากบ 2
พก เซล เ ชน Checkbutton(root, text = "Music", bg = "yellow", bd = 5, relief = GROOVE)
bg ก าหนดสพนหลงของ Checkbutton เชน Checkbutton(root, text = "Music", bg = "yellow")
bitmap แสดงภาพแบบ monochrome บน Checkbutton command ฟงชนหรอเมธอดทจะถกเรยกใชเมอ Checkbutton ถกกดหรอคลก เชน
Checkbutton(root, text = "Music", command = myFunc) fg ก าหนดสของฟอนต เชน Checkbutton(root, text = "Music", fg = "red") cursor ก าหนดรปแบบของเคอรเซอร เคอรเซอรจะเปลยนรปเมอเคลอนเมาสทบบน
Checkbutton เชน Checkbutton(root, text = "Music", fg = "red", cursor = "hand1") font ก าหนดรปแบบของฟอนตของ Checkbutton เชน
Checkbutton(root, text = "Music", fg = "red", font = "Times 10 bold") height ก าหนดความสงของ Checkbutton เชน
Checkbutton(root, text = "Music", height = 5, width = 10, bg = "pink") width ก าหนดความกวางของ Checkbutton เชน
Checkbutton(root, text = "Music", height = 5, width = 10, bg = "pink") highlightcolor ก าหนดแถบสเมอ Checkbutton ไดรบความสนใจ เชน Checkbutton(root, text =
"Music", height = 5, width = 10, highlightcolor = "green") image ก าหนดรปภาพใหกบป มแทนการใชขอความ เชน
image = PhotoImage(file = 'printer.png') Checkbutton(root, text = "Music", height = 5, width = 10, image = image)
justify ก าหนดต าแหนงการแสดงผลขอความบนป ม โดย LEFT = วางขอความชดดานซายของป ม , RIGHT = ชดดานขวา , CENTER = วางตรงกลางป ม เชน Checkbutton(root, text = "Music\nVideo", justify = LEFT)
padx เตมขอความวาง (Padding) ดานซายและขวาของขอความใน Checkbutton เชน Checkbutton(root, text = "Music", padx = 5)
pady เตมขอความวาง (Padding) ดานบนและลางของขอความใน Checkbutton เชน Checkbutton(root, text = "Music", pady = 5)
relief ก าหนดลกษณะขอบของ Checkbutton ในแบบ 3D เชน Checkbutton(root, text = "Music", relief = GROOVE)
state ก าหนดให Checkbutton ท างานหรอไมท างาน ถาก าหนดเปน DISABLED Checkbutton จ ะ ไ ม ท า ง า น เ ช น Checkbutton(root, text = "Music", state = DISABLED)
underline ตวอกษรของ Checkbutton จะถกขดเสนใต (0 คออกษรตวแรก, -1 = ไมขดเสนใต) เชน Checkbutton(root, text = "Music", underline = 1)
wraplength ขอความบนป มจะถกจ ากดพนท โดยจะแสดงผลอยในขอบเขตทก าหนดใน wraplength เทานน เชน Checkbutton(root, text = "Music", wraplength = 20)
onvalue ก าหนดคาเรมตนใหกบ Checkbutton เมอ Checkbutton ถกคลกเลอกโปรแกรมจะดงคาใน onvalue ไปใชงาน เชน Checkbutton(root, text = "Music", onvalue = 1), หนาทของ onvalue คอ จดเตรยมคาขอมลเพอใหเมธอดอนๆ น าไปใชงานนนเอง (onvalue ในรปแบบสตรงคอ "on" )
offvalue ก าหนดคาเรมตนใหกบ Checkbutton เมอ Checkbutton ถกคลกยกเลกโปรแกรมจะดงคาใน offvalue ไปใชงาน เชน Checkbutton(root, text = "Music", offvalue = 0), หนาทของ offvalue คอ จดเตรยมคาขอมลเพอใหเมธอดอนๆ น าไปใชงานเชนเดยวกบ onvalue (offvalue ในรปแบบสตรงคอ "off" )
selectcolor ก าหนดสของชองวางใน Checkbutton เชน Checkbutton(root, text = "Music", selectcolor = "red")
selectimage ก าหนดรปภาพของชองวางใน checkbutton เชน image = PhotoImage(file = 'printer.png') Checkbutton(root, text = "Music", selectimage = image)
text ก าหนดขอความใหกบ Checkbutton ถาตองการก าหนดขอความมากกวา 1 บรรทดใหใช \n เชน "Music \n Audio \n Guitar"
variable ใชส าหรบดงขอมลจาก Widgets หรอดงขอมลจาก onvalue และ offvalue นนเอง โดยจะท างานรวมกบเมธอด IntVar() เมอขอมลใน onvalue/offvalue เปนตวเลข และท างานรวมกบเมธอด StringVar() เมอขอมลใน onvalue/offvalue เปนสตรง เชน Checkbutton(root, text = "Music", variable = IntVar(), onvalue = 1, offvalue = 0)
Widget ชนด Checkbutton มเมธอดทชวยสนบสนนการท างานคอ
- เมธอด deselect() ท าหนาทเคลยรคา Checkbutton ทเลอกไว (turn-off) เชน
C = Checkbutton(root, text = "Music")
C.deselect()
- เมธอด flash() ท าหนาทวาด Checkbutton ใหม เชน
C = Checkbutton(root, text = "Music")
C.flash()
- เมธอด invoke() จะบงคบใหท าค าสงหลง command ทนท เชน
C = Checkbutton(root, text = "Music", command=callBack)
C.invoke()
- เมธอด select() เซต (turn-on) คาใหกบ Checkbutton เมอสถานะเดมของ Checkbutton ไม
ถกเลอก จะท าใหสถานะกลายเปนถกเลอกแทน เชน
C = Checkbutton(root, text = "Music")
C.select()
- เมธอด toggle() สลบระหวาง turn-on และ turn-off เมอสถานะเดมของ Checkbutton ถก
ก าหนดเปน on เมอเรยกเมธอด toggle() จะท าให Checkbutton กลายเปน off เชน
C = Checkbutton(root, text = "Music")
C.toggle()
ตวอยางการสรางและใชงาน Checkbutton
ผลลพธทไดเมอสงรนโปรแกรมดงรป ใหทดลองคลกท Checkbutton และสงเกตการ
เปลยนแปลง
จากตวอยางโปรแกรม แสดงการสรางและใชงาน Checkbutton บรรทดท 4 เปนการสรางตวแปรชอ
CheckVar1 เพอใชส าหรบเกบคาขอมลชนดสตรง ในท นคอ 'on' หรอ 'off' ท เกดข นจากการคลกท Checkbutton (C1) โดยตวแปรดงกลาวสรางขนจากคลาสชอ StringVar() บรรทดท 5 เปนการสรางตวแปร
ชอ CheckVar2 ซงเปนชนดจ านวนเตม ในทนคอ 0 หรอ 1 ทเกดจากการคลก Checkbutton (C2) โดยสรางมาจากคลาสชอ IntVar() บรรทดท 7 โปรแกรมสรางฟงชนชอ checkCallBack() เพอทดสอบการท างานของ
Checkbutton C1 และ C2 โดยฟงชนดงกลาวเรยกใชงานเมธอด select() และ toggle() พรอมกบพมพคา
CheckVar1 และ CheckVar2 ออกทางจอภาพเมอผใชมการคลกท Checkbutton
บรรทดท 13 สราง Widget Checkbutton ชอ C1 ทมขอความวา 'Music' มความสงเทากบ 5 ความ
กวางเทากบ 20 เมอ Checkbutton C1 ถกคลกเลอกจะนาคาใน onvalue ('on') เกบไวในตวแปร CheckVar1
ทนท แตถา C1 ไมถกเลอก โปรแกรมจะนาคา offvalue ('off') เกบไวในตวแปร CheckVar1 แทน ใน Checkbutton C1 โปรแกรมฝงค าสงเอาไว ถามการคลกท Checkbutton C1 โปรแกรมจะเรยกใชเมธอด
checkCallBack() ทนท (command = checkCallBack)
บรรทดท 15 สราง Widget Checkbutton ชอ C2 ทมขอความวา 'Video' มความสงเทากบ 5 ความ
กวางเทากบ 20 เมอ Checkbutton C2 ถกคลกเลอกจะนาคาใน onvalue (1) เกบไวในตวแปร CheckVar2
ทนท แตถา C2 ไมถกเลอก โปรแกรมจะนาคา offvalue (0) เกบไวในตวแปร CheckVar2 แทน ใน Checkbutton C2 โปรแกรมฝงค าสงเอาไว ถามการคลกท Checkbutton C2 โปรแกรมจะเรยกใชเมธอด
checkCallBack() ผลลพธทไดแสดงดงในรปดานบน
5. Entry (น าเขาขอมล) คอ Widget ทมลกษณะเปนกลองขอความ เพอใชรบขอมลจากผใชเขามา
ประมวลผลในโปรแกรม เชน การปอนชอ-สกล รหสผาน เปนตน
รปแบบค าสงส าหรบการสราง Entry คอ
e = Entry( root, option=value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของ Entry
Option ดงตอไปนมคณสมบตการท างานทเหมอนกบ Widgets ทไดกลาวมาแลวขางตน คอ bg, bd,
cursor, font, fg, highlightcolor, justify, relief และ state ส าหรบ option ทแตกตางจาก Widgets ตวอนๆ แสดงในตารางดานลาง
Option ค าอธบาย exportselection โดยปกตเมอผใชเลอกขอความภายใน Entry ขอมลทถกเลอกจะถกสงไปเกบไว
ในคลปบอรด (Clipboard) โดยอตโนมต เมอไมตองการใหขอมลดงกลาวถกสงไปย งคลปบอรด ใหก าหนด exportselection = 0 เ ชน Entry(root, bd = 5, exportselection = 0)
selectbackground ก าหนดสพนหลงของขอความเมอขอความดงกลาวถกเลอก (highlight) เชน Entry(root, bd = 5, selectbackground = "red")
selectborderwidth ก าหนดขนาดความกวางของขอบรอบๆ ขอความทถกเลอก (คาดฟอลตคอ 1 พกเซล) เชน Entry(root, bd = 3, width = 10, selectborderwidth = 10)
selectforeground ก าหนดสของขอความใน Entry เมอขอความดงกลาวถกเลอก เชน Entry(root, bd = 3, width = 10, selectforeground = "red")
show ขอความทปอนเขาไปใน Entry จะมลกษณะเปน Clear text (ไมมการเขารหส) แตบางครง ผใชงานจ าเปนตองซอนขอความดงกลาว เชน รหสผาน เปนตน สามารถก าหนดโดย show="*" เชน Entry(root, bd = 3,width = 10, show = "*")
textvariable ก าหนดตวแปรส าหรบใชเกบคาทเกดขนจากการปอนขอมลลงใน Entry โดยท างานรวมกบคลาส StringVar() เชน entryVar = StringVar() Entry(root, bd = 3, width = 10, show = "*", textvariable = entryVar)
width ก าหนดขนาดความกวางของ Entry ทแสดงผล เชน Entry(root, bd = 3, width = 5)
xscrollcommand เมอคาดวาผใชงานจะปอนขอมลเกนความกวาง (Width) ของ Entry ทก าหนดไว สามารถใช xscrollcommand (แทบสไลดในแนวนอน) ท างานรวมกบ Entry ได เชน scrollbar = Scrollbar(root, orient = HORIZONTAL) Entry(root, bd = 3, width = 5, show = "*", xscrollcommand = scrollbar.set)
Widget ชนด Entry มเมธอดทชวยสนบสนนการทางาน คอ
- เมธอด delete(first, last = None) ท าหนาทลบตวอกษรออกจาก Entry โดยก าหนดต าแหนง
ตวอกษรเรมตนทพารามเตอร first และต าแหนงตวอกษรตวสดทายในพารามเตอร last ถาไมไดก าหนดคา
ใหกบพารามเตอร last ตวอกษรตวแรกจะถกลบเพยงตวเดยวเทานน เชน
E = Entry(root, bd = 3, width = 5, show = "*")
E.delete(0, END)
- เมธอด get() ท าหนาดงขอมลจาก Entry เปนสตรง เชน
E = Entry(root, bd = 3, width = 5, show = "*")
E.get()
- เมธอด icursor(index) ก าหนดต าแหนงของเคอรเซอรในขอความของ Entry ผานพารามเตอร
index เชน
E = Entry(root, bd = 3, width = 5)
E.icursor(3)
- เมธอด index(index) เลอนตวชไปยงต าแหนงทตองการของขอความใน Entry เชน
E = Entry(root, bd = 3, width = 5)
E.index(3)
- เมธอด insert(index, s) เพมสตรงในต าแหนง (index) ทก าหนด เชน
E = Entry(root, bd = 3, width = 5)
E.insert(3, "Hello")
- เมธอด select_adjust(index) เมธอดนถกใชเพอยนยนวาตวอกษรทเลอกตรงตามทระบไวจรง เชน
E = Entry(root, bd = 3, width = 5)
E.select_adjust(3)
- เมธอด select_clear() เคลยรแทบ highlight บนขอความทถกเลอกใน Entry เชน
E = Entry(root, bd=3, width=5)
E.select_clear()
- เมธอด select_from(index) ก าหนดต าแหนง ANCHOR ดวย index เชน
E = Entry(root, bd = 3, width = 5)
E.select_from(3)
- เมธอด select_present() เมอขอความถกเลอก (highlight) จะคนคาเปน True แตไมถกเลอกจะคน
คาเปน False เชน
E = Entry(root, bd = 3, width = 5)
E.select_present()
- เมธอด select_range(start, end) เลอกชวงของขอความทตองการ โดยก าหนดต าแหนงเรมตน
(start) และต าแหนงสนสด (end) เชน
E = Entry(root, bd = 3, width = 5)
E.select_range(2, 4)
- เมธอด select_to(index) เลอกชวงของขอความตงแต ANCHOR ไปถงตวอกษรตวสดทาย เชน
E = Entry(root, bd = 3, width = 5)
E.select_to(5)
ตวอยางการสรางและใชงาน Entry
ผลลพธทไดเมอสงรนโปรแกรมดงรป ใหลองปอนขอมลและคลกเลอกป มตางๆ พรอมกบสงเกต
การเปลยนแปลง
จากตวอยางโปรแกรม แสดงการสรางและใชงาน Entry บรรทดท 3 สรางตวแปรชอ entryVar เพอ
ใชส าหรบเกบคาขอมลชนดสตรงทปอนลงใน Entry โดยตวแปรดงกลาวสรางขนจากคลาสชอ StringVar() บรรทดท 4 สรางฟงชนชอ deleteCallBack() ท าหนาทลบขอความใน Entry โดยการระบต าแหนงเรมตน
(first) และสนสด (last) ของขอความดวยเมธอด delete(first, last) บรรทดท 6 สรางฟงชนชอ insertCallBack() ท าหนาทแทรกหรอเพมขอความลงใน Entry ดวยเมธอด insert(index, s) โดย index คอต าแหนงทตองการ
เพมขอความลงใน Entry และ s คอขอความ บรรทดท 8 สรางฟงชน selectCallBack() ท าหนาทเลอกชวงของ
ขอความ (highlight) ใน Entry โดยใชเมธอด selectRange(start, end) บรรทดท 12 สรางฟงชนชอ showCallBack() ท าหนาทแสดงผลขอมลทอยใน Entry ผานตวแปรชนดสตรงชอ entryVar โดยใชเมธอด
get()
บรรทดท 14 โปรแกรมสราง Label เพอพมพค าวา 'Password' ออกจอภาพ บรรทดท 16 สราง Entry ทมความกวางของเทากบ 10 เมอผใชปอนขอมลใดๆ ลงใน Entry ขอความเหลาจะถกเกบไวในตวแปร
entryVar (textvariable=entryVar) บรรทดท 18 สรางป มมขอความบนป มคอ 'delete' เมอป มดงกลาวถกกด โปรแกรมจะเรยกฟงชน deleteCallBack() เขามาท างานทนท บรรทดท 20 สรางป มมขอความคอ 'insert' เมอ
ป มดงกลาวถกกด โปรแกรมจะเรยกฟงกชน insertCallBack() บรรทดท 22 สรางป มมขอความคอ 'select' เมอ
ป มดงกลาวถกกด โปรแกรมจะเรยกฟงกชน selectCallBack() บรรทดท 24 สรางป มมขอความคอ 'clear' เมอป มดงกลาวถกกด โปรแกรมจะเรยกฟงกชน clearCallBack() บรรทดท 26 สรางป มมขอความคอ 'show' เมอ
ป มดงกลาวถกกด โปรแกรมจะเรยกฟงกชน showCallBack() ผลลพธแสดงดงรปดานบน
6. Label (เลเบลหรอปายชอ) คอ Widget ทมลกษณะเปนปายของขอความ เพอใชแสดงขอความ
ตางๆ ผใชงานทราบ เชน ปายชอผใชงาน (User label) ปายชอรหสผาน (Password label) เปนตน
รปแบบค าสงส าหรบการสราง Label คอ
l = Label( root, option = value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของ Label
Option ดงตอไปนมคณสมบตการท างานทเหมอนกบ Widgets ทไดกลาวมาแลวขางตน ส าหรบ
option ทแตกตางจาก Widgets ตวอนๆ แสดงในตารางดานลาง
Option ค าอธบาย anchor ก าหนดต าแหนงการวาง Label โดยการก าหนดทศคอ N, W, S, E เปนตน (อาน
คาดฟอลตคอวางกลางวนโดวส เชน Label(root, anchor = NW, text = "User Name:")
text ก าหนดขอความใหแสดงบน Label เชน Label(root, text = 'User Name:', font = ("Helvetica", 9), fg = "red")
bitmap ก าหนดรปภาพบตแมพทตองการแสดงบน Label เชน Label(root, bitmap = "error", fg = "red")
textvariable ก าหนดตวแปรส าหรบใชเกบขอความของ Label โดยท างานรวมกบคลาส StringVar() เชน labelVar = StringVar() Label(root, textvariable = labelVar, text = 'User Name:')
คลาส StringVar() และคลาส IntVar() มเมธอดส าคญทชวยสนบสนนการท างานของ Widgets คอ
- เมธอด get() ท าหนาทดงขอมลจากตวแปรคลาส StringVar() และ IntVar() มาแสดงผล เชน
stringVariable = StringVar()
Label(root, text="User Name:", textvariable = stringVariable)
print(stringVariable.get())
- เมธอด set() ท าหนาทก าหนดขอความใหมใหกบ Label เชน
stringVariable = StringVar()
Label(root, text="User Name:", textvariable = stringVariable)
print(stringVariable.set("User:"))
ตวอยางการสรางและใชงาน Label
ผลลพธทไดเมอสงรนโปรแกรมดงรป
จากตวอยางโปรแกรม แสดงการสรางและใชงาน Label บรรทดท 5 และ 6 สรางตวแปรชอ userVar
และ passwordVar เพอใชส าหรบเกบคาขอมลชนดสตรงทปอนลงใน Entry ของ User Name และ Password ตามล าดบ บรรทดท 8 สรางฟงชนชอ showLoginInfo() ท าหนาทแสดงชอผใชงานและรหสผานดวยกลอง
ขอความชอ "Login info" และพมพขอมลออกทาง Python shell ดวย บรรทดท 12 สรางฟงชนชอ clearLogin() ท าหนาทลบชอผใชและรหสผานออกจาก Entry
บรรทดท 16 โปรแกรมสราง Label เพอพมพค าวา 'User Name:' ออกจอภาพ บรรทดท 17 สราง
Entry ทมความกวางของเทากบ 10, ตวอกษรทปอนจะถกก าหนดใหเปนสแดง และขอมลทปอนจะเกบไวในตวแปรชอ userVar (textvariable=userVar) บรรทดท 18 สราง Label เพอพมพค าวา 'Password:' ออกจอภาพ
บรรทดท 19 สราง Entry ทมความกวางของเทากบ 10 ขอมลทปอนจะถกเขารหสดวยตวอกษร '*' และเกบขอมลไวในตวแปรชอ passwdVar บรรทดท 20 สรางป มทมขอความบนป มคอ 'Login' เมอป มดงกลาวถกกด
โปรแกรมจะเรยกฟงชน showLoginInfor() เขามาท างานทนท บรรทดท 21 สรางป มมขอความคอ 'Cancel'
เมอป มดงกลาวถกกด โปรแกรมจะเรยกฟงชน clearLogin() ผลลพธแสดงดงรปดานบน
7. Listbox คอ Widget ทมลกษณะเปนรายการของสมาชกทสวนใหญมตวเลอกมากกวา 1 ตวเลอก
โดยผใชงานสามารถเลอกสมาชกจากรายการดงกลาวไดเพยงตวเดยวเทานน เชน ประเทศ ค าน าหนาชอ เปน
ตน
รปแบบค าสงส าหรบการสราง Listbox คอ
l = Listbox( root, option=value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของ Listbox
Option ดงตอไปนมคณสมบตการท างานทเหมอนกบ Widgets ทไดกลาวมาแลวขางตน ส าหรบ
option ทแตกตางจาก Widgets ตวอนๆ แสดงในตารางดานลาง
Option ค าอธบาย selectbackground ก าหนดสขอความใน Listbox เมอสมาชกถกเลอก เชน
Listbox(root, selectbackground = "red") selectmode ก าหนดคณสมบตวาจะเลอกสมาชกจาก Listbox อยางไร โดยมโหมดใหเลอก
ดงนคอ - BROWSE เลอกสมาชกไดเพยงตวเดยว เมอลากเมาส (drag) แทบส (highlight) จะวงไปพรอมๆ กบเมาส - SINGLE เลอกสมาชกไดเพยงตวเดยว และไมสามารถลากเมาสได - MULTIPLE เลอกสมาชกไดมากกวา 1 ตว โดยการคลกเลอกสมาชกแตละตว ไมสามารถลากเมาสเพอเลอกสมาชกหลายๆ ตว พรอมกนได - EXTENDED เลอกสมาชกไดมากกวา 1 ตว โดยการลากเมาสเพอเลอกสมาชกหลายๆ ตว พรอมกนได เชน Listbox(root, selectmode = EXTENDED)
xscrollcommand สรางแทบสไลดแนวนอน (HORIZONTAL) ใหกบ Listbox เชน xscrollbar = Scrollbar(root, orient = VERTICAL) xscrollbar.pack(side = BOTTOM, fill = X) Listbox(root, selectmode = EXTENDED, xscrollcommand = xscrollbar.set)
yscrollcommand สรางแทบสไลดแนวตงใหกบ Listbox (VERTICAL) เชน yscrollbar = Scrollbar(root, orient = VERTICAL) yscrollbar.pack(side = RIGHT, fill = Y) Listbox(root, selectmode = EXTENDED, yscrollcommand = yscrollbar.set)
- เมธอด selection_set(first, last) ท าหนาทเลอกชวงสมาชกทตองการ โดยใชก าหนดต าแหนง
สมาชกตวแรกในพารามเตอร first และสมาชกตวสดทายคอ last ถาระบเฉพาะ first แสดงวาเลอกสมาชก
จาก Listbox เพยงตวเดยวเทานน เชน
Lb1 = Listbox(root)
Lb1.insert(1, "Python")
Lb1.insert(2, "Perl")
Lb1.pack()
Lb1.selection_set(1)
Lb1.selection_set(0, END)
- เมธอด curselection() ท าหนาทดงขอมลสมาชกทถกเลอกใน Listbox คาทสงกลบจะเปนขอมล
ชนด Tuple แตถาสมาชกใน Listbox ไมไดถกเลอกไวจะสงคากลบเปนทพเพลทวางเปลา เชน
Lb1 = Listbox(root)
Lb1.insert(1, "Python")
Lb1.insert(2, "Perl")
Lb1.insert(3, "C")
Lb1.pack()
Lb1.selection_set(0, 1)
print(Lb1.curselection())
ผลลพธทไดคอ (0, 1)
- เมธอด delete(first, last = None) ลบสมาชกออกจาก Listbox ถาก าหนดต าแหนง first และ last
แสดงวาเปนการลบสมาชกแบบชวง แตถาก าหนดเฉพาะ first จะเปนการลบสมาชกจาก Listbox เพยงตว
เดยวเทานน เชน
Lb1 = Listbox(root)
Lb1.insert(1, "Python")
Lb1.insert(2, "Perl")
Lb1.insert(3, "C")
Lb1.pack()
Lb1.delete(1, 2)
- เมธอด get(first, last = None) ดงสมาชกจาก Listbox ถาก าหนดต าแหนง first และ last แสดงวา
เปนการดงสมาชกแบบชวง แตถาก าหนดเฉพาะ first จะเปนการดงสมาชกจาก Listbox เพยงตวเดยวเทานน คาทสงคนจากเมธอดดงกลาวเปนชนด Tuple เชน
Lb1 = Listbox(root)
Lb1.insert(1, "Python")
Lb1.insert(2, "Perl")
Lb1.insert(3, "C")
Lb1.pack()
Lb1.get(1, 2)
ผลลพธทไดคอ ('Perl', 'C')
- เมธอด index(i) ก าหนดต าแหนงตวชดวย index เชน
Lb1.index(1)
- เมธอด insert(index, *elements) เพมสมาชกตงแต 1 – n ตว ลงใน Listbox โดยสามารถก าหนด
ต าแหนงทจะเพมดวย index ถาตองการเพมสมาชกในต าแหนงทายของ Listbox ใหท าการก าหนด index เปน END เชน
Lb1 = Listbox(root)
Lb1.insert(1, "Python")
Lb1.insert(2, "Perl")
Lb1.insert(3, "C")
Lb1.pack()
elements = ("C++", "Prolog")
for item in elements:
Lb1.insert(END, item)
- เมธอด nearest(y) ดงคาต าแหนงบนสดของ Listbox เชน
Lb1.nearest(1)
- เมธอด see(index) เปลยนต าแหนงของ Listbox โดยอางองจาก index เชน
Lb1.see(2)
- เมธอด size() ค านวณจ านวนสมาชกทมทงหมดใน Listbox เชน
Lb1.size()
ตวอยางการสรางและใชงาน Listbox
ผลลพธทไดเมอสงรนโปรแกรม
ตวอยางโปรแกรม แสดงการสรางและใชงาน Listbox บรรทดท 4 สราง Listbox ในหนาตางหลก
บรรทดท 5 – 10 เปนการเพมสมาชกใหกบ Listbox คอ 'Python', 'Perl', 'C', 'PHP', 'JSP' และ 'Ruby' ผลลพธทไดแสดงดงรปดานบน
8. Menubutton คอ Widget ทมลกษณะเปนเมนแบบเลอนลง เมอผใชคลกเลอกเมนดงกลาวจะคง
อยตลอดไปจนกวาจะปดโปรแกรม ผใชสามารถเลอกรายการใดรายการหนงใน Menubutton โดยการคลกท
รายการทตองการ
รปแบบค าสงส าหรบการสราง Menubutton คอ
me = Menubutton( root, option=value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของ Menubutton
Option ดงตอไปนมคณสมบตการท างานทเหมอนกบ Widgets ทไดกลาวมาแลวขางตน คอ activebackground, activeforeground, anchor, bg, bitmap, bd, cursor, font, fg, heigh, width, image, justify,
padx, pady, relief, state, text, textvariable, underline และ wraplength ส าหรบ option ทแตกตางจาก Widgets
ตวอนๆ แสดงในตารางดานลาง
Option ค าอธบาย direction ก าหนดต าแหนงของเมนทตองการแสดงผล ถาก าหนดเปน LEFT เมนจะปรากฏ
ทางดานซายของป มทก าลงแสดงผล ถาก าหนดเปน RIGHT เมนจะปรากฏทางดานขวาของป ม ถาก าหนดเปน "above" เมนจะแสดงดานบนของป ม ส าหรบคาดฟอลตคอ "below" เชน Menubutton(root, text = "Colors", relief = RAISED, direction = RIGHT)
disabledforeground สของตวอกษรใน Menubutton จะไมถกใชงาน เชน Menubutton(root, text = "Colors", disabledforeground = "black")
menu ก าหนดเมนยอยทสมพนธกบ Menubutton เชน mb = Menubutton(root, text = "Colors", relief = RAISED) mb.menu.add_checkbutton(label = "Red") mb.menu.add_checkbutton(label = "Green")
ตวอยางการสรางและใชงาน Menubutton
ผลลพธทไดเมอสงรนโปรแกรม
จากตวอยางโปรแกรม แสดงการสรางและใชงาน Menubutton บรรทดท 4 สราง Menubutton ชอ
mb โดยเมนดงกลาวมขอความคอ "Colors" และเมนยอยจะปรากฏทางดานขวาของเมน "Colors" บรรทดท 6 สรางเมนยอยภายใน Menubutton บรรทดท 9 และ 10 เพมรายการในเมนยอยชอ "Red" และ "Green"
ตามล าดบ
9. Message (ขอความ) คอ Widget ทมลกษณะเปนขอความเพออธบายบางสงบางอยางในโปรแกรม
(โดยแกไขไมได) คลายกบ Label แตแตกตางกนคอ Message จะถกปรบขนาดการแสดงผลใหเหมาะสมโดย
อตโนมต
รปแบบค าสงส าหรบการสราง Message คอ
me = Message( root, option = value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของ Message
Option ดงตอไปนมคณสมบตการท างานทเหมอนกบ Widgets ทไดกลาวมาแลวขางตน คอ anchor,
bg, bitmap, bd, cursor, font, fg, height, image, justify, padx, pady, relief, text, textvariable, underline, width และ wraplength
ตวอยางการสรางและใชงาน Message
ผลลพธทไดเมอสงรนโปรแกรม
จากตวอยางโปรแกรม แสดงการสรางและใชงาน Message บรรทดท 4 สรางตวแปรชอ var เปนชนดสตรง ใชส าหรบเกบขอมลของ Message บรรทดท 5 สราง Message ชอ me โดยไมมขอความใดๆ
แสดงออกจอภาพ การควบคมการแสดงผลจะขนอยกบตวแปรทถกก าหนดใน textvariable นนคอ ตวแปร
ชอ var นนเอง บรรทดท 7 ก าหนดขอความใหมวา " Hello!! Welcome to Python Programming?" โดยใช
เมธอด set() ใหกบตวแปร var สงผลให Message เปลยนเปนขอความใหมทก าหนดขนทนท
10. Menu คอ Widget ทมลกษณะเปนเมนยอย แบงออกเปน 3 ประเภทคอ เมนแบบ popup, toplevel
และ pull-down ตวอยางเชน เมน File, Edit, Option, Windows และ Help เปนตน
รปแบบค าสงส าหรบการสราง Menu คอ
me = Menu( root, option=value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของ Menu
Option ดงตอไปนมคณสมบตการท างานทเหมอนกบ Widgets ทไดกลาวมาแลวขางตน คอ
activebackground, activeforeground, bg, bd, cursor, disabledforeground, font, fg, relief, image ส าห รบ
option ทแตกตางจาก Widgets ตวอนๆ แสดงในตารางดานลาง
Option ค าอธบาย activeborderwidth ก าหนดขนาดความกวางของกรอบเมน เมอผใชคลกเลอกเมน (ดฟอลตเทากบ 1
พกเซล) เชน Menu(root, activeborderwidth = 5) postcommand ก าหนดใหเมนเรยกใชเมธอดหรอฟงชน เมอมผใชคลกเลอกเมนดงกลาว เชน
Menu(root, postcommand = donothing) selectcolor ก าหนดสของป ม checkbutton หรอ radiobutton เมอป มเหลานถกเลอก เชน
Menu(root, selectcolor = "red")
tearoff โดยปกตเมอเพมรายการของเมนยอยเขาไปในเมนหลกจะเพมในต าแหนงท 1 แตเมอก าหนดให tearoff = 0 จะสามารถเพมเมนยอยในต าแหนงท 0 ได และเมนยอยนน ๆ จะสามารถแสดงผลเปนอสระจากเมนหลกได เชน Menu(menubar, tearoff = 1)
title ก าหนดขอความ title ใหกบ Menu Widget
Widget ชนด Menu มเมธอดทชวยสนบสนนการทางาน คอ
- เมธอด add_command(options) สรางเมนยอยในเมนหลก เชน
menubar = Menu(root)
filemenu = Menu(menubar, tearoff = 0)
filemenu.add_command(label = "New", command = donothing)
- เมธอด add_radiobutton(options) สรางเมนชนด checkbutton ในเมนหลก เชน
menubar = Menu(root)
filemenu = Menu(menubar, tearoff = 0)
filemenu.add_radiobutton(label = "Exit", selectcolor = "red")
- เมธอด add_checkbutton(options) สรางเมนชนด checkbutton ในเมนหลก เชน
menubar = Menu(root)
filemenu = Menu(menubar, tearoff = 0)
filemenu.add_checkbutton(label = "Exit", selectcolor = "red")
- เมธอด add_cascade(options) เพมชดของเมนยอยทเรยงตอเนองกนในเมนหลก เชน
menubar = Menu(root)
filemenu = Menu(menubar, tearoff = 0)
filemenu.add_command(label = "New", command = donothing)
filemenu.add_command(label = "Open", command = donothing)
filemenu.add_command(label = "Save", command = donothing)
menubar.add_cascade(label = "File", menu = filemenu)
- เมธอด add_separator() สรางเสนเพอแยกเมนยอยออกจากกน เชน
filemenu.add_separator()
- เมธอด add(type, options) เพมเมนยอยเขาไปยงเมนหลกแบบตอทาย (append) โดย type คอ ชนด
ของเมนตางๆ เชน cascade (submenu), checkbutton, radiobutton, หรอ separator และ options เชน font, foreground หรอ image เปนตน
- เมธอด delete(startindex [,endindex]) ลบชวงรายการในเมนยอย โดยระบรายการแรกใน
startindex และรายการตวสดทายใน endindex เชน
editmenu.delete(2, 4)
- เมธอด entryconfig(index, options) เมอเมนยอยถกสรางขนแลว สามารถแกไขคณสมบตของ
เมนยอยเหลานน ผานเมธอด entryconfig() โดยอางดวย index เชน
filemenu.entryconfig(1, label="Test")
- เมธอด index(item) สงคากลบเปนต าแหนงของเมนยอยทเลอก เชน
filemenu.index(2)
- เมธอด insert_separator(index) เพมเสนส าหรบแบงเมนยอย โดยการระบต าแหนงทตองการ
แทรกเสนดงกลาว เชน
filemenu.insert_separator(2)
- เมธอด invoke(index) เรยกใชค าสงทมหนาทเกยวของกบเมนทเรยกใชงาน ถาเปนเมนแบบ
checkbutton เมธอดดงกลาวจะท าหนาทสลบระหวางป มถกเลอก (set) หรอถกยกเลก (cleared) ถาเมนเปนแบบ radiobutton จะถกเซตหรอยกเลก เชน
filemenu.invoke(2)
- เมธอด type(index) สงคากลบเปนชนดของเมนยอย เชน ascade", "checkbutton", "command",
"radiobutton", "separator", or "tearoff" เปนตน เชน
filemenu.type(2)
ตวอยางการสรางและใชงาน Menu
ผลลพธทไดเมอสงรนโปรแกรม
จากตวอยางโปรแกรม แสดงการสรางและใชงานเมน บรรทดท 3 สรางฟงชนชอวา donothing() ท า หนาทสรางหนาตางวนโดวสใหมทเปนอสระจากวนโดวสหลก โดยฟงชนดงกลาวสรางป มและพมพ
ขอความบนป มวา "Do nothing button" บรรทดท 8 สรางวนโดวสหลกพรอมกบเมนหลกชอวา menubar
เพอใชส าหรบรองรบเมนยอยทจะสรางขนในค าสงล าดบถดไป
บรรทดท 11 สรางเมนยอยชดแรกมชอวา filemenu บนเมนหลก (Menubar) โดยเมนยอยดงกลาวจะ
ถกเพมในต าแหนงแรกของเมนหลกได (tearoff = 0) บรรทดท 12 – 16 สรางรายการของเมนยอยโดยเรมจาก "New", "Open", "New", "Save", …, "Close" ตามล าดบ บรรทดท 17 สรางเสนส าหรบแบงหมวดหมของ
เมนยอยออกจากกน บรรทดท 18 สรางเมนยอยชอวา "Exit" เมอผใชงานกดป มดงกลาว โปรแกรมจะยตการ
ท างานทนท (command = root.destroy) บรรทดท 20 เพมเมนยอยทสรางขนชอวา filemenu เขาไปยงเมนหลก ในลกษณะแบบล าดบชนคลายน าตก (Cascade) เมนหลกดงกลาวมชอวา "File"
บรรทดท 23 สรางเมนหลกชอวา "Edit" เพอรองรบเมนยอยๆ ทท าหนาทเกยวกบการแกไขแฟม
เชน "Cut", "Copy", "Paste" และเสนแยก (separator) ตามล าดบ (บรรทดท 24 - 30) ในบรรทดท 32 เพมรายการเมนยอยทสรางขนในเมนหลกชอ "Edit" ดวยเมธอด add_cascade(label = "Edit", menu = editmenu)
บรรทดท 35 – 39 สรางเมนยอยทท าหนาทเกยวกบการชวยเหลอ (Help) ค าสงทใชงานจะคลายกบการสรางเมน File และ Edit บรรทดท 41 เปนการกระตนใหวนโดวสหลกอพเดทเมนหลก เพอใหทกอยางท างานได
อยางถกตองดวยเมธอด root.config(menu = menubar) ซงจะตองกระท าทกครงเมอสรางเมนตางๆ เสรจ
เรยบรอยแลว
11. Radiobutton คอ Widget ทมลกษณะเปนป มกลมมชองวางอยภายใน เมอถกเลอกจะเปลยน
สถานะเปนสททบขน Radiobutton สวนใหญจะถกสรางเปนกลมของตวเลอก เพอใหผใชงานสามารถเลอก
รายการใดรายการหนงเพยงรายการเดยวเทานน เชน เลอกค าน าหนาชอ ชาย, นางสาว, นาง เปนตน
รปแบบค าสงส าหรบการสราง Radiobutton คอ
r = Radiobutton( root, option = value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของ Radiobutton
Option ดงตอไปนมคณสมบตการท างานทเหมอนกบ Widgets ทไดกลาวมาแลวขางตน คอ
activebackground, activeforeground, anchor, bg, bitmap, borderwidth, command, cursor, font, fg, height, highlightbackground, highlightcolor, image, justify, padx, pady, relief, selectcolor, selectimage, state, text,
textvariable, underline, width, wraplength ส าหรบ option ทแตกตางจาก Widgets ตวอนๆ แสดงในตาราง
ดานลาง
Option ค าอธบาย value ก าหนดคาใหกบ Radiobutton และจะสมพนธกบ variable เชน ถาก าหนดคาใน
value เทากบจ านวนเตม (int) ตวแปร variable จะตองเปนจ านวนเตมดวย ในกรณของสตรงกมลกษณะเชนเดยวกน เชน var = IntVar(), str = StringVar() Radiobutton(root, text = "Mr.", variable = var, value = 1) Radiobutton(root, text = "Mr.", variable = str, value = "Mr")
variable ก าหนดตวแปรทใชสาหรบเกบขอมลทเกดขนจากการท างานของ Radiobutton (ใชไดทงสตรงและจ านวนเตม) ส าหรบตวอยางเหมอนกบ value
Widget ชนด Radiobutton มเมธอดทชวยสนบสนนการทา งาน คอ
- เมธอด deselect() เคลยรคารายการทเลอกไวใน Radiobutton
- เมธอด flash() วาด Radiobutton ใหม
- เมธอด select() ก าหนดคาใหกบ Radiobutton
ตวอยางการสรางและใชงาน Radiobutton
ผลลพธทไดเมอสงรนโปรแกรม
จากตวอยางโปรแกรม แสดงการสรางและใชงาน Radiobutton บรรทดท 3 สรางฟงชนชอวา sel()
ท าหนาทก าหนดขอความใหมใหกบ Label เปน "You selected the option" ตามดวยคาทเกบอยในตวแปร
var (var.get()) โดยใชเมธอด Label.config() บรรทดท 8 สรางตวแปรชอ var เปนชนดจ านวนเตม ส าหรบ
เกบขอมลทเกดขนจากการดาเนนการใดๆ บน Radiobutton บรรทดท 9 สราง Radiobutton ชอ R1 มขอความวา "Mr." มคาเทากบ 1 (value = 1) เมอมการคลกเลอกป ม Radiobuttion ดงกลาว ผลลพธจาก value จะถกนา
มาเกบไวในตวแปรชอ var (variable = var) เมอป มดงกลาวถกคลกเลอก โปรแกรมจะเรยกฟงชน ชอวา sel() มาท างานทนท (command = sel)
บรรทดท 12 และ 16 สราง Radiobutton ชอ R1 และ R2 มขอความวา "Miss." และ "Mrs." โดยมคา
เทากบ 2 และ 3 ตามล าดบ เมอคลกเลอกป มทงสอง โปรแกรมจะเรยกใชงานฟงกชน sel() เชนเดยวกบเมน R1 บรรทดท 18 สราง Label ชอ label เพอแสดงผลลพธจากการคลกเลอกป มใน Radiobutton ออกจอภาพ
ผลการท างานของโปรแกรมแสดงดงรปดานบน
12. Scale คอ Widget ทมลกษณะเลอนสไลดขนลงหรอซายขวาได เพอท าหนาทแสดงขอบเขตของ
ขอมลทผใชตองการ เชน ปรบขนาดความเขมของส ความสวาง ความคมชด เปนตน
รปแบบค าสงส าหรบการสราง Scale คอ
s = Scale( root, option = value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของ Scale
Option ดงตอไปนมคณสมบตการท างานทเหมอนกบ Widgets ทไดกลาวมาแลวขางตน คอ
activebackground, bg, bd, command, cursor, font, fg, highlightbackground, highlightcolor, length, relief, state, variable, width สา หรบ option ทแตกตางจาก Widgets ตวอนๆ แสดงในตารางดานลาง
Option ค าอธบาย digits เปน Option ทใชส าหรบแสดงรปแบบของสเกล (scale) ม 3 รปแบบ คอ จ านวน
เตม (IntVar), จ านวนจรง (DoubleVar(float)), และสตรง (StringVar) เชน Scale(root, digits = 4, orient = HORIZONTAL)
from_ เปนเลขจ านวนเตมหรอจ านวนจรงทใชก าหนดขอบเขตเรมตนของสเกล เชน Scale(root, from_ = 0, to = 200, orient = HORIZONTAL)
label แสดงขอความก ากบสเกล ขอความจะปรากฏทมมดานซายบนเมอสเกลเปนชนดแนวนอน, ขอความจะปรากฏมมดานขวาบนเมอสเกลเปนชนดแนวตง คาดฟอลตจะไมแสดงขอความ เชน Scale(root, label = "Scale", orient = HORIZONTAL)
orient ก าหนด orient = HORIZONTAL เมอตองการใหสเกลวางอยในแนวนอน (แนวแกน x) และ orient = VERTICAL เมอตองการสรางสเกลในแนวตง (แกน y) คาดฟอลตเปนสเกลในแนวนอน (HORIZONTAL) เชน Scale(root, orient = HORIZONTAL)
repeatdelay ใชก าหนดเวลาเพอหนวงการเคลอนทของป มในสเกล (เคลอนทขน-ลง) ในกรณทผใชคลกในชองของสเกลคางไว (ดฟอลต = 300) เชน Scale(root, repeatdelay = 5, orient = HORIZONTAL)
resolution ก าหนดชวงของสเกลเมอเพมขนหรอลดลง เชน เมอก าหนดชวงของสเกลเทากบ from_ = -1.0 ถง to = 1.0 และก าหนด resolution = 0.5 สเกลจะเพมขนและลดลงดงนคอ -1.0, -0.5, 0.0, +0.5, และ +1.0 เชน Scale(root, from_ = -1.0, to = 1.0, resolution = 0.5, orient = HORIZONTAL)
showvalue โดยปกตคาของสเกลจะแสดงผลรวมกบแทบสเกลเสมอ เมอไมตองการแสดงคาของสเกลใหก าหนด showvalue = 0 เชน Scale(root, from_ = -1.0, to = 1.0, resolution = 0.5, showvalue = 0, orient = HORIZONTAL)
sliderlength ก าหนดขนาดของแทบสไลดของสเกล (โดยปกตแทบจะมขนาดเทากบ 30 พกเซล) เชน Scale(root, sliderlength = 10, orient = HORIZONTAL)
takefocus โดยปกต สเกลจะโฟกสเปนแบบวงรอบ เมอไมตองการพฤตกรรมดงกลาวใหก าหนด takefocus = 0 เชน Scale(root, from_ =1, to = 10, resolution = 1, takefocus = 0)
tickinterval ก าหนดการแสดงตวเลขชวงของสเกล เมอเปนสเกลแนวนอนจะแสดงชวงสเกลดานลาง แตถาเปนสเกลแนวตงจะแสดงดานซาย เชน Scale(root, from_ = 1, to = 10, tickinterval = 1, orient = HORIZONTAL)
to เปนเลขจ านวนเตมหรอจ านวนจรงทใชก าหนดขอบเขตสนสดของสเกล เชน Scale(root, from_ = 0, to = 200, orient = HORIZONTAL)
troughcolor ก าหนดสของรองหรอรางของสเกล เชน Scale(root, from_ = 1, to = 10, troughcolor = "red", orient = HORIZONTAL)
Widget ชนด Scale มเมธอดทชวยสนบสนนการท างาน คอ
- เมธอด get() คนคาของสเกลปจจบนทก าลงท างานอย
- เมธอด set(value) ก าหนดคาสเกลใหม
ตวอยางการสรางและใชงาน Scale
ผลลพธทไดเมอสงรนโปรแกรม
จากตวอยางโปรแกรม แสดงการสรางและใชงาน Scale บรรทดท 2 สรางฟงชนชอวา sel() ท าหนาท
แสดงขอความใหกบ Label มคาเทากบ "Value =" ตามดวยคาทเกบอยในตวแปร var (var.get()) โดยใชเมธอด Label.config() บรรทดท 7 สรางตวแปรชอ var เปนชนดจ านวนจรงขนาดใหญ (Double) ส าหรบเกบ
ขอมลทเกดขนจากการเลอนสเกล บรรทดท 8 สราง Scale ชอ scale มขอบเขตของสเกลตงแต 1 ถง 15 (from_ = 1, to = 15), ชวงของสเกลเทากบ 1 (resolution = 1), แสดงคาของสเกลอยดานซายตงแต 1 ถง 15
(tickinterval = 1), รางของสเกลเปนสเหลอง ( troughcolor = "yellow"), เปนสเกลในแนวต ง (orient =
VERTICAL), เมอผใชเลอนแทบของสเกล ผลลพธจะเกบไวในตวแปรชอ var (variable = var) บรรทดท 12 สรางป มชอ button มขอความวา "Get Scale Value" เมอคลกป มดงกลาวโปรแกรมจะเรยกฟงชน sel() มา
ท างาน ผลการท างานของโปรแกรมแสดงดงรปดานบน
13. Scrollbar คอ Widget ทมลกษณะเปนแทบสไลดเลอนขน-ลง หรอซาย-ขวาได เพอเพมขนาด
พนทส าหรบแสดงผลหรอใหผใชปอนขอมลเพมขน นยมใชงานรวมกบ Listbox, Text, Canvas และ Entry
เปนตน
รปแบบค าสงส าหรบการสราง Scrollbar คอ
s = Scrollbar( root, option = value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของ Scrolbar
Option ดงตอไปนมคณสมบตการท างานทเหมอนกบ Widgets (Scale) ทไดกลาวมาแลวขางตน คอ
activebackground, bg, bd, command, cursor, orient, repeatdelay, takefocus, troughcolor, width ส าห รบ option ทแตกตางจาก Widgets ตวอนๆ แสดงในตารางดานลาง
Option ค าอธบาย borderwidth ก าหนดขนาดของหวลกศรและแทบสไลดของ Scrollbar เชน
Scrollbar(root, borderwidth = 5) jump ก าหนดพฤตกรรมเมอเกดการเคลอนทของ Scrollbar (แทบ) เมอก าหนด jump = 0
จะท าใหสามารถเรยกใช command เพอเรยกใชฟงชนทก าหนดไวเขามาท างาน, เมอก าหนด jump = 1 จะปดการใชงาน command เชน Scrollbar(root, jump = 0, command = jumpCall)
repeatinterval ก าหนดระยะเวลาเมอผใชกดคางทรางของ Scrollbar กอนทแทบของ Scrollbar จะเคลอนทไปยงทศทางทผใชตองการ คาดฟอลตเทากบ 300 มลลวนาท เชน Scrollbar(root, repeatdelay = 100)
Widget ชนด Scale มเมธอดทชวยสนบสนนการท างาน คอ
- เมธอด get() คนคาต าแหนงปจจบนของแทบทก าลงท างานอยซงม 2 คาคอ (a, b) โดย a
คอ ต าแหนงทอยดานซาย (Scrollbar เปนชนดแนวนอน) และดานบน (Scrollbar เปนชนดแนวตง) ของแทบ
และ b คอ คอต าแหนงทอยดานขวาและลางของแทบ เชน print(scrollbar.get()) ผลลพธคอ (0.41, 0.51) เมอ
Scrollbar เปนแนวตง คา 0.41 คอต าแหนงของแทบดานบน และ 0.51 คอต าแหนงของแทบดานลาง
- เมธอด set(first, last) ใชส าหรบกรณทน า Scrollbar ไปใชกบ Widget ชนดอนๆ โดย
Widgets ทตองการเรยกใชเมธอดดงกลาวจะเรยกผาน xscrollcommand หรอ yscrollcommand แทน ผลลพธทไดเหมอนกบการเรยกเมธอด get() นนเอง
ตวอยางการสรางและใชงาน Scrollbar
ผลลพธทไดเมอสงรนโปรแกรม
จากตวอยางโปรแกรม แสดงการสรางและใชงาน Scrollbar บรรทดท 5 สราง Scrollbar ชอ scrollbar
บรรทดท 8 สราง Listbox ชอวา mylist จากน นท าการเพม Scrollbar เขาไปใน Listbox ในแนวต งหรอแนวแกน y ดวยค าสง yscrollcommand (yscrollcommand = scrollbar.set) บรรทดท 10 โปรแกรมใชลป for
สงพมพ "This is line number" และตามดวยตวเลขทเรมตงแต 0 – 99 ลงใน Listbox โดยใชเมธอด insert() สงผลให Scrollbar สรางแทบสไลดมขนาดทครอบคลมรายการทงหมด (ถาสงพมพรายการนอยๆ เชน 5
รายการ Scrollbar จะไมสรางแทบส าหรบเลอนสไลดให) บรรทดท 14 โปรแกรมสงกระตนให Scrollbar ท า
งานดวยเมธอด config() ผานออปชน command ผลการท างานของโปรแกรมแสดงดงรปดานบน
14. Text คอ Widget ทอนญาตใหผเขยนโปรแกรมสามารถสรางขอความเพออธบายบางสง
บางอยางในโปรแกรม โดย Text มความสามารถหลายอยาง เชน เปลยนสพนขอความ สตวอกษร รปแบบ
ฟอนต ขนาด และอนๆ
รปแบบค าสงส าหรบการสราง Text คอ
t = Text( root, option = value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของ Text
Option ดงตอไปนมคณสมบตการท างานทเหมอนกบ Widgets ทไดกลาวมาแลวขางตน คอ bg, bd,
cursor, font, fg, height, highlightbackground, highlightcolor, padx, pady, relief, state, width, xscrollcommand, yscrollcommand ส าหรบ option ทแตกตางจาก Widgets ตวอนๆ แสดงในตารางดานลาง
Option ค าอธบาย exportselection โดยปกตเมอผใชเลอกขอความภายใน Text ขอมลทถกเลอกจะถกสงไปเกบไวใน
คลปบอรด (Clipboard) โดยอตโนมต เมอไมตองการใหขอมลดงกลาวถกสงไปยงคลปบอรด ใหก าหนด exportselection = 0 เชน Text(root, exportselection = 0)
highlightthickness ก าหนดขนาดของ Highlight Focus ของ Text คาดฟอลตเทากบ 1 แตถาไมตองการใหออฟชนดงกลาวท างานใหก าหนดเปน 0 เชน Text(root, highlightthickness = 0)
insertbackground ก าหนดสของของเคอรเซอร ณ ต าแหนงปจจบน เชน Text(root, insertbackground = "red")
insertborderwidth ขนาดของกรอบแบบ 3D รอบๆ เคอรเซอร คาดฟอลตคอ 0 insertofftime ก าหนดเวลาใหเคอรเซอรหยดท างาน มหนวยเปนมลลวนาท คาดฟอลตเทากบ
300 มลลวนาท ถาไมตองการใหเคอรเซอรกระพรบ ก าหนดให insertofftime = 0 เชน Text(root, insertbackground = "red", insertofftime = 100)
insertontime ก าหนดเวลาใหเคอรเซอรท างาน (กระพรบ) มหนวยเปนมลลวนาท คาดฟอลตเทากบ 600 มลลวนาท ถาไมตองการใหเคอรเซอรปรากฏ ก าหนดให insertofftime = 0 เชน Text(root, insertbackground = "red", insertofftime = 0)
insertwidth ก าหนดขนาดของเคอรเซอร คาดฟอลตเทากบ 2 พกเซล เชน Text(root, insertbackground = "red", insertwidth = 10)
selectbackground ก าหนดสพนหลงเมอผใชเลอกขอความ เชน Text(root, insertbackground = "red", selectbackground = "black")
selectborderwidth ก าหนดความกวางของกรอบรอบๆ Text spacing1 ก าหนดขนาดความกวางดานบนของขอความในแตละบรรทด คาดฟอลตเทากบ 0
เชน Text(root, spacing1 = 10) spacing2 ก าหนดระยะหางระหวางบรรทดของขอความใน Text คาดฟอลตเทากบ 0 เชน
Text(root, spacing2 = 10) spacing3 ก าหนดขนาดความกวางดานลางของขอความในแตละบรรทด คาดฟอลตเทากบ 0
เชน Text(root, spacing3 = 10) tabs ก าหนดขนาดของแทบในขอความ หนวยเปนพกเซล เชน
Text(root, tabs=100) (ใหผใชคลกทขอความแลวทดสอบกดทป ม TAB) wrap ก าหนดขนาดของขอความทจะถกครอบ (Focus) ถาก าหนด wrap = WORD
โปรแกรมครอบทละค า (แยกดวยขอความวาง) แตถาก าหนดเปน wrap = CHAR จะเปนการครอบทละตวอกษรแทน เชน Text(root, wrap = WORD)
xscrollcommand ก าหนด Scrollbar ใหกบ Text ในแนวนอน ใชในกรณทขอความมขนาดความยาวมากๆ เชน Text(root, xscrollcommand = xscrollbar.set, yscrollcommand = yscrollbar.set)
yscrollcommand ก าหนด Scrollbar ใหกบ Text ในแนวตง เชน Text(root, xscrollcommand = xscrollbar.set, yscrollcommand = yscrollbar.set)
Widget ชนด Text มเมธอดทชวยสนบสนนการท างาน คอ
- เมธอด delete(startindex [,endindex]) ลบตวอกษรหรอขอความใน Text โดยระบชวง
ของขอความ ถาก าหนดเฉพาะ startindex ขอความจะถกลบตงแต startindex ถงต าแหนงสนสดของขอความ
เชน text.delete(1.0) โดย 1 หมายถงบรรทดท 1, 0 หมายถงอกษรตวท 0 (linenumber.character number)
- เมธอด get(startindex [,endindex]) คนคาเปนตวอกษรหรอขอความจาก Text โดยใช
startindex ก าหนดต าแหนงเรมตนและต าแหนงสดทายของขอความดวย endindex เชน print(text.get(1.0,
END))
- เมธอด index(index) คนคาสมบรณ (absolute value) จาก Text โดยใช index ก าหนด
ต าแหนง เชน print(text.index(4.0))
Text ยงมเมธอดทชวยส าหรบการท า Marks, Tabs และ Indexes ดงน
- เมธอด index(mark) คนคาแถวและคอลมนทผใชท าเครองหมายไว (Marks) เชน
text.mark_set("Python", INSERT)
print(text.index(INSERT))
ผลลพธทไดคอ 1.26 (แถวท 1, คอลมนท 26)
- เมธอด mark_gravity(mark [,gravity]) ก าหนดลกษณะทศทางของการ Marks ซง
เปนไปได 2 ทศทาง คอ ทศทางทเปนจดอางองทางดานขวา (RIGHT) หรอดานซาย (LEFT) เชน ขอความวา
"This is Python Programming" เมอท าการ Marks ไวกบขอความเปนค าวา "Python" และท าการก าหนดทศทางเปน LEFT แสดงรปแบบค าสง ดงน
text.insert(INSERT, "This is Python Programming")
text.mark_set("Python", INSERT)
text.mark_gravity("Python", LEFT)
- เมธอด mark_names() คนคาขอความทงหมดท Marks ไว เชน print(text.mark_names())
- เมธอด mark_set(mark, index) ก าหนดต าแหนง Marks ใหม เชน
text.insert(INSERT, "This is Python Programming")
text.mark_set("Python", CURRENT)
- เมธอด mark_unset(mark) เคลยรคาท Marks ไว เชน text.mark_unset(CURRENT)
Text ยงมเมธอดทชวยส าหรบการท างานเกยวกบ Tag ดงน
- เมธอด tag_add(tagname, startindex[,endindex] ...) ท าหนาทก าหนดปายชอลงใน
ขอความใน Text โดย tagname คอชอของ tag, startindex คอต าแหนงเรมตนทตองการเพม tag, endindex
(option = ไมใสกได) ต าแหนงสดทายทตองการเพม tag เชน text.tag_add("here", "1.0", "1.4") จากค าสง
ดานบนเปนการก าหนด tag ชอ "here" โดยขนาดของ tage มความยาวตงแตตวอกษรท 0 (.0) ถง 4 (.4) และอยในบรรทดท 1 (1.) ของขอความใน Text
- เมธอด tag_config ท าหนาทปรบแตงคณสมบตตางๆ หลงจากทสราง Text ขนมาใชงาน
แลว เชน การก าหนดสพนหลง สตวอกษร ขดเสนใต เปนตน เชน
text.tag_config("here", background="yellow", foreground="blue")
- เมธอด tag_delete(tagname) ท าหนาทลบ tag จากทเคยก าหนดไว
- เมธอด tag_remove(tagname [,startindex[.endindex]] ...) ท าหนาทลบ tag ออกจาก
พนททเคยก าหนดไว แตไมลบ Tag ทนยามเอาไวในโปรแกรม
ตวอยางการสรางและใชงาน Text
ผลลพธทไดเมอสงรนโปรแกรม
จากตวอยางโปรแกรม แสดงการสรางและใชงาน Text บรรทดท 3 สรางเฟรมชอ frame มความหนา
ของกรอบเทากบ 2 พกเซล เปนชนดกรอบแบบรองลก บรรทดท 4 และ 5 สรางกรดบนเฟรมมขนาดเทากบ 1 แถว 1 คอลมน บรรทดท 6 และ 7 สราง Scrollbar ในแนวนอนลงบนเฟรม วางในต าแหนงแถวท 1 และ
คอลมนท 0 ในกรด และวาง Scrollbar จากดานทศตะวนออกไปทศตะวนตก (sticky=E+W) บรรทดท 8 และ 9 สราง Scrollbar ในแนวตงลงบนเฟรม วางในต าแหนงแถวท 0 และคอลมนท 1 ในกรด และวาง Scrollbar
จากดานทศเหนอไปทศใต (sticky=N+S)
บรรทดท 11 สราง Text ลงบนเฟรม โดยม Scrollbar อยดานขวา (yscrollcommand) และดานลาง (xscrollcommand) ของ Text ในบรรทดท 12 Text จะถกวางลงในแถวท 0 คอลมน 0 ของกรดใน 4 ทศทาง
(row=0, column=0, sticky=N+S+E+W) บรรทดท 14 และ 15 ออกค าสงให scrollbar แสดงผลใน Text
บรรทดท 17 เพมขอความวา "Hello...Python Programming" ลงใน Text โดยใชต าแหนงท Marks ไวคอ INSERT (โดยปกต INSERT Mark จะอยในต าแหนงดานทายของขอความใน Text สามารถเปลยนจด
Marks ของ INSERT ใหมไดโดยใชเมธอด mark_set() ทอธบายไวในหวขอทผานมา) บรรทดท 18 เพมขอความวา " Bye Bye....." ลงใน Text โดยใชต าแหนงท Marks ไวคอ END ซงเปนต าแหนงสดทายใน
ขอความ ผลลพธจากการท างานของบรรทดท 17 และ 18 คอขอความวา "Hello...Python ProgrammingBye
Bye....." บน Text
บรรทดท 19 สราง tag ชอ "here" โดยครอบคลมตวอกษรตงแตตวท 0 – 3 ของบรรทดท 1 เอาไว ("
here", "1.0", "1.4") คอขอความวา "Hell" บรรทดท 20 สราง tag ชอ "start" โดยครอบคลมตวอกษรตงแตตว
ท 8 – 13 เอาไว คอขอความวา "Python" บรรทดท 21 สงใหระบายส tage ชอ "here" โดยมสของพนหลงเปนสเหลอง และตวอกษรเปนสน าเงน บรรทดท 22 สงใหระบายส tage ชอ "start" โดยมสของพนหลงเปนสด า
และตวอกษรเปนสเขยวตามล าดบ ผลการท างานของโปรแกรมแสดงดงรปดานบน
15. Toplevel เปน Widget ทอยบนสดของวนโดวส ไมจ าเปนตองมวนโดวสอนๆ คอยควบคมหรอ
อยภายใตวนโดวสใดๆ หรอพดงายๆ คอ Toplevel จะถกดแลจาก Window Manager โดยตรงนนเอง ดง
แสดงดงรป
รปแบบค าสงส าหรบการสราง Toplevel คอ
t = Toplevel( root, option=value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของ Toplevel
Option ดงตอไปนมคณสมบตการท างานทเหมอนกบ Widgets ทไดกลาวมาแลวขางตน คอ bg, bd,
cursor, font, fg, height, relief, width เปนตน
Widget ชนด Toplevel มเมธอดทชวยสนบสนนการท างาน คอ
- เมธอด deiconify() แสดงวนโดวสทนท เมอเรยกใชเมธอดดงกลาว เชน
top = Toplevel()
top.deiconify()
- เมธอด frame() คนคา system-specific window identifier เชน
print(text.get(1.0, END))
ผลลพธคอ 0x2403c2
- เมธอด group(window) จดกลมของวนโดวส
- เมธอด iconify() แปลงวนโดวสไปเปน icon
- เมธอด protocol(name, function) ลงทะเบยนฟงชนเพอท าหนาทเปน callback ฟงชน
- เมธอด state() คนคาสถานะปจจบนของวนโดวส คาทเปนไปไดคอ Normal, iconic,
withdrawn และ icon
- เมธอด withdraw() ลบวนโดวสออกจากจอภาพ
- เมธอด maxsize(width, height) ก าหนดขนาดวนโดวสทใหญทสด
- เมธอด minsize(width, height) ก าหนดขนาดวนโดวสทเลกทสด
- เมธอด title(string) ก าหนด title ของวนโดวสทสรางขน
ตวอยางการสรางและใชงาน Text (ตวอยางท 1)
ผลลพธทไดเมอสงรนโปรแกรม
จากตวอยางโปรแกรม แสดงการสรางและใชงาน Toplevel บรรทดท 3 สรางวนโดวสหลกหรอ root
window ชอวา root บรรทดท 4 สรางวนโดวสหลกทเปนอสระจาก root ชอวา top บรรทดท 5 ก าหนด title ของ top เทากบ "Toplevel" บรรทดท 6 สงวาดวนโดวสใหมดวยเมธอด deiconify() ผลลพธแสดงดงรป
ดานบน
ตวอยางการสรางและใชงาน Text (ตวอยางท 2)
ผลลพธทไดเมอสงรนโปรแกรม
ตวอยางโปรแกรม บรรทดท 3 สรางหนาตางหลกชอ root จากนนบรรทดท 4 โปรแกรมลบวนโดวส
ดวยเมธอด withdraw() บรรทดท 6 โปรแกรมสรางวนโดวสใหมชอ top โดยสบทอดคณสมบตทงหมดมาจาก
วนโดวส root บรรทดท 7 โปรแกรมท าการลงทะเบยนเมธอด root.destroy กบ "WM_DELETE_WINDOW" เพอใชส าหรบลบหรอทาลายวนโดวสออกจากจอภาพ บรรทดท 9 สรางป มชอ but มขอความบนป มคอ
'deiconify' บรรทดท 10 เปนการก าหนดวาเมอคลกป มดงกลาว โปรแกรมจะเรยกเมธอด root.deiconify เพอยตการท างานของวนโดวส ผลลพธแสดงดงรปดานบน
16. Spinbox คอ Widget ทเหมอนกบ Entry แตสามารถก าหนดขอบเขตของขอมลได ดงแสดงใน
รป
รปแบบค าสงส าหรบการสราง Spinbox คอ
s = Spinbox( root, option=value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของ Spinbox
Option ดงตอไปนมคณสมบตการท างานทเหมอนกบ Widgets ทไดกลาวมาแลวขางตน คอ activebackground, bg, bd, command, cursor, disabledbackground, disabledforeground, font, fg, justify,
relief, repeatdelay, repeatinterval, state, textvariable, width, wrap, xscrollcommand ส า ห รบ option ทแตกตางจาก Widgets ตวอนๆ แสดงในตารางดานลาง
Option ค าอธบาย format ก าหนดรปแบบของสตรงในการแสดงผล เชน Spinbox(root, from_= 0, to = 10,
format = '%10.4f') from_ ก าหนดจ านวนบรรทดเรมตนของ spinbox เชน Spinbox(root, from_ = 0, to = 10,
format = '%10.4f') to ก าหนดจ านวนบรรทดสดทายของ spinbox เชน Spinbox(root, from_ = 0, to =
10, format = '%10.4f')
Widget ชนด Spinbox มเมธอดทชวยสนบสนนการท างาน คอ
- เมธอด delete(startindex [,endindex]) ลบตวอกษรหรอขอความใน Spinbox โดยระบชวงของ
ขอความ ถาก าหนดเฉพาะ startindex ขอความจะถกลบตงแต startindex ถงต าแหนงสนสดของขอความ เชน
spin.delete(1.0) โดย 1 หมายถงบรรทดท 1, 0 หมายถงอกษรตวท 0 (linenumber.character number)
- เมธอด get(startindex [,endindex]) คนคา เปนตวอกษรหรอขอความจาก Spinbox โดยใช
startindex ก าหนดต าแหนงเรมตน และต าแหนงสดทายของขอความดวย endindex เชน print(spin.get(1.0,
END))
- เมธอด index(index) คนคาสมบรณ (absolute value) จาก Spinbox โดยใช index ก าหนดต าแหนง
เชน print(spin.index(4.0))
- เมธอด insert(index [,string]...) แทรกขอความในต าแหนงทระบใน index เชน spin.insert(1.0,
"Python")
ตวอยางการสรางและใชงาน Spinbox
ผลลพธทไดเมอสงรนโปรแกรม
จากตวอยางโปรแกรม แสดงการสรางและใชงาน Spinbox ในบรรทดท 4 สราง Spinbox ชอ spin มจ านวนบรรทดเทากบ 10 บรรทด เพอใหผใชงานสามารถปอนขอมลไดเพมขน โดยการคลกเลอกทลกศรขน
และลงทอยทางดานขวาของ Spinbox
17. LabelFrame คอ Widget ทผสมผสานกนระหวาง Frame กบ Label นนคอ มความสามารถใน
การรองรบ Widgets ตางๆ เหมอนเฟรม และจดการกบขอความไดเหมอนกบ Label นนเอง
รปแบบค าสงส าหรบการสราง LabelFrame คอ
lf1 = LabelFrame( root, option = value, ... )
พารามเตอร คอ
- root คอ วนโดวสหลก (root window)
- option คอ คณสมบตตางๆ ของ LabelFrame
Option ดงตอไปนมคณสมบตการท างานทเหมอนกบ Widgets ทไดกลาวมาแลวขางตน คอ bg, bd, cursor, font, height, highlightbackground, highlightcolor, highlightthickness, relief, text, width ส าห รบ
option ทแตกตางจาก Widgets ตวอนๆ แสดงในตารางดานลาง
Option ค าอธบาย labelAnchor ก าหนดต าแหนงทจะวางเลเบล คาดฟอลตคอ nw ซงมรปแบบดงรป เชน
LabelFrame(root, text = "Group", labelanchor="n", padx = 5, pady = 5)
ตวอยางการสรางและใชงาน LabelFrame
ผลลพธทไดเมอสงรนโปรแกรม
จากตวอยางโปรแกรม แสดงการสรางและใชงาน LabelFrame ในบรรทดท 4 สราง LabelFrame ชอ
lf1 โดยมขอความวา "Group" วางอยในทศเหนอ (labelanchor = "n") ของวนโดวส บรรทดท 7 สราง Entry และเพมลงใน LabelFrame
18. MessageBox คอ Widget ทใชส าหรบแสดงขอความทเหมาะสม หรอตามทผเขยนโปรแกรม
ตองการ เชน ขอความเกยวกบการกระท าทผดพลาดของผใชงาน ขอความแจงเตอนตางๆ เปนตน
รปแบบค าสงส าหรบการสราง MessageBox คอ
mb = messagebox.FunctionName(title, message [, options])
พารามเตอร คอ
- title คอ title ของ messagebox
- message คอ ขอความทตองการแสดงใน messagebox
- options คอ คณสมบตตางๆ ของ MessageBox เชน ABORT, RETRY หรอ IGNORE
ส าหรบฟงชน (FunctionName) ทสามารถใชงานไดดงน
- showinfo()
- showwarning()
- showerror()
- askquestion()
- askokcancel()
- askyesno()
- askretrycancel()
ตวอยางการสรางและใชงาน messagebox
ผลลพธทไดเมอสงรนโปรแกรม
จากตวอยางโปรแกรม แสดงการสรางและใชงาน messagebox ในบรรทดท 4 สรางฟงชนชอ hello()
โดยพมพขอความวา "Hello World" ผาน messagebox บรรทดท 7 สรางป มชอ B1 มขอความวา "Say Hello" เมอกดป มดงกลาว โปรแกรมจะเรยกฟงชน hello() มาท างาน
19. Widgets อนๆ ทนาสนใจ ไพธอนยงม Widgets ทนาสนใจอนๆ เชน Paned Windows, Notebook,
Tree, Combobox, SizeGrip, Progressbar ซงมรปแบบคอ
Paned Windows Notebook Tree
Combobox SizeGrip Progressbar
ตวอยางโปรแกรมแสดงการสรางและใชงาน Widgets ตางๆ ทแสดงไวในรปดานบน
ผลลพธทไดเมอสงรนโปรแกรม
6. ตวอยางการประยกตใชงานไพธอน GUI
ในหวขอนผเขยนจะนาเสนอรปแบบการใชงานไพธอน GUI ประยกตเขากบการใชงานจรง ซงมเปาหมายเพอตองการใหผอานเขาใจวธการพฒนาไพธอน GUI ในภาพรวม โดยการน าเอา Widgets ตางๆ ท
อธบายมาแลวในตอนตน ประกอบเขาเปนแอพพลเคชนท มความซบซอนมากขน เพอเปนแนวทางในการ
พฒนาโปรแกรมตอไปในอนาคตได ซงจะแสดงไว 1 ตวอยางคอ โปรแกรมเครองคดเลข และเกม Tic-Tac-Toe ดงน
โปรแกรมเครองคดเลขขนาดเลก (Mini-Calculator) มขนตอนในการออกแบบและพฒนา
โปรแกรมดงน
1) สเกตช (Sketch) เครองคดเลขลงบนกระดาษแบบคราวๆ ดงรป
2) น าเขาโมดลในการสราง GUI (tkinter)
from tkinter import *
3) ประกาศตวแปรชนดโกลบอล (global) เพอใหฟงชนตางๆ สามารถเรยกใชงานไดทกๆ ทในโปรแกรม
expression = ""
4) สรางหนาตางหลก (วนโดวสหลก) หรอ root window
root = drawMainWindow()
5) สรางเมน (Menubar)
menu = drawMenuBar()
6) สรางหนาจอแสดงผลลพธของเครองคดเลข (Entry Widget)
display = drawDisplay()
7) สรางป มของเครองคดเลขทงหมด
drawCalButton()
8) เขยนโปรแกรมดกจบและควบคมเหตการณตางๆ ทเกดขนบนเครองคดเลข
handleEvents()
9) ก าหนดใหโปรแกรมวนลบรบค าสงไปเรอยๆ จนกวาจะยตโปรแกรม
mainloop()
ตวอยางโปรแกรมชอ calculator.py
ผลลพธทไดเมอสงรนโปรแกรม
จากตวอยางโปรแกรม บรรทดท 1 เปนการน าเขาโมดล tkinter เพอสราง GUI ส าหรบเครองคดเลข
บรรทดท 3 ประกาศตวแปรชนดโกลบอลชอ expression เพอใชส าหรบเกบนพจนคณตศาสตรทผใชปอนใหกบเครองคดเลข บรรทดท 5 สรางหนาตางหลก โดยม title คอ "Mini-Calculator" บรรทดท 10 สรางเมน
ทมเมนยอยเพยงเมนเดยวคอ Quit เพอใชส าหรบออกจากโปรแกรม บรรทดท 16 สราง Entry เพอรบขอมลจากผใชงานเพอน ามาประมวลผลภายในโปรแกรมเครองคดเลข โดยวางลงบนกรดในต าแหนงแถวท 1
คอลมนท 0 และวางเลเบลเพอคนระหวางป มเครองคดเลขกบ Entry โดยวางอยบนกรดในต าแหนงแถวท 2
คอลมนท 0
บรรทดท 22 สรางฟงชนชอ collectExpression() ท าหนาทเชอมตอนพจนของคณตศาสตรทผใชงาน
ปอนเขามาดวยป ม บรรทดท 28 สรางฟงชนชอ insertExpression() ท าหนาทแสดงนพจนคณตศาสตรออกทางจอภาพ บรรทดท 31 สรางฟงชนชอ clearDisplay() ท าหนาทลบนพจนคณตศาสตรแบบครงเดยว
ทงหมด และลบแบบทละตว บรรทดท 42 สรางฟงชนชอ handleEvents() ท าหนาทตอบสนองเมอผใชงาน
กดป มตางๆ บนเครองคดเลข บรรทดท 82 สรางฟงชนชอ drawCalButton() ท าหนาทวาด Widgets ตางๆ ลงบนหนาตางวนโดวส บรรทดท 104 สรางฟงชน calculator() ท าหนาทควบคมการท างานทงหมดของ
โปรแกรม โดยรวบรวมฟงชนหลกๆ เขาไวดวยกน บรรทดท 111 โปรแกรมตรวจสอบวามการสรางตวแปร
__main__ ไวหรอไม (โดยปกตไพธอนจะสรางตวแปร __main__ ไวแลวอตโนมต) ถาประกาศตวแปรดงกลาวไวในโปรแกรม จะสงผลใหสามารถเรยกฟงชน calculator() เขามาท างานได เพราะเงอนไขใน if
เปนจรงนนเอง