ภาษาโปรแกรมมิ่งไพธอน Python programming language
เอกวิทยาการคอมพิวเตอรì คณะวิทยาศาสตรì มหาวิทยาลัยนเรศวร 2 รายชื่อผูéจัดทำ
ชื่อ รหัสนิสิต หนéาที่ดำเนินการ นายฉัตรชัย ดำดี 46320388 แบบฝกหัด นายทรงยศ คชนิล 46320511 จัดทำเอกสารการเรียน นางสาวธัญญากร แกéวประสงคì 46320610 ผูéชèวยสอน นายประจักษì เจตะภัย 46320693 ผูéชèวยสอนและแบบฝกหัด นายมารุต จันทรìบัว 46320818 แบบฝกหัด นางสาวศรินยา อยูèสุขดี 46320925 ผูéชèวยสอน นางสาวณัฐณิชา คงประกอบ 46321097 ผูéชèวยสอน นายอุทิศ ศักดิ์สิทธิ์ 46321139 ผูéชèวยสอนและแบบฝกหัด นายอรรณพ สุวัฒนพิเศษ 46321150 ผูéสอนและจัดทำเอกสารเรียน
3 4 คำนำ
ภาษาไพธอนเปนภาษาที่ไดéรับความนิยมอยèางมากในปจจุบันเนื่องจากความสามารถที่สูง, การเรียนรูéที่ รวดเร็ว, การเขียนระบบที่เขéาใจงèาย และสามารถขยายขีดความสามารถในการสรéางโปรแกรมและซอฟตìแวรì ที่สูงมากขึ้นตลอดเวลา ทางทีมผูéจัดทำจึงเล็งเห็นวèาควรนำความรูé ความเขéาใจในการเขียนโปรแกรมดéวยภาษา ไพธอนมาเผยแพรè ดéวยจะไดéผูéอื่นไดéรับความรูéและไดéเขéาถึงภาษาที่เขียนใจงèาย, ทำงานรวดเร็ว และสามารถ สรéางสรรคìงานไดéอยèางมีความสามารถสูง อีกทั้งซอฟตìแวรìที่ใชéสรéางโปรแกรมและซอฟตìแวรìดéวยภาษาไพธอน นั้นมีทั้งแจกฟรี, รหัสเปด และเชิงธุรกิจ ซึ่งมีขีดความสามารถที่แตกตèางกัน แตèถึงแมéจะเปนซอฟตìแวรìที่ใชé เขียนโปรแกรมดéวยภาษาไพธอนจะแจกฟรี หรือเปนรหัสเปด ก็ไมèไดéดéอยไปกวèาเชิงธุรกิจเลย จึงเปนทางเลือก ที่ดีที่จะศึกษาเปนทางเลือกอีกทางหนึ่งนอกเหนือจากภาษาอื่น ๆ ที่ไดéรับความนิยมอยูèแลéว ทางทีมงานจึงหวังวèาทèานผูéที่นำเอกสารนี้ไปใชéในการศึกษาจะไดéรับประโยชนìสูงสุดในการเขียนโปรแกรม และซอฟตìแวรìดéวยภาษาไพธอน
ทีมผูéจัดทำ
5 6 สารบัญ
1 แนะนำภาษาไพธอน 13 1.1 ประวัติ ...... 13 1.1.1 Python 1.0 ...... 13 1.1.2 Python 2.0 ...... 14 1.1.3 อนาคต ...... 14 1.2 หลักปรัชญาของภาษาไพธอน ...... 15 1.3 Language Evaluation Criteria ...... 15 1.4 ขéอเดèนของภาษาไพธอน ...... 15 1.5 Category และ Application Domains ...... 16 1.5.1 Web และ Internet Development ...... 16 1.5.2 Database Access ...... 16 1.5.3 Desktop GUI ...... 17 1.5.4 Scientific และ Numeric computation ...... 17 1.5.5 Education ...... 17 1.5.6 Network programming ...... 17 1.5.7 Software builder และ Testing ...... 17 1.5.8 Game และ 3D Graphics Rendering ...... 17 1.6 ซอฟตìแวรìที่เขียนดéวยไพธอน ...... 17 1.7 ตัวอยèางความสำเร็จของไพธอน ...... 18
2 การแสดงผลเบื้องตéน (Printing) 21
3 การตั้งตัวชื่อแปร และคำสงวน (Reserved word หรือ Keywords) 23 3.1 การตั้งตัวชื่อแปร ...... 23 3.2 คำสงวนในการใชéงาน (Reserved words, Keywords) ...... 23
4 การคำนวณทางคณิตศาสตรì (Arithmetic Mathematics) 25 4.1 การคำนวณพื้นฐาน (normal arithmetic operators) ...... 25 4.2 การคำนวณผèานฟงกìชั่นภายใน (Built-in Math Functions) ...... 26 4.2.1 การหาคèาสัมบูรณì (absolute value) ...... 26 4.2.2 จำนวนที่นéอยที่สุด และมากที่สุดในกลุèม (smallest or largest values) ...... 26 4.2.3 กำหนดจำนวนตัวเลขทศนิยม (specified number of digits) ...... 27 4.2.4 หาผลรวมทั้งหมดในชุดขéอมูล (adds numbers in a sequence.) ...... 27 4.2.5 ชèวงของขéอมูลตัวเลข (range of numbers.) ...... 27
7 8 สารบัญ
5 ชนิดของตัวแปร (Data type) 29 5.1 ตัวเลข (Numbers) ...... 29 5.1.1 จำนวนเต็ม(Integers) ...... 29 5.1.2 จำนวนจริง (Floating-point numbers) ...... 30 5.1.3 จำนวนเชิงซéอน (Complex Numbers) ...... 31 5.2 ชนิดขéอมูลแบบการรวมกลุèมขéอมูล (Collection Data Types) ...... 32 5.2.1 ลิสตì (List) ...... 32 5.2.2 ดิกชันนารี (Dictionary หรือ Groupings of Data Indexed by Name) . . . . . 33 5.2.3 ทับเบิ้ล (Tuples) และ อนุกรม (Sequences) ...... 34 5.2.4 เซ็ต (Sets) ...... 34 5.2.5 ฟงกìชั่นที่นèาสนใจเกี่ยวขéองกับลิสตìและดิกชันนารี ...... 35 5.3 สายอักขระ (String หรือ Array of Characters) ...... 39 5.3.1 ฟงกìชั่นที่นèาสนใจเกี่ยวขéองกับสายอักขระ ...... 42
6 การเปรียบเทียบ (Comparisons) 45
7 นิพจนìทางตรรกะศาสตรì (Boolean Expressions) 47 7.1 AND (และ) ...... 47 7.2 OR (หรือ) ...... 47 7.3 NOT (ไมè) ...... 48
8 ชèวงของการทำงาน (Statement block) และ ชèวงชีวิตของตัวแปร (Life time หรือ Variable scope) 49 8.1 ชèวงของการทำงาน (Statement block) ...... 49 8.2 ชèวงชีวิตของตัวแปร (Life time หรือ Variable scope) ...... 49
9 การควบคุมทิศทางของโปรแกรม (Control flow, Flow of Control หรือ Alternatively) 51 9.1 การตัดสินใจ (Decisions, Choice หรือ Selection) ...... 51 9.1.1 if Statements ...... 51 9.1.2 switch Statements ...... 53 9.2 การวนทำซ้ำ (Loop) ...... 53 9.2.1 while Statements ...... 53 9.2.2 for Statements ...... 53 9.2.3 pass, break, continue และ else Clauses Statements ...... 54 9.2.4 do-while Statements ...... 55 9.3 การจัดการความผิดปกติของโปรแกรม (Error Checking) ...... 55 9.3.1 assert Statements ...... 55 9.3.2 try-except และ raise Statements (Exception handling) ...... 56
10 การสรéางฟงกìชั่น (Defined Function) 59 10.1 การรับคèาของฟงกìชั่น, คืนคèากลับ และคèามาตรฐานของการรับคèา ...... 60 10.2 ตัวแปรแบบ Global (ทั่วไป) และ Local (เฉพาะสèวน) ...... 62
11 การใสèขéอมูลผèานคียìบอรìด (Input Data from Keyboard) 63 สารบัญ 9
ก เรื่องที่หéามลืมใน Python 67
ข การติดตั้ง Python, wxPython และ Stani’s Python Editor 69 ข.1 การติดตั้ง Python ...... 69 ข.2 การติดตั้ง wxPython ...... 72 ข.3 การติดตั้ง Stani’s Python Editor ...... 75
ค อธิบายสèวนตèาง ๆ พอสังเขปของโปรแกรม SPE 79 ค.0.1 Sidebar ...... 80 ค.0.2 Source ...... 81 ค.0.3 Tools ...... 81
ง การเขียน, Debug และสั่งใหéโปรแกรมทำงาน 85 ง.1 การเขียนโปรแกรมใน SPE และสั่งใหéโปรแกรมทำงาน ...... 85 ง.2 การ Debug โปรแกรม ...... 86
จ ขéอมูลอéางอิง 87 10 สารบัญ สารบัญรูป
1.1 Guido van Rossum ...... 14
ข.1 เลือกดาวนìโหลด Python 2.4 สำหรับ Windows ...... 69 ข.2 ขั้นตอนที่ 1 : ดับเบิลคลิ้กที่ไฟลìติดตั้ง ...... 70 ข.3 ขั้นตอนที่ 2 : เลือก "Install for all users" ...... 70 ข.4 ขั้นตอนที่ 3 : ใหéเลือกที่ติดตั้งที่ C:\Python24\ ...... 70 ข.5 ขั้นตอนที่ 4 : เลือกติดตั้งทุกตัวเลือก ...... 71 ข.6 ขั้นตอนที่ 5 : ดำเนินการติดตั้ง ...... 71 ข.7 ขั้นตอนที่ 6 : เสร็จสิ้นการติดตั้ง ...... 71 ข.8 เลือกดาวนìโหลด wxPython runtime for Python 2.4 ...... 72 ข.9 เลือกสถานที่ดาวนìโหลด ...... 72 ข.10 ขั้นตอนที่ 1 : ดับเบิลคลิ้กที่ไฟลìติดตั้ง ...... 73 ข.11 ขั้นตอนที่ 2 : หนéาตéอนรับการติดตั้งใหé กด Next ...... 73 ข.12 ขั้นตอนที่ 3 : หนéายอมรับขéอตกลงใหé กด Yes ...... 73 ข.13 ขั้นตอนที่ 4 : หนéาเลือกสถานที่ติดตั้ง ใหéเลือกตามที่โปรแกรมไดéกำหนดไวéแตèแรก . . . . 73 ข.14 ขั้นตอนที่ 5 : หนéาเลือก component ใหéเลือกทั้งหมด แลéวกด Next ...... 74 ข.15 ขั้นตอนที่ 6 : เขéาสูèขั้นตอนการติดตั้งและเมื่อเสร็จแลéวใหéเลือก checkbox ทั้งหมดเพื่อใหé โปรแกรมติดตั้งทำการดัดแปลงระบบเพิ่มเติมแลéวกด Finish ...... 74 ข.16 ดาวนìโหลด Stani´s Python Editor Version 0.8.2.a สำหรับ Windows ไดéจากลิงสì Source- Forge (mirror) ...... 75 ข.17 เลือกสถานที่ดาวนìโหลด ...... 75 ข.18 ขั้นตอนที่ 1 : ดับเบิลคลิ้กที่ไฟลìติดตั้ง ...... 76 ข.19 ขั้นตอนที่ 2 : หนéาตéอนรับการติดตั้งใหé กด Next ...... 76 ข.20 ขั้นตอนที่ 3 : หนéาเลือกสถานที่ติดตั้ง ใหéเลือกตามที่โปรแกรมไดéกำหนดไวéแตèแรก . . . . 76 ข.21 ขั้นตอนที่ 4 : เขéาสูèขั้นตอนการติดตั้งโดยกด Next เพื่อเริ่มการติดตั้ง ...... 77 ข.22 ขั้นตอนที่ 5 : เขéาสูèขั้นตอนการติดตั้ง และเสร็จสิ้นการติดตั้ง ...... 77
ค.1 เปดโปรแกรม Stani’s Python Editor หรือเรียกสั้น ๆ วèา SPE ขึ้นมา ...... 79 ค.2 หนéาตèางโปรแกรม Stani’s Python Editor (SPE) ...... 80 ค.3 Shell ...... 81 ค.4 Local object browser ...... 82 ค.5 Session ...... 82 ค.6 Output ...... 82
11 12 สารบัญรูป
ง.1 สั่งใหéโปรแกรมทำงาน ...... 85 ง.2 ผลการทำงาน ...... 85 ง.3 การแจéง Error เพื่อใชéประกอบการ Debug ...... 86 บทที่ 1
แนะนำภาษาไพธอน
ไพธอน (Python) เปนภาษาโปรแกรมในลักษณะภาษาอินเตอรìพรีเตอรìโปรแกรมมิ่ง (Interpreted pro- gramming language) ผูéคิดคéนคือ Guido van Rossum ในป 1990 ซึ่งไพธอนเปน การจัดการชนิดของ ตัวแปรแบบแปรผันตามขéอมูลที่บรรจุอยูè (Fully dynamically typed) และใชéการจัดการหนèวยความจำเปน อัตโนมัติ (Automatic memory management) โดยไดéเปนการพัฒนาและผสมผสานของภาษาอื่น ๆ ไดéแกè ABC, Modula-3, Icon, ANSI C, Perl, Lisp, Smalltalk และ Tcl และภาษาไพธอนยังเปนแนวคิดที่ทำใหé เกิดภาษาใหมè ๆ ซึ่งไดéแกè Ruby และ Boo เปนตéน ไพธอนนั้นพัฒนาเปนโครงการ Open source โดยมีการจัดการแบบไมèหวังผลกำไรโดย Python Software Foundation และสามารถหาขéอมูลและตัวแปรภาษาไดéจากเว็บไซตìของไพธอนเอง ที่ http://www.python.org/ ซึ่งในปจจุบัน (ณ.วันที่ 25 กันยายน 2549) ไพธอนไดéพัฒนาถึงรุèนที่ 2.5 (ออกวันที่ 19 กันยายน 2549) * เอกสารเลèมนี้ยึดตามไพธอนรุèนที่ 2.4.3 (ออกวันที่ 29 มีนาคม 2549)
1.1 ประวัติ
1.1.1 Python 1.0
ไพธอนสรéางขึ้นครั้งแรกในป 1990 โดย Guido van Rossum ที่ CWI (National Research Insti- tute for Mathematics and Computer Science) ในประเทศเนเธอรìแลนดì โดยไดéนำความสำเร็จของภาษา โปรแกรมมิ่งที่ชื่อ ABC มาปรับใชéกับ Modula-3, Icon, C, Perl, Lisp, Smalltalk และ Tcl โดย Dui- do van Rossim ถือวèาเปนผูéริเริ่มและคิดคéน แตèเคéาก็ยังคิดวèาผลงานอยèางไพธอนนั้น เปนผลงานความรูéที่ ทำขึ้นเพื่อความสนุกสนานโดยไดéอéางอิงงานชิ้นนี้ของเขาวèาเปน Benevolent Dictator for Life (BDFL) ซึ่ง ผลงานที่ถูกเรียกวèาเกิดจากความสนุกสนานเหลèานี้นั้นมักถูกเรียกวèา BDFL เพราะมักเกิดจากความไมèตั้งใจ และความอยากที่จะทำอะไรที่เปนอิสระนั้นเอง ซึ่งคนที่ถูกกลèาวถึงวèาทำในลักษณะแบบนี้ก็ไดéแกè Linus Tor- valds ผูéสรéาง Linux kernel, Larry Wall ผูéสรéาง Perl programming language และคนอื่น ๆ อีกมากมาย โดยที่ในไพธอน 1.2 นั้นไดéถูกปลèอยออกมาในป 1995 โดย Guido ไดéกลับมาพัฒนาไพธอนตèอที่ Corpo- ration for National Research Initiatives (CNRI) ที่ เรสตัน, มลรัฐเวอรìจิเนีย ประเทศสหรัฐอเมริกา โดย ที่ในขณะเดียวกันก็ไดéปลèอยรุèนใหมè ในหมายเลขรุèน 1.6 ออกมาโดยอยูèที่ CNRI เชèนกัน ซึ่งหลังจากปลèอยรุèน 1.6 ออกมาแลéว Guido van Rossum ก็ไดéออกจาก CNRI เพื่อทำงานใหéการทำธุรกิจ พัฒนาซอฟตìแวรìแบบเต็มตัว โดยกèอนที่จะเริ่มทำงานธุรกิจ เขาก็ไดéทำใหéไพธอนนั้นอยูèบนสัญญาลิขสิทธิ์ แบบ General Public License (GPL) โดยที่ CNRI และ Free Software Foundation (FSF) ไดéรวม กันเปดเผยรหัสโปรแกรมทั้งหมด เพื่อใหéไพธอนนั้นไดéชื่อวèาเปนซอฟตìแวรìเสรี และเพื่อใหéตรงตามขéอกำหนด
13 14 แนะนำภาษาไพธอน
รูปที่ 1.1: Guido van Rossum
ของ GPL-compatible ดéวย (แตèยังคงไมèสมบูรณìเพราะการพัฒนาในรุèน 1.6 นั้นออกมากèอนที่จะใชéสัญญา ลิขสิทธิ์แบบ GPL ทำใหéยังมีบางสèวนที่ยังเปดเผยไมèไดé) และในปเดียวกันนั้นเอง Guido van Russom ก็ไดéรับรางวัลจาก FSF ในชื่อวèา "Advancement of Free Software" โดยในปนั้นเองไพธอน 1.6.1 ก็ไดéออกมาเพื่อแกéปญหาขéอผิดพลาดของตัวซอฟตìแวรìและใหéเปนไปตาม ขéอกำหนดของ GPL-compatible license อยèางสมบูรณì
1.1.2 Python 2.0
ในป 2000 Guido และ Python Core Development team ไดéยéายการทำงานไป BeOpen.com โดยที่ พวกเขาไดéยéายจาก BeOpen PythonLabs team โดยในไพธอนรุèนที่ 2.0 นั้นไดéถูกนำออกเผยแพรèตèอบุคคล ทั่วไปจากเว็บไซตì BeOpen.com และหลังจากที่ไพธอนออกรุèนที่ 2.0 ที่ BeOpen.com แลéว Guido และนัก พัฒนาคนอื่น ๆ ในทีม PythonLabs ก็ไดéเขéารวมกับทีมงาน Digital Creations ไพธอนรุèน 2.1 ไดéสืบทอนการทำงานและพัฒนามาจาก 1.6.1 มากกวèาไพธอนรุèน 2.0 และไดéทำการ เปลี่ยนชื่อสัญญาลิขสิทธิ์ใหมèเปน Python Software Foundation License โดยที่ในไพธอนรุèน 2.1 alpha นั้นก็ไดéเริ่มชื่อสัญญาสิขสิทธิ์นี้และผูéเปนเจéาของคือ Python Software Foundation (PSF) โดยที่เปนองคìกร ที่ไมèหวังผลกำไรเชèนเดียวกับ Apache Software Foundation
1.1.3 อนาคต
ผูéพัฒนาไพธอนมีการประชุมและถกเถียงกันในเรื่องของความสามารถใหมè ๆ ในไพธอนรุèนที่ 3.0 โดยมีชื่อ โครงการวèา Python 3000 (Py3K) โดยที่จะหยุดการสนับสนุนโคéดโปรแกรมจากรุèน 2.x โดยที่ทำแบบนี้เพื่อ ทำการปรับปรุงเปลี่ยนแปลงการทำงานของภาษาใหéดียิ่งขึ้นตามคำแนะนำที่วèา "reduce feature duplication by removing old ways of doing things" (ลดทอนคุณสมบัติที่ซ้ำซéอนดéวยการยกเลิกเสéนทางที่เดินผèานมา แลéว) โดยในตอนนนี้ยังไมèมีตารางงานของไพธอน รุèน 3.0 แตèอยèางใด แตè Python Enhancement Proposal (PEP) ไดéมีการวางแผนไวéแลéว โดยไดéวางแผนไวéดังนี้
• ทำการเพื่อสèวนสนับสนุนชนิดตัวแปรใหéมากขึ้น 1.2 หลักปรัชญาของภาษาไพธอน 15
• สนับสนุนการทำงานของชนิดตัวแปรแบบ unicode/str และ separate mutable bytes type
• ยกเลิกการสนับสนุนคุณสมบัติของ classic class, classic division, string exceptions และ implicit relative imports
• ฯลฯ
1.2 หลักปรัชญาของภาษาไพธอน
ไพธอนเปนภาษาที่สามารถสรéางงานไดéหลากหลายกระบวนทัศนì (Multi-paradigm language) โดยจะ มองอะไรที่มากกวèาการ coding เพื่อนำมาใชéงานตามรูปแบบเดิม ๆ แตèจะเปนการนำเอาหลักการของกระบวน ทัศนì (Paradigm) แบบ Object-oriented programming, Structured programming, Functional program- ming และ Aspect-oriented programming นำเอามาใชéทั้งแบบเดียว ๆ และนำมาใชéรèวมกัน ซึ่งไพธอนนั้น เปน ภาษาที่มีการตรวจสอบชนิดตัวแปรแบบยืดหยุèน (dynamically type-checked) และใชé Garbage col- lection ในการจัดการหนèวยความจำ
1.3 Language Evaluation Criteria
ดéวยความที่ไพธอนนั้นผสมผสานการสรéางภาษาที่สวยงาม ทำใหéการอèานหรือเขéาใจโคéด (Readability) ตèาง ๆ นั้นทำไดéงèาย รวมถึงการเขียนโคéด (Writability) ที่กระชับและสั้นในการเขียน รวมถึงมีประสิทธิภาพ ทำใหéมีเสถียรภาพ (Reliability) สูงขึ้นและมีความรวดเร็วในการทำงานอีกดéวย และในดéานคèาใชéจèาย (Cost) ในการพัฒนาซอฟตìแวรìจากไพธอนนั้นในประเทศไทยนั้นยังตéองใชéคèาใชéจèายคèอนขéางสูง เพื่อใหéไดéมาซึ่งซอฟตìแวรì ที่ดี เพราะผูéเชี่ยวชาญที่เขียนไพธอนไดéมีเสถียรภาพนั้นยังมีนéอย ทำใหéคèาตัวสำหรับผูéพัฒนานั้นสูงตามไปดéวย ถึงแมéวèาเครื่องมือในการพัฒนานั้นจะฟรี และเปน Open source ก็ตาม แตèคèาใชéจèายในดéานบุคลากรนั้นมีมาก กวèาคèาเครื่องมือพัฒนา
1.4 ขéอเดèนของภาษาไพธอน
1. งèายตèอการเรียนรูé โดยภาษาไพธอนมีโครงสรéางของภาษาไมèซับซéอนเขéาใจงèาย ซึ่งโครงสรéางภาษาไพ ธอนจะคลéายกับภาษาซีมาก เพราะภาษาไพธอน สรéางขึ้นมาโดยใชéภาษาซี ทำใหéผูéที่คุéนเคยภาษาซี อยูè แลéวใชéงานภาษาไพธอนไดéไมèยาก นอกจากนี้โดยตัวภาษาเองมีความยืดหยุèนสูงทำใหéการจัดการกับงาน ดéานขéอความ และ Text File ไดéเปนอยèางดี
2. ไมèตéองเสียคèาใชéจèายใดๆ ทั้งสิ้น เพราะตัวแปรภาษาไพธอนอยูèภายใตéลิขสิทธิ์ Python Software Foun- dation License (PSFL) ซึ่งเปนของ Python Software Foundation (PSF) ซึ่งมีลักษณะคลéายกับ ลิขสิทธิ์แมèแบบอยèาง General Public License (GPL) ของ Free Software Foundation (FSF)
3. ใชéไดéหลายแพลตฟอรìม ในชèวงแรกภาษาไพธอนถูกออกแบบใชéงานกับระบบ Unix อยูèก็จริง แตèใน ปจจุบันไดéมีการพัฒนาตัวแปลภาษาไพธอน ใหéสามารถใชéกับระบบปฏิบัติการอื่นๆ อาทิเชèน Linux Platform, Windows Platform, OS/2, Amiga, Mac OS X และรวมไปถึงระบบปฎิบัติการที่ .NET Framework, Java virtual machine ทำงานไดé ซึ่งใน Nokia Series 60 ก็สามารถทำงานไดéเชèนกัน 16 แนะนำภาษาไพธอน
4. ภาษาไพธอนถูกสรéางขึ้นโดยไดéรวบรวมเอาสèวนดีของภาษาตèางๆ เขéามาไวéดéวยกัน อาทิเชèน ภาษา ABC, Modula-3, Icon, ANSI C, Perl, Lisp, Smalltalk และ Tcl
5. ไพธอนสามารถรวมการพัฒนาของระบบเขéากับ COM, .NETและ CORBA objects
6. สำหรับ Java libraries แลéวสามารถใชé Jython เพื่อทำการพัฒนาซอฟตìแวรìจากภาษาไพธอนสำหรับ Java Virtual Machine
7. สำหรับ .NET Platform แลéว สามารถใชé IronPython ซึ่งเปนการพัฒนาของ Microsoft เพื่อจะทำใหé ไพธอนนั้นสามารถทำงานไดéบน .Net Framework ซึ่งใชéชื่อวèา Python for .NET
8. ไพธอนนั้นสนับสนุน Internet Communications Engine (ICE) และการรวมกันของเทคโนโลยีอื่น ๆ อีกมากมายในอนาคต
9. บางครั้งนักพัฒนาอาจจะพบวèาไพธอนไมèสามารถทำงานบางอยèางไดé แตèนักพัฒนาตéองการใหéมันทำงาน ไดé ก็สามารถพัฒนาเพิ่มไดéในรูปแบบของ extension modules ซึ่งอยูèในรูปแบบของโคéด C หรือ C++ หรือใชé SWIG หรือ Boost.Python
10. ภาษาไพธอนเปนสามารถพัฒนาเปนภาษาประเภท Server side Script คือการทำงานของภาษาไพ ธอนจะทำงานดéานฝง Server แลéวสèงผลลัพธìกลับมายัง Client ทำใหéมีความปลอดภัยสูง และยังใชé ภาษาไพธอนนำมาพัฒนาเว็บเซอรìวิสไดéอีกดéวย
11. ใชéพัฒนาระบบบริหารการสรéางเว็บไซตìสำเร็จรูปที่เรียกวèา Content Management Systems (CMS) ซึ่ง CMS ที่มีชื่อเสียงมาก และเบื้องหลังทำงานดéวยไพธอนคือ Plone http://www.plone.org/
1.5 Category และ Application Domains
ภาษาไพธอนนั้น จัดอยูèใน Category ภาษาที่สามารถสรéางงานไดéหลากหลายกระบวนทัศนì (Multi-paradigm language) โดยรองรับทั้ง Object-oriented programming, Imperative, Functional programming และ Logic programming ซึ่งไพธอนสามารถนำไปพัฒนาซอฟตìแวรìประยุกตìไดéมากมาย ไดéแกè
1.5.1 Web และ Internet Development
ไพธอนนั้นมีการสนับสนุนในดéานของ Web Development ในโซลูชันระดับสูงดéวย Zope, mega frame- works อยèาง Django และ TurboGears และรวมไปถึง Content Management Systems ขั้นสูงอยèาง Plone และ CPS จึงทำใหéไพธอนนั้นเปน Common Gateway Interface (CGI) ระดับสูงที่มีประสิทธิภาพที่ดีที่สุด ตัวหนึ่งในตลาด
1.5.2 Database Access
ไพธอนนั้นสนับสนุนการเขéาถึงขéอมูลในฐานขéอมูลของผูéผลิตฐานขéอมูลตèาง ๆ มากมาย โดยผèานทาง ODBC Interfaces และ Database Connection Interface อื่น ๆ ซึ่งสามารถทำงานรèวมกับ MySQL, Oracle, MS SQL Server, PostgreSQL, SybODBC และอื่น ๆ ที่จะมีมาเพิ่มเติมอีกในอนาคต 1.6 ซอฟตìแวรìที่เขียนดéวยไพธอน 17
1.5.3 Desktop GUI
เมื่อไพธอนไดéติดตั้งลงบนเครื่องของคุณแลéว จะมี Tk GUI development library ซึ่งเปน libraries ที่ มีความสามารถเทียบเทèา Microsoft Foundation Classes (MFC, ซึ่งคลéาย ๆ กับ win32 extensions), wxWidgets, GTK, Qt, Delphi และอื่น ๆ ทำใหéสามารถพัฒนาซอฟตìแวรìประยุกตìตèาง ๆ แบบ Graphic user interface ไดé
1.5.4 Scientific และ Numeric computation
ไพธอนรองรับการทำงานของนักวิทยาศาสตรìในเรื่องของทฤษฎีการคำนวณ, Bioinformatics และ Physic- s เปนตéน
1.5.5 Education
ไพธอนนั้นเปนภาษาที่เหมาะกับการเรียนการสอนในวิชา programming อยèางมาก โดยสามารถนำไปใชé ในระดับเบื้องตéนถึงระดับสูง ซึ่ง Python Software Foundation นั้นไดéมีหลักสูตรสำหรับการเรียนการสอน ในดéานนี้อยูèแลéว ซึ่งสามารถนำเอา pyBiblio และ Software Carpentry Course มาเรียนเพื่อเสริมความรูéไดé
1.5.6 Network programming
เปนการเพิ่มความามารถจาก Web และ Internet Development ไพธอนนั้นสนับสนุนในการเขียนโปรแกรม ในระดับต่ำในดéานของ network programming ที่งèายตèอการพัฒนา sockets และ รวมไปถึงการทำงานรèวม กับ mudules อยèาง Twisted และ Framework สำหรับ Asyncronous network programming
1.5.7 Software builder และ Testing
ไพธอนนั้นสนับสนุนการพัฒนาซอฟตìแวรìที่มีการควบคุมการพัฒนาและจัดการระบบทดสอบตèาง ๆ โดย ใชéเครื่องมือในการพัฒนาที่สนับสนุนการเขียนโปรแกรมในไพธอนเอง ซึ่งตัวไพธอนนั้นไดéมาพรéอมกับ
• Scons สำหรับ build โปรแกรม
• Buildbot และ Apache Gump ที่ใชéสำหรับงาน Automated continuous compilation และ Testing
• Roundup หรือ Trac สำหรับ bug tracking และ project management
1.5.8 Game และ 3D Graphics Rendering
ไพธอนนั้นไดéถูกใชéในตลาดพัฒนาเกมสìทั้งเชิงธุรกิจและสมัครเลèน โดยมีการสรéาง Framework สำหรับ พัฒนา Game บนไพธอนซึ่งชื่อวèา PyGame และ PyKyra ซึ่งยังรวมไปถึงการทำ 3D Graphics Rendering ที่ไพธอนมี libraries ทางดéานงานนี้อยูèมากมาย
1.6 ซอฟตìแวรìที่เขียนดéวยไพธอน
• BitTorrent เปนการพัฒนาโดยระบบการจัดการไฟลì BitTorrent, การจัดการ การกระจายตัวของ Pack- age ขéอมูลใน Tracker และการเขéารหัสสèวนขéอมูลตèาง ๆ 18 แนะนำภาษาไพธอน
• Blender ซอฟตìแวรì open source สำหรับทำ 3D modeling
• Chandler ซอฟตìแวรìจัดการขéอมูลสèวนบุคคล (Personal Information Manager, PIM) โดยมีสèวน เพิ่มเติมทั้งงานปฎิทิน, อีเมล, ตารางงาน และขéอมูลโน็ตตèาง ๆ ซึ่งทำงานคลéาย ๆ กับ Outlook ของ Microsoft
• Civilization IV วีดิโอเกมสì และยังเปนเกมสìที่ใชé boost.python เพื่อทำการควบคุมสèวนประกอบตèาง ๆ ภายในเกมสì ซึ่งรวมไปถึงรูปแบบ, หนéาตา และเนื้อหาของเกมสìดéวย
• Mailman หนึ่งในซอฟตìแวรì E-Mail mailing lists ที่ไดéรับความนิยมสูงสุด
• Kombilo ระบบจัดการฐานขéอมูลของเกมสìโกะ
• MoinMoin ระบบ Wiki ที่ไดéรับความนิยมสูงตัวหนึ่ง
• OpenRPG ระบบเกมสìเสมือนแบบ Role Playing Games ลน Internet
• Plone ระบบ Content Management System
• Trac ระบบติดตามติดตามขéอผิดพลาดและจัดการขéอมูลดéานการพัฒนาซอฟตìแวรìดéวย MoinMoin ที่ เปน wiki และ Subversion เพื่อทำระบบ Source version control
• Turbogears ระบบพัฒนาซอฟตìแวรì Framework โดยรวมเอา Cherrypy, SQLObject, MochiKit และ KID templates
• ViewVC ระบบ Web-based สำหรับจัดการดéาน CVS และ SVN repositories
• Zope ระบบพัฒนาซอฟตìแวรìบนอินเทอรìเน็ตแบบ web-application platform
• Battlefield 2 เกมสì First Person Shooter ที่ไดéใชéไพธอนในการทำ Configuration scripts
• Indian Ocean Tsunami Detector ซอฟตìแวรìสำหรับมือถือเพื่อแจéงเตือน Tsunami
• EVE Online เกมสìแบบ Multi Massive Online Role Playing Game ซึ่งเปนเกมสìที่ไดéรับอันดับ สูงมากบน MMORPG.com
• SPE - Stani’s Python Editor เปน Free และ open-source สำหรับงานพัฒนาซอฟตìแวรìดéวยไพ ธอน โดยมีทั้งแบบ Python IDE for Windows, Linux & Mac with wxGlade (GUI designer), PyChecker (Code Doctor) และ Blender (3D)
• ฯลฯ
1.7 ตัวอยèางความสำเร็จของไพธอน
Industrial Light & Magic "ไพธอนเปนกุญแจสำหรับการสรéางผลงานที่ดี ถéาไมèมีมันแลéวงานอยèาง Star Wars: Episode II ก็เปนเรื่องที่ยากมากที่จะสำเร็จ ดéวยวิธีการ crowd rendering เพื่อสèงไปทำการ batch processing ในการ compositing video นั้นเปนเรื่องที่งèายไปเลยเมื่อใชéการพัฒนาระบบดéวยไพ ธอน" Tommy Burnette, Senior Technical Director, Industrial Light & Magic "ไพธอนอยูèทุก ๆ ที่ใน ILM มันชèวยใหéเราสามารถที่จะทำงานกับภาพกราฟฟกที่ถูกสรéางสรรคìไดéงèาย 1.7 ตัวอยèางความสำเร็จของไพธอน 19
และรวดเร็ว"Philip Peterson, Principal Engineer, Research & Development, Industrial Light & Magic
Google "ไพธอนมีความสำคัญตèอ Google มาก เพราะตั้งแตèเริ่มมี Google เราก็ใชéมันสรéางระบบของเรา และยังคงเปนสèวนสำคัญจนทุกวันนี้ โดยในทุก ๆ วันเหลèาวิศวะกรของ Google ใชéไพธอนในการ ทำงานอยูèตลอดเวลา เพื่อคéนหาขéอมูลบนโลกของอินเทอรìเน็ตอยèางไมèมีทีสิ้นสุด" Peter Norvig, Di- rector of Search Quality, Google, Inc.
NASA "NASA ใชéไพธอนในการพัฒนา การจัดการ Model, Integration และ ระบบ Transformation ในงาน CAD/CAE/PDM โดยพวกเราเลือกไพธอนเพราะมีความสามารถในการสรéางงานใหéออกมา ไดéอยèางรวดเร็วและมีประสิทธิภาพสูง โดยสิ่งที่สำคัญคือ code ในการเขียนนั้นสะอาดและงèายตèอการ จัดการดูแลในภายหลัง อีกทั้งยังมี libraries ใหéใชéอยèางมากมายทำการ Integration ของระบบนั้นเปน ไปอยèางชาญฉลาดและรวดเร็วแถมยังทำระบบที่สามารถเชื่อมตèอการกับระบบอื่น ๆ ไดéอยèางดี ซึ่งไพ ธอนนั้นตอบโจทยìของเราไดéทั้งหมด" Steve Waterbury, Software Group Leader, NASA STEP Testbed 20 แนะนำภาษาไพธอน บทที่ 2
การแสดงผลเบื้องตéน (Printing)
การแสดงผลออกทางหนéาจอของไพธอนนั้นใชéคำสั่ง print แลéวตามดéวย ’String’ หรือ "String" โดยแทน ที่ String ดéวยขéอความใด ๆ เชèน * ในภาษา C/C++, Java, ฯลฯ เครื่องหมายที่บอกการจบ ของ คำสั่งคือ ; (Semi-colon Symbol) แตè Python ใชéการจบบรรทัดแทน
>>> print "Hello, World!"
และไดéผลการทำงาน
Hello, World!
ทดสอบการพิมพìหลาย ๆ บรรทัด
>>> print "Jack and Jill went up a hill" >>> print "to fetch a pail of water;" >>> print "Jack fell down, and broke his crown," >>> print "and Jill came tumbling after."
ผลการทำงาน
Jack and Jill went up a hill to fetch a pail of water; Jack fell down, and broke his crown, and Jill came tumbling after.
ซึ่งบางครั้งเราตéองการพิมพìชุดขéอความซ้ำ ๆ กันเราสามารถใชéสัญลักษณì * (Repetition Symbol) เพื่อทำ การพิมพìชุดขéอความนั้นไดé
>>> print "Hello, World!"*5
ผลการทำงาน
Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!
21 22 การแสดงผลเบื้องตéน (Printing)
* ภาษาไพธอน ใชé "#" บอกจุดเริ่มตéนของ Comment ไปจนสุดบรรทัด โดย Comment เขียนไวéเตือน ความจำ ไมèใชèสèวนที่เอาไป Execute Program ตัวอยèาง
>>> print "Foo" # Test Comment >>> print "Bar"
ผลการทำงาน
Foo Bar บทที่ 3
การตั้งตัวชื่อแปร และคำสงวน (Reserved word หรือ Keywords)
3.1 การตั้งตัวชื่อแปร
1. ขึ้นตéนดéวยตัวอักษรในภาษาอังกฤษ ตามดéวยตัวอักษรหรือตัวเลขใดๆ ก็ไดé
2. หéามเวéนชèองวèาง และหéามใชéสัญลักษณìพิเศษนอกเหนือจาก underscore ( ) เทèานั้น
3. ตัวอักษรของชื่อจะคำนึงถึงความแตกตèางระหวèางอักษรตัวพิมพìใหญèกับตัวพิมพìเล็ก
4. การตั้งชื่อมีขéอพึงระวังวèา จะตéองไมèซ้ำกับคำสงวน(Reserved words, Keywords)
5. ควรจะตั้งชื่อโดยใหéชื่อนั้นมีสื่อความหมายใหéเขéากับขéอมูล สามารถอèานและเขéาใจไดé
3.2 คำสงวนในการใชéงาน (Reserved words, Keywords)
and, assert, break, class, continue, def, del, elif, else, except, exec, finally, for, from, global, if, import, in, is, lambda, not, or, pass, print, raise, return, try, while, yield, as (ไพธอน 2.5) และ with (ไพธอน 2.5) * อéางอิงจากเอกสารไพธอน รุèน 2.4.3 และ 2.5 (Python Reference Manual Release 2.4.3, docu- mentation updated on 29 March 2006 and Python Reference Manual Release 2.5, documentation updated on 19 September 2006)
23 24 การตั้งตัวชื่อแปร และคำสงวน (Reserved word หรือ Keywords) บทที่ 4
การคำนวณทางคณิตศาสตรì (Arithmetic Mathematics)
4.1 การคำนวณพื้นฐาน (normal arithmetic operators)
ไพธอนนั้นมีสัญลักษณìการคำนวณพื้นฐาน (normal arithmetic operators) ซึ่งไดéแกè
• ** (ยกกำลัง, Exponentiation)
• * (คูณ, multiplication)
• / (หาร, division)
• % (หารเอาเศษ, remainder หรือ modulo)
• + (บวก, addition)
• - (ลบ, subtraction)
โดยอันดับความสำคัญของการคำนวณเหมือนกับคณิศาสตรìโดยมีความสำคัญดังตèอไปนี้
1. วงเล็บ (parentheses "()")
2. ยกกำลัง (exponents "**" )
3. คูณ (multiplication "*" ), หาร (division "/" ) และหารเอาเศษ (remainder/modulo "%" )
4. บวก (addition "+") และ ลบ (subtraction "-")
ทดสอบการคำนวณไดéจากการคำนวณดéานลèางนี้
>>> i = 10 >>> f = 6.54 >>> print i + f 16.54
25 26 การคำนวณทางคณิตศาสตรì (Arithmetic Mathematics)
อธิบายโปรแกรมดéานบนไดéวèา ตัวแปร i ถูกตั้งคèาเริ่มตéนไวéที่ 10 และตัวแปร f ถูกตั้งคèาเริ่มตéนเปน 6.54 โดยที่ i มีชนิดตัวเปน integer และ f เปน float โดยเรานำมาบวกกันจะไดéคำตอบคือ 16.54 ทดสอบการบวกโดยใหéนำคèาที่ทำการคำนวณสèงกลับตัวแปรเดิม จากคำสั่งการทำงานดéานลèางนี้
>>> i = 10 >>> i = i + 6 >>> i = i / 2 >>> print i 8
จะเห็นวèาชุดคำสั่งที่ใชéมีความยาวกวèาปกติ แตèอèานงèายกวèา ซึ่งเราสามารถยèอรูปการคำนวณตèาง ๆ เหลèานี้ ไดéดังตัวอยèางดังดéานลèาง
>>> i = 10 >>> i += 6 >>> i /= 2 >>> print i 8
ซึ่งการยèอรูปแบบนี้เปนไปตามรูปแบบดั่งเดิมของภาษา C นั่นเอง
4.2 การคำนวณผèานฟงกìชั่นภายใน (Built-in Math Functions)
4.2.1 การหาคèาสัมบูรณì (absolute value)
มีรูปแบบ Function คือ abs(var) เปน function ที่ใชéหาคèาสัมบูรณì โดนที่คèา var เปนตัวแปรหรือจำนวน ที่ตéองการหาคèา
>>> print abs(-6.5) 6.5
4.2.2 จำนวนที่นéอยที่สุด และมากที่สุดในกลุèม (smallest or largest values)
ฟงกìชั่นหาจำนวนที่นéอยที่สุด มีรูปแบบฟงกìชั่น คือ min(var) เปนฟงกìชั่นที่ใชéในการหาจำนวนที่นéอย ที่สุดในกลุèมของชุดขéอมูลชนิดตèาง ๆ เชèน list, set หรือแมéแตèตัวเลขทั่วไป โดยที่คèา var เปนตัวแปร, จำนวน หรือชุดของจำนวนที่ตéองการหาคèา ฟงกìชั่นหาจำนวนที่มากที่สุด มีรูปแบบฟงกìชั่น คือ max(var) เปนฟงกìชั่นที่ใชéในการหาจำนวนที่มากที่สุด ในกลุèมของชุดขéอมูลชนิดตèาง ๆ เชèน list, set หรือแมéแตèตัวเลขทั่วไป โดยที่คèา var เปนตัวแปร, จำนวนหรือ ชุดของจำนวนที่ตéองการหาคèา
>>> print min(6, 7, 2, 8, 5) 2 >>> print max(6, 7, 2, 8, 5) 4.2 การคำนวณผèานฟงกìชั่นภายใน (Built-in Math Functions) 27
8 >>> print min([0, 43.5, 19, 5, -6]) 0 >>> print max([0, 43.5, 19, 5, -6]) 43.5
4.2.3 กำหนดจำนวนตัวเลขทศนิยม (specified number of digits)
มีรูปแบบฟงกìชั่น คือ round(var, digits) เปนฟงกìชั่นที่ใชéในการเพิ่มหรือลดจำนวนตัวเลขทศนิยมที่จะ นำมาแสดง โดย
>>> print round(1234.56789, 2) 1234.57 >>> print round(1234.56789, -2) 1200.0
4.2.4 หาผลรวมทั้งหมดในชุดขéอมูล (adds numbers in a sequence.)
มีรูปแบบฟงกìชั่น คือ sum(sequence) เปนฟงกìชั่นที่ใชéในการหาผลรวมของชุดขéอมูลตัวเลขหนึ่ง ๆ โดยที่ ใสèคèาของชุดจำนวนเขéาไปในรูปแบบของ sequence of numbers เชèน (1,2,3,4,5) ซึ่งหมายถึงจำนวนตั้งแตè 1 - 5 เปนตéน ลงไปในฟงกìชั่น sum เพื่อทำการคำนวณหาผลรวมของชุดขéอมูลดังกลèาว
>>> print sum((1, 2, 3, 4, 5)) 15
4.2.5 ชèวงของขéอมูลตัวเลข (range of numbers.)
มีรูปแบบฟงกìชั่น คือ range(start, end [,step]) เปนฟงกìชั่นที่ใชéในการสèงคèาชèวงของขéอมูลตัวเลขที่ ตéองการออกมาเชèนตéองการตัวเลขตั้งแตè 1 - 500 เราสามารถทำไดéตามตัวอยèางดéานลèางนี้
>>> print range(1, 6) [1, 2, 3, 4, 5]
ซึ่งเราสามารถนำความสามารถนี้มาใชéรèวมกับฟงกìชั่นหาผลรวมทั้งหมดไดé โดยดังตัวอยèางดéานลèางนี้
>>> print sum(range(1, 6)) 15
จากตัวอยèางทั้งสองนั้น โดยชèวงของขéอมูลนั้นคือ 1 - 6 ซึ่งไดéขéอมูลคือ 1, 2, 3, 4, 5 ซึ่งเรานำมาซึ่งสูตรคือ m ถึง ( n -1) โดยที่ m และ n คือจำนวนเต็มบวก และ m มีคèานéอยกวèา n หรือบางครั้งเราอยากเพิ่มคèาทีละ 2 ก็สามารถทำไดéดéวย
>>> print range(1, 6, 2) [1, 3, 5] 28 การคำนวณทางคณิตศาสตรì (Arithmetic Mathematics) บทที่ 5
ชนิดของตัวแปร (Data type)
ดังที่เราไดéทราบไปแลéววèาภาษาไพธอนเปนภาษาที่เปน Interpreter Programming ซึ่งเราไมèจำเปนตéอง สนใจ Data type แตèบางครั้งการที่เรารูéจัก Data type ตèาง ๆ และนำมาใชéงานไดéอยèางเหมาะสมทำใหéการ เขียนโปรแกรมมีประสิทธิภาพมากขึ้น โดย Data type ตèาง ๆ นั้นมีจุดเดèนในแบบชนิดของตัวมันเอง ซึ่งในการแสดงผลการทำงานของขéอมูลตèาง ๆ ในไพธอนนั้นมีหลากหลายรูปแบบ เราจะมาพูดกันในเรื่อง นี้เชèนเดียวกัน โดยในหลาย ๆ ภาษานั้น ๆ เราจำเปนตéองประกาศชนิดตัวแปร (Data type) กèอน แลéวจึงตั้งชื่อตัวแปร ซึ่ง หลาย ๆ ครั้งสรéางความสับสนในการจดจำ แตèในภาษาไพธอนนั้นเราไมèจำเปนตéองประกาศชนิดของตัวแปร กèอนการใชéงานแตèอยèางใด โดยในบทนี้เราจะพูดถึงชนิดของตัวแปรตèาง ๆ
5.1 ตัวเลข (Numbers)
5.1.1 จำนวนเต็ม(Integers)
จำนวนเต็มธรรมดา (Plain Integer)
Plain Integers มีคำยèอสำหรับเขียนในโปรแกรมคือ int เปนการบèงบอกคุณสมบัติของตัวแปรที่ใชéเก็บ ขéอมูลตัวเลขแบบจำนวนเต็มที่เปนตัวเลขแบบ signed integer เก็บขéอมูล 32 bits ตั้งแตè -2147483648 ถึง +2147483647 ทดสอบโดยการพิมพìคำสั่งโปรแกรมดังนี้
>>> x = 42 >>> type(x)
จะไดéผลการทำงานโดยแสดงเปนชนิดของตัวแปรนั้นคือ
* function type(var) เปน function ที่ใชéในการแสดงชนิดของตัวแปรนั้น ๆ โดยที่ตัวแปร var เปนชื่อ ตัวแปรที่ตéองการแสดงชนิดของตัวแปรนั้น ๆ ดังตัวอยèางที่ไดéทำดéานบน การทดสอบตèอมาเราจะทำการ casting data ผèาน function int เพื่อทำการแปลงขéอมูลเปน interger numbers ตัวอยèางเชèน
29 30 ชนิดของตัวแปร (Data type)
>>> x = int("17") >>> y = int(4.8) >>> print x, y, x - y
ผลการทำงาน
17 4 13
* function int(var) เปน function ที่ใชéในการแปลงชนิดของขéอมูลของตัวแปรอื่น ๆ มาเปนชนิดตัวแปร แบบ integer โดยที่ตัวแปร var เปนชื่อตัวแปรที่ตéองการแปลงชนิดขéอมูลของตัวแปรนั้น ๆ
จำนวนเต็มแบบยาว (Long integer)
Long integers มีคำยèอสำหรับเขียนในโปรแกรมคือ long เปนการบèงบอกคุณสมบัติของตัวแปรที่ใชéเก็บ ขéอมูลตัวเลขแบบจำนวนเต็ม ที่เปนตัวเลขแบบ signed integer เก็บขéอมูลที่มากกวèาตัวเลขที่ Integer เก็บไดé หรือมีจำนวนที่มากกวèา - 2147483647 ถึง + 2147483647 นั้นเอง โดยสามารถใชéคำตัวอักษร L ตèอทéาย ตัวเลขนั้น ๆ เพื่อบอกวèาจำนวนนั้นเปนจำนวน Long Integer เชèน 234187626348292917L หรือ 7L
>>> googol = 10 ** 100 >>> print googol >>> type(googol)
ผลการทำงาน (Operator ** มีความหมายในการคำนวณคือ ยกกำลัง )
10000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000
ผลจากการทำงานนั้นจะทำการแสดงคèาของตัวแปร googol และบอกชนิดของตัวแปรวèาเปน long นั้นเอง
จำนวนตรรกะ (Boolean)
Boolean มีคำยèอสำหรับเขียนในโปรแกรมคือ bool ความจริงแลéวขéอมูลชนิดตรรกะในไพธอนไมèมีอยูèจริง เพราะไมèจำเปนตéองมีนั่นเอง สิ่งที่ไพธอนมีใหéนั้นเปนเพียงคèาคงที่เพื่อใชéแทนตรรกะ จริง และ เท็จ เทèานั้น ไดéแกè
• True - แทนคèาจริง มีคèาเปน 1
• False - แทนคèาเท็จ มีคèาเปน 0
5.1.2 จำนวนจริง (Floating-point numbers)
Floating-point มีคำยèอสำหรับเขียนในโปรแกรมคือ float เปนการบèงบอกคุณสมบัติของตัวแปรที่ใชéเก็บ ขéอมูลตัวเลขแบบจำนวนจริงแบบ 64 bit double precision ที่มีความหมายรวบรัดรวมกันเลยทั้ง float และ double ในหลายๆ ภาษา แตèในไพธอนจะใชé float เพียงอยèางเดียว ซึ่งมีชèวงตั้งแตè 1.23 ไปจนถึง 7.8 x 10-28 5.1 ตัวเลข (Numbers) 31
>>> debt = 7784834892156.63 >>> print debt >>> type(debt)
ภาษาไพธอนนั้นจะทำการยèอขนาดของจำนวนใหéอยูèในรูปแบบขนาดยèอทางคณิตศาสตรìจะไดéผลการทำงาน โดยแสดงเปนชนิดของตัวแปรนั้นคือ
7.78483489216e+012
โดยมีความหมายวèา 7.78483489216 x 10 12 เราสามารถทำใหéจำนวนชนิด ๆ เปลี่ยนเปนจำนวนจริงไดéโดยใชé function float
>>> x = float(17) >>> y = float("4") >>> print x, y, x - y
ผลการทำงาน
17.0 4.0 13.0
* function float(var) เปน function ที่ใชéในการแปลงชนิดของขéอมูลของตัวแปรอื่น ๆ มาเปนชนิดตัวแปร แบบ floating-point โดยที่ตัวแปร var เปนชื่อตัวแปรที่ตéองการแปลงชนิดขéอมูลของตัวแปรนั้น ๆ
5.1.3 จำนวนเชิงซéอน (Complex Numbers)
มีคำยèอสำหรับเขียนในโปรแกรมคือ complex จำนวนเชิงซéอนคือเซตที่ตèอเติมจากเซตของจำนวนจริงโดย เพิ่มจำนวน j เขéาไปในตัวเลขจำนวนจริงจนไดéเปน จำนวนจินตภาพ (imaginary number) จนทำใหéสมการ j2 + 1 = 0 เปนจริง และหลังจากนั้นเพิ่มสมาชิกตัวอื่นๆ เขéาไปจนกระทั่งเซตที่ไดéใหมèมีสมบัติปดภายใตéการ บวกและการคูณ จำนวนเชิงซéอน z ทุกตัวสามารถเขียนอยูèในรูป x + iy โดยที่ x และ y เปนจำนวนจริง โดยเราเรียก x และ y วèาสèวนจริงและสèวนจินตภาพของ z ตามลำดับ เราสามารถนำมาเขียนเปนสมการในการเขียนชุดคำสั่งไดéดังนี้
>>> imaginary_number = 16j >>> complex_number = 6 + 4j >>> print complex_number (6+4j) >>> print type(complex_number)
หรือเราอาจจะไมèตéองใชéจำนวน j เพื่อทำใหéตัวเลขนั้นเปนจำนวนจินตภาพ ไดéจาก function ที่ชื่อวèา com- plex(real, [imag]) ดังตัวอยèางดéานลèางนี้ * function complex(real, imag) เปน function ที่ใชéในการแปลงชนิดของขéอมูลของตัวแปรอื่น ๆ มาเปน ชนิดตัวแปรแบบ complex โดยที่ตัวแปร real เปนจำนวนที่เปนจำนวนจริง และ imag คือจำนวนจินตภาพ 32 ชนิดของตัวแปร (Data type)
>>>complex_number = complex(6, 4) >>>type(complex_number)
5.2 ชนิดขéอมูลแบบการรวมกลุèมขéอมูล (Collection Data Types)
5.2.1 ลิสตì (List)
ในไพธอนนั้นชนิดตัวแปรที่ถูกนำมารวมกันอยูèในชื่อเดียวกับเลยคือ อารìเรยì (Array) และ ลิสตì (List) แตèถéานักพัฒนาตéองการใชé อารìเรยìแบบที่คุéนเคยจริง ๆ จำเปนตéอง import module array ของไพธอนเขéามา ซึ่งยุèงยากและทำงานชéากวèาที่ควรจะเปน ลิสตìมีคำยèอสำหรับเขียนในโปรแกรมคือ list การทำงานของลิสตìนั้นเปนการนำขéอมูลหลาย ๆ ชนิดมา เรียงตèอกันในลิสตìของตัวแปรนั้น ๆ ซึ่งแตกตèางจากอารìเรยìที่ขéอมูลที่นำมาเรียงตèอกันตéองเปนชนิดเดียวกัน และนี่คงเปนสาเหตุที่ทำใหéอารìเรยì ถูกตัดทิ้งไปจากชนิดของตัวแปรพื้นฐานของไพธอนเพราะดéวยเหตุผลดéาน ความยืดหยุèนของชนิดของตัวแปรนั้นเอง โดยลิสตìนั้นจะมีขéอมูลเรียงกันหลาย ๆ ตัว ครอบดéวยเครื่องหมาย square brackets "[" และ "]" เชèน
>>> i = [1, 2, 3, 4, ’Foo’, 5, ’Bar’] >>> print i >>> type(i)
ผลที่ไดéคือ
[1, 2, 3, 4, ’Foo’, 5, ’Bar’]
เราสามารถเขéาถึงขéอมูลในแตèละลิสตìไดé ผèานทางหมายเลขสมาชิก (index key) เชèน
>>> print i[6]
ผลการทำงานคือ
Bar
โดยหมายเลขสมาชิกเริ่มตั้งแตè 0 ไปจนถึงจำนวนขéอมูลที่มีอยูèในลิสตìลบดéวยหนึ่ง หรืออธิบายใหéเห็นภาพก็ คือ
0, 1, 2, 3, 4 , .... , n - 1
เมื่อ n คือจำนวนของขéอมูลในลิสตì เราสามารถเขéาถึงสมาชิกของ list เปนกลุèมๆ ไดé โดยใชéคำสั่ง : (Colon Symbol) เพื่อคั่นระหวèางหมายเลข สมาชิกที่ตéองการ เชèน
>>> x = [1, 2, 3, 4, ’Foo’, 5, ’Bar’] >>> print x[3:5] 5.2 ชนิดขéอมูลแบบการรวมกลุèมขéอมูล (Collection Data Types) 33
ผลการทำงาน [4, ’Foo’] เราสามารถเลือกสมาชิกบางตัวอยèางมีเงื่อนไขไดé เชèน >>> y = [10, 3, 5, 25, 7, 9] >>> z = [x for x in y if x >= 9] >>> print z ผลการทำงานคือ [10, 25, 9] จากชุดคำสั่งดéานบนนั้นเปนการเลือกสมาชิกภายในลิสตìที่มีคèามากกวèาหรือเทèากับ 9 นั่นเอง
5.2.2 ดิกชันนารี (Dictionary หรือ Groupings of Data Indexed by Name)
ดิกชันนารี (Dictionary หรือ Groupings of Data Indexed by Name) มีคำยèอสำหรับเขียนในโปรแกรม คือ dict เปนอนุกรมอีกอันหนึ่ง มีสภาพเหมือนอาเรยì ที่มีสมาชิกทั้ง keys และ value โดยที่ นั้นจะใชéชื่อ อéางอิงสมาชิก (associated key) แทนการใชéหมายเลขสมาชิก (index key) ซึ่งจะซ้ำกันไมèไดé (ถéากำหนดคèา ซ้ำ มันจะลบคèาเกèา และใชéคèาใหมèแทน) โดยใชéการจัดเรียงขéอมูลและแกéไขคèาไมèไดé (จึงสามารถใชé tuple เปน keys ไดé ถéาชนิดของขéอมูลสมาชิกเปนชนิดเดียวกัน แตèใชé list เปน keys ไมèไดé) แตèลบ keys:value ไดé เวลา เรียกขéอมูล value จะคéนจาก keys ถéาคéนไมèพบจะเกิดขéอผิดพลาด >>> i = {’first’:’alpha’,’last’:’omega’} >>> print i >>> print i[’first’] >>> type(i) ผลการทำงานคือ {’last’: ’omega’, ’first’: ’alpha’} ’alpha’
5.2.3 ทับเบิ้ล (Tuples) และ อนุกรม (Sequences)
ทับเบิ้ล (นéองลิสตì, Tuples) มีคำยèอสำหรับเขียนในโปรแกรมคือ tuple ขéอมูลจะอยูèภายในวงเล็บ () แตè ตอนกำหนดคèา ถéาอยูèโดดๆ อาจไมèใสèวงเล็บก็ไดé โดยใชéหลักคลéายกับลิสตì (แตèไมèเหมือนกันทั้งหมด) เพียงแตè เราสามารถนำลิสตìหลาย ๆ ลิสตìมาบรรจุลงในลิสตìเดียวกันเองไดéโดยไมèตéองแยกตัวแปร เชèน
>>> t = 12345, 54321, ’hello!’ >>> type(t)
แตèสมาชิกในทับเบิ้ลเปลี่ยนคèาไมèไดé ซึ่งเหมือนกับเหมือนสตรีง ไมèเหมือนลิสทì ซึ่งการกำหนดคèาใหéทับ เบิ้ลที่มีสมาชิกเดียว ยุèงยากขึ้นเล็กนéอย เพราะตéองใชé "," ชèวย
>>> empty = () >>> singleton = ’hello’, # <-- note trailing comma >>> len(empty) 0 >>> len(singleton) 1 >>> singleton (’hello’,)
การกำหนดคèาใหé tuple เชèน t = 12345, 54321, ’hello!’ เรียกวèาการแพ็ค (packing) ใชéไดéกับ tuple อยèางเดียว สèวนการกำหนดคèาแบบยéอนกลับ เรียกวèาการ อันแพ็ค (unpacking) อันนี้ใชéไดéกับทุกอนุกรม คือ ทั้งลิสทì และทูเปล * function len(var) เปน function ที่ใชéในการหนéาจำนวนสมาชิก, ความยาวของสายอักขระ และกลุèม ของขéอมูลตèาง ๆ โดยที่ var นั้นคือชื่อของตัวแปรที่เราตéองการหานั้นเอง
>>> x, y, z = t
* ในตัวอยèางนี้ t ตéองมีสมาชิกอยèางนéอย 3 คèา มิเชèนนั้นจะเกิดขéอผิดพลาด เนื่องจากไมèสามารถใหéคèาไดé กับ 3 ตัวแปรที่ตéองการสèงคèาไปใหé
5.2.4 เซ็ต (Sets)
เซ็ต เปรียบเสมือนสèวนขยายของลิสทì(และสตริงดéวย) และจะไมèมีสมาชิกที่มีคèาซ้ำกัน ใชéประโยขนìเหมือน กับ เรื่องเซ็ทในวิชาคณิตศาสตรì 5.2 ชนิดขéอมูลแบบการรวมกลุèมขéอมูล (Collection Data Types) 35
มีคำยèอสำหรับเขียนในโปรแกรมคือ set แตèการที่จะไดéชนิดขéอมูลแบบเซ็ตนั้นตéองทำผèาน function set เพื่อใหéไดéเซ็ตออกมา ซึ่งสèวนมากแลéวจะใชé List มาทำการแปลงชนิดตัวแปรเปนเซ็ตอีกที ดังตัวอยèางดéานลèาง * function set(var) เปน function ที่ใชéในการแปลงชนิดของขéอมูลของตัวแปรอื่น ๆ มาเปนชนิดตัวแปร แบบ set โดยที่ตัวแปร var เปนชื่อตัวแปรที่ตéองการแปลงชนิดขéอมูลของตัวแปรนั้น ๆ
>>> basket = [’apple’, ’orange’, ’apple’, ’pear’, ’orange’, ’banana’] >>> fruit = set(basket) # create a set without duplicates >>> type(fruit)
>>> # Demonstrate set operations on unique letters from two words ... >>> a = set(’abracadabra’) >>> b = set(’alacazam’) >>> a # unique letters in a set([’a’, ’r’, ’b’, ’c’, ’d’]) >>> a - b # letters in a but not in b set([’r’, ’d’, ’b’]) >>> a | b # letters in either a or b set([’a’, ’c’, ’r’, ’d’, ’b’, ’m’, ’z’, ’l’]) >>> a & b # letters in both a and b set([’a’, ’c’]) >>> a ^ b # letters in a or b but not both set([’r’, ’d’, ’b’, ’m’, ’z’, ’l’])
5.2.5 ฟงกìชั่นที่นèาสนใจเกี่ยวขéองกับลิสตìและดิกชันนารี
* การเรียกใชéฟงคìชั่èนของลิสตìและดิกชันนารีนั้นทำคลéาย ๆ กับการเรียกใชéเมธอดในภาษา Java เชèน
>>> i = [1,2,3,4] >>> print i.pop() 4 >>> j = {’first’:’alpha’,’last’:’omega’} >>> print j.pop(’first’) alpha 36 ชนิดของตัวแปร (Data type)
ฟงกìชั่น pop - [ลิสตì/ดิกชันนารี]
รูปแบบฟงกìชั่น Object.pop([key]) ในลิสตìนั้นเราไมèจำเปนตéองกำหนดหมายเลขสมาชิก (index key) กèอนการ pop เพราะเมธอดจะนำคèาบนสุดมาใหéเรา แตèถéาตéองการ pop ในหมายเลขสมาชิกที่ตéองการก็ เพียงแตèใสèหมายเลขสมาชิกเทèานั้น แตèในดิกชันนารเราจำเปนตéองกำหนดชื่ออéางอิงสมาชิก (associated key) กèอนการ pop เพราะมิเชèนนั้นเมธอดจะไมèสามารถนำคèาของสมาชิกนั้น ๆ มาใหéเราได
>>> i = [1,2,3,4] >>> print i.pop() 4 >>> j = {’first’:’alpha’,’last’:’omega’} >>> print j.pop(’first’) alpha
ฟงกìชั่น append - [ลิสตì]
รูปแบบฟงกìชั่น Object.append([object]) เปนฟงกìชั่นที่ใชéในการเพิ่มขéอมูลสมาชิกลงไปในลิสตìโดยจะ นำไปตèอทéายลิสตìเสมอ
>>> i = [1,2,3,4] >>> print i.pop() 4 >>> i.append(5) >>> print i [1,2,3,5]
ฟงกìชั่น insert - [ลิสตì]
รูปแบบฟงกìชั่น Object.insert(index, object) เปนฟงกìชั่นที่ใชéในการเพิ่มขéอมูลสมาชิกลงไปในลิสตìโดย จะนำไปใสèในลำดับสมาชิกที่เราตéองการ
>>> print i [1, 3] >>> i.insert(4, 5) >>> print i [1, 3, 5] >>> i.insert(2, 6) >>> print i [1, 3, 6, 5]
ฟงกìชั่น count - [ลิสตì]
รูปแบบฟงกìชั่น Object.count([object]) เปนฟงกìชั่นที่ใชéในการนับขéอมูลสมาชิกที่ตéองการคéนหา
>>> i = [1,2,3,4] >>> print i.count(5) 5.2 ชนิดขéอมูลแบบการรวมกลุèมขéอมูล (Collection Data Types) 37
0 >>> print i.count(4) 1
ฟงกìชั่น index - [ลิสตì]
รูปแบบฟงกìชั่น Object.index(value, [ start , stop ]) เปนฟงกìชั่นที่ใชéในการหาคèาของหมายเลขสมาชิก (index key) วèาขéอมูลที่เราตéองการนั้นอยูèที่หมายเลขสมาชิกที่เทèาใด
>>> i = [1,2,3,4] >>> print i.index(4) 3 >>> print i.index(1) 0
ฟงกìชั่น extend - [ลิสตì]
รูปแบบฟงกìชั่น Object.extend(list|dict) เปนฟงกìชั่นที่ใชéในเพิ่มสมาชิกทั้งหมดจากอีกลิสตìหรือดิกชันนา รี จากตัวแปรอื่น ๆ มาไวéที่ตัวแปรตั้งตéน
>>> j = {’last’: ’omega’} >>> i = [1,2,3,4] >>> i.extend(j) >>> print i [1, 2, 3, 4, ’last’]
ฟงกìชั่น remove - [ลิสตì]
รูปแบบฟงกìชั่น Object.remove(value) เปนฟงกìชั่นที่ใชéในการลบคèาที่กำหนดไวéในพารามิเตอรìออกไป จากลิสตì
>>> print i [1, 2, 3, 4, ’last’] >>> i.remove(1) >>> print i [3, 6, 5, ’last’]
ฟงกìชั่น sort - [ลิสตì]
รูปแบบฟงกìชั่น Object.sort() เปนฟงกìชั่นที่ใชéในการจัดเรียงขéอมูล (sort) ภายในลิสตìโดยสามารถที่จะ จัดเรียงไดéทั้งตามหมายเลขสมาชิก หรือจัดเรียงตามขéอมูลของสมาชิก
>>> a = [5, 2, 3, 1, 4] >>> a.sort() >>> print a [1, 2, 3, 4, 5] 38 ชนิดของตัวแปร (Data type)
>>> i = [’a’,’r’,’b’,’i’,’z’] >>> print i [’a’, ’r’, ’b’, ’i’, ’z’] >>> i.sort() >>> print i [’a’, ’b’, ’i’, ’r’, ’z’]
ฟงกìชั่น reverse - [ลิสตì]
รูปแบบฟงกìชั่น Object.reverse() เปนฟงกìชั่นที่ใชéในการจัดเรียงขéอมูล (sort) ภายในลิสตìแบบยéอนกลับ
>>> a = [5, 2, 3, 1, 4] >>> a.sort() >>> print a [1, 2, 3, 4, 5] >>> i.reverse() >>> print i [5, 4, 3, 2, 1]
ฟงกìชั่น clear - [ดิกชันนารี]
รูปแบบฟงกìชั่น Object.clear() เปนฟงกìชั่นที่ใชéในการลบขéอมูลภายในดิกชันนารีทั้งหมด
>>> j = {’first’:’a’, ’second’:’b’} >>> print j {’second’: ’b’, ’first’: ’a’} >>> j.clear() >>> print j {}
ฟงกìชั่น get - [ดิกชันนารี]
รูปแบบฟงกìชั่น Object.get(key) เปนฟงกìชั่นที่ใชéในเรียกขéอมูลจากชื่ออéางอิงสมาชิกภายในดิกชันนารี
>>> j = {’first’:’a’, ’second’:’b’} >>> print j {’second’: ’b’, ’first’: ’a’} >>> j.get(’first’) ’a’
ฟงกìชั่น has key - [ดิกชันนารี]
รูปแบบฟงกìชั่น Object.has key(key) เปนฟงกìชั่นที่ใชéในการตรวจสอบชื่ออéางอิงสมาชิก (associated key) วèามีอยูèหรือไมè 5.3 สายอักขระ (String หรือ Array of Characters) 39
>>> j = {’first’:’a’, ’second’:’b’} >>> print j {’second’: ’b’, ’first’: ’a’} >>> j.has_key(’first’) True >>> j.has_key(’last’) False
ฟงกìชั่น items - [ดิกชันนารี]
รูปแบบฟงกìชั่น Object.items(key) เปนฟงกìชั่นที่ใชéในการแสดงรายการชื่ออéางอิงสมาชิกและขéอมูลทั้งหมด ในดิกชันนารี
>>> j = {’first’:’a’, ’second’:’b’} >>> print j {’second’: ’b’, ’first’: ’a’} >>>>>> j.items() [(’second’, ’b’), (’first’, ’a’)]
ฟงกìชั่น keys - [ดิกชันนารี]
รูปแบบฟงกìชั่น Object.keys() เปนฟงกìชั่นที่ใชéในการแสดงรายการชื่ออéางอิงสมาชิกทั้งหมดในดิกชันนา รี
>>> j = {’first’:’a’, ’second’:’b’} >>> print j {’second’: ’b’, ’first’: ’a’} >>>>>> j.keys() [’second’, ’first’]
ฟงกìชั่น values - [ดิกชันนารี]
รูปแบบฟงกìชั่น Object.values() เปนฟงกìชั่นที่ใชéในการแสดงรายการขéอมูลทั้งหมดในดิกชันนารี
>>> j = {’first’:’a’, ’second’:’b’} >>> print j {’second’: ’b’, ’first’: ’a’} >>>>>>>>> j.values() [’b’, ’a’]
5.3 สายอักขระ (String หรือ Array of Characters)
สายอักขระ (Strings) เปนการเรียงตัวของอักขระมาตèอกันมากกวèา 1 ตัวจนกลายเปนเสéนสาย หรือเรียก อีกอยèางวèาลำดับของอักขระ (Array of Characters) โดยเราสามารถกำหนดคèาตัวแปรไดéโดยใชéเครื่องหมาย 40 ชนิดของตัวแปร (Data type) single quotation (’.....’) หรือ double quotation (" .... ") ครอบอักขระ, สายอักจระ หรือแมéแตèตัวเลข และ รวมไปถึงสัญลักษณìพิเศษตèาง ๆ โดยในไพธอนนั้นจะเก็บขéอมูลแบบ 8-bit strings หรือ Unicode objects ขึ้นอยูèกับขéอมูลที่จัดเก็บอยูèในขณะนั้น ดังตัวอยèางตèอไปนี้
>>> print "Hello, World!"
และไดéผลการทำงาน
Hello, World!
ซึ่งบางครั้งเราตéองการพิมพìคèาของตัวแปรนั้นไปพรéอมกับขéอความใน function print นั้นสามารถใชéสัญลักษณì , (Concatenation Symbol) ดéานหลังชุดขéอความนั้น ๆ กèอน แลéวจึงพิมพìชื่อตัวแปรนั้น ๆ ตèอทéาย
>>> i = 5 >>> print "14 / 3 = ",14 / 3 >>> print "14 % 3 = ",14 % 3 >>> print "14.0 / 3.0 =",14.0 / 3.0 >>> print "hello", "hello", i
ผลการทำงาน
14 / 3 = 4 14 % 3 = 2 14.0 / 3.0 = 4.66666666667 hello hello 5
ซึ่งการใชé Concatenation Symbol นั้นสามารถที่จะนำมาประยุกตìใชéงาน อื่น ๆ ไดéอีกนอกจาก print แตèถéาตéองการใหéขéอความนั้นตèอกันใหéใชéสัญลักษณì + (String Concatenation Symbol) เพื่อเชื่อมขéอความ แตèละชุดเขéาดéวยกัน
>>> print "Jack and Jill went up a hill" + "to fetch a pail of water;" + "Jack fell down, and broke his crown," + "and Jill came tumbling after."
ผลการทำงาน
Jack and Jill went up a hill to fetch a pail of water; Jack fell down, and broke his crown, and Jill came tumbling after.
ซึ่งการใสèขéอมูลภายใตéเครื่องหมาย double quotation นั้น สามารถใชéสัญลักษณìพิเศษไดéดังนี้ 5.3 สายอักขระ (String หรือ Array of Characters) 41
\newline ไมèสนใจ (Ignored) \\ เครื่องหมาย Backslash ( \) \’ เครื่องหมาย Single quote (’) \" เครื่องหมาย Double quote (") \a ASCII Bell (BEL) \b ASCII Backspace (BS) \f ASCII Formfeed (FF) \n ASCII Linefeed (LF) \r ASCII Carriage Return (CR) \t ASCII Horizontal Tab (TAB) \v ASCII Vertical Tab (VT)
โดยเปนสัญลักษณìพิเศษที่เราเจอกันอยูèในหลาย ๆ ภาษา และในบางครั้งการตèอสายอักขระ นั้นอาจจะไมèสะดวกการใชé String formatting operator "%" เขéามา ชèวยจะทำใหéการนำตัวแปรตèาง ๆ มาใสèในสายอักขระทำไดéงèายมากขึ้น เชèน
>>> state = ’California’ >>> ’It never rains in sunny %s.’ %state
จะไดéผลการทำงานคือ
’It never rains in sunny California.’
โดยที่ %s นั้นเราสามารถแทนดéวยตัวอักษร s เปนตัวอักษรอื่น ๆ ไดéตามความเหมาะกับตัวแปรที่เราจะ นำมาผสมลงในสายอักขระ ซึ่งมีดังนี้
d Signed integer decimal i Signed integer decimal o Unsigned octal u Unsigned decimal x Unsigned hexidecimal (lowercase) X Unsigned hexidecimal (uppercase) e Floating point exponential format (lowercase) E Floating point exponential format (uppercase) f Floating point decimal format F Floating point decimal format g Same as "e" if exponent is greater than -4 or less than precision, "f" otherwise G Same as "E" if exponent is greater than -4 or less than precision, "F" otherwise c Single character (accepts integer or single character string) r String (converts any python object using repr()) s String (converts any python object using str()) 42 ชนิดของตัวแปร (Data type)
d = 4.5000 print ’It never rains in sunny %d.’ %d print ’It never rains in sunny %i.’ %d print ’It never rains in sunny %o.’ %d print ’It never rains in sunny %u.’ %d print ’It never rains in sunny %x.’ %d print ’It never rains in sunny %X.’ %d print ’It never rains in sunny %e.’ %d print ’It never rains in sunny %E.’ %d print ’It never rains in sunny %f.’ %d print ’It never rains in sunny %F.’ %d print ’It never rains in sunny %g.’ %d print ’It never rains in sunny %G.’ %d print ’It never rains in sunny %c.’ %int(d) print ’It never rains in sunny %r.’ %d print ’It never rains in sunny %s.’ %d
ผลการทำงาน
It never rains in sunny 4. It never rains in sunny 4. It never rains in sunny 4. It never rains in sunny 4. It never rains in sunny 4. It never rains in sunny 4. It never rains in sunny 4.500000e+000. It never rains in sunny 4.500000E+000. It never rains in sunny 4.500000. It never rains in sunny 4.500000. It never rains in sunny 4.5. It never rains in sunny 4.5. It never rains in sunny L. It never rains in sunny 4.5. It never rains in sunny 4.5.
5.3.1 ฟงกìชั่นที่นèาสนใจเกี่ยวขéองกับสายอักขระ
ฟงกìชั่น find
รูปแบบฟงกìชั่น Object.find((sub[, start[, end]]) เปนฟงกìชั่นที่ใชéในการคéนหาคำในสายอักขระโดยจะ คืนคèาใน หมายเลขสมาชิก (index key) ของสายอักขระนั้น ๆ ที่เจอเปนตัวแรก แตèถéาไมèเจอจะสèงคèา -1 กลับ มา 5.3 สายอักขระ (String หรือ Array of Characters) 43
>>> s = "windows" >>> s.find(’dow’) 3
ฟงกìชั่น upper
รูปแบบฟงกìชั่น Object.upper() เปนฟงกìชั่นที่ใชéในการทำใหéตัวอักษรเปลี่ยนเปนตัวใหญè (ในภาษาอังกฤษ)
>>> s = "windows" >>> s.upper() WINDOWS
ฟงกìชั่น lower
รูปแบบฟงกìชั่น Object.lower() เปนฟงกìชั่นที่ใชéในการทำใหéตัวอักษรเปลี่ยนเปนตัวเล็ก (ในภาษาอังกฤษ)
>>> s = "WINDOWS" >>> s.lower() windows
ฟงกìชั่น replace
รูปแบบฟงกìชั่น Object.replace(old, new) เปนฟงกìชั่นที่ใชéในการคéนหาคำที่กำหนดและแทนที่คำนั้น ดéวยคำที่กำหนดใหé
>>> s = ’The happy cat ran home.’ >>> s.replace(’cat’, ’dog’) ’The happy dog ran home.’ 44 ชนิดของตัวแปร (Data type) บทที่ 6
การเปรียบเทียบ (Comparisons)
ในภาษาไพธอนนั้นมีการเปรียบเทียบในเชิงคณิตศาสตรìตèาง ๆ เปนพื้นฐานอยูèแลéว แตèบางอยèางก็มีที่ไมè เหมือนกับภาษาอื่น ๆ คือมีการเพิ่มเติมการเปรียบเทียบในดéานของกลุèมขéอมูล และขéอมูลที่เหมือนกัน โดย ไดéเพิ่ม การเปรียบเทียบแบบ "in" และ "is" เขéามาเพื่อเปรียบเทียบกับกลุèมขéอมูล สèวนใหญèการใชé "is" มักใชéในการเปรียบเทียบดéานตัวอักขระและสายอักขระมากกวèาเพราะสื่อความหมายมากกวèาใชé "==" ในการ เปรียบเทียบ โดยเมื่อมีการเปรียบเทียบแลéวเราจะไดéผลออกมาคือคèาทางตรรกะ หรือ Boolean value ซึ่งในภาษาไพ ธอนนั้นคือ True แทนดéวยเปนจริง และ False แทนดéวยเปนเท็จ และเรายังสามารถใชéตัวเลขแทนคèาดังกลèาว ไดéดéวย 0 คือ False และ 1 คือ True นั้นเอง โดยคèาที่ไดéนั้นมาจากการทำการทดสอบทางตรรกศาสตรìในเชิง เปรียบเทียบคèาทั้งสองขéางของขéอมูล Operator ความหมาย < เปรียบเทียบคèาทางดéานซéายของเครื่องหมาย นéอยกวèา คèาทางดéานขวาหรือไมè <= เปรียบเทียบคèาทางดéานซéายของเครื่องหมาย นéอยกวèาหรือเทèากับ คèาทางดéานขวา หรือไมè > เปรียบเทียบคèาทางดéานซéายของเครื่องหมาย มากกวèา คèาทางดéานขวาหรือไมè >= เปรียบเทียบคèาทางดéานซéายของเครื่องหมาย มากกวèาหรือเทèากับ คèาทางดéานขวาหรือไมè == เปรียบเทียบคèาทางดéานซéายของเครื่องหมาย เทèากับ คèาทางดéานขวาหรือไมè != เปรียบเทียบคèาทางดéานซéายของเครื่องหมาย ไมèเทèากับ คèาทางดéานขวาหรือไมè <> เปรียบเทียบคèาทางดéานซéายของเครื่องหมาย ไมèมีทางเทèากับ คèาทางดéานขวาหรือไมè in เปรียบเทียบคèาทางดéานซéายของเครื่องหมายอยูèในกลุèมขéอมูลในกลุèมขéอมูลดéานขวาหรือไมè is เปรียบเทียบคèาทางดéานซéายของเครื่องหมาย เหมือนกับ คèาทางดéานขวาหรือไมè
ตัวอยèาง
>>> 1 < 2 True True >>> 0 != 1 >>> 2 <= 2 True True >>> x = [1,2,3,4] >>> 2 > 0 >>> 1 in x True True >>> 3 >= 3 >>> 1 is 1 True True >>> 0 == 0 45 46 การเปรียบเทียบ (Comparisons) บทที่ 7
นิพจนìทางตรรกะศาสตรì (Boolean Expressions)
การทำการเปรียบเทียบนั้น เมื่อไดéคèาจากการเปรียบเทียบซึ่งเปนคèาทางตรรกะมาหนึ่งคèา โดยทั่วไปแลéวก็ เพียงพอตèอการนำไปใชéในการทำสอบทางตรรกศาสตรì (Condition) อยูèแลéว แตèบางครั้งแลéวเรามักนำคèาตèาง ๆ มาเชื่อมกันเพื่อใหéไดéนิพจนìที่มีความหมายเชื่อมโยงกันเพื่อใหéไดéความหมายที่ดีมากขึ้นเมื่อมีการทดสอบ ทางตรรกศาสตรìมากกวèา 1 ชุดการทดสอบ และเปนการชèวยใหéการเขียนโปรแกรมนั้นสั้นลง โดยในไพธอน นั้นมีนิพจนìทางตรรกะศาสตรìตามพื้นฐานภาษาทั่วไปคือ AND, OR และ NOT โดยเปนการเปรียบเทียบจาก ผลของการเปรียบเทียบในเชิงคณิตศาสตรìที่ไดéอยูèกèอนแลéวมาเปรียบเทียบในเชิงตรรกศาสตรìอีกรอบหนึ่ง
7.1 AND (และ)
มีคียìเวิรìดคือ and จะประมวลผลประโยคหรือตัวแปรที่ตามหลังตัวมันเอง ถéาประโยคหรือตัวแปรที่อยูè กèอนหนéามีคèาทางตรรกศาสตรìเปน false เพราะวèาคèาที่เปน false เมื่อนำมาประมวลผลกับ คèาอื่น ๆ แลéว จะไดé false เสมอ expression ผล true and true True true and false False false and true False false and false False
7.2 OR (หรือ)
มีคียìเวิรìดคือ or จะประมวลผลประโยคหรือตัวแปรที่ตามมาเมื่อประโยคแรก หรือตัวแปรตัวแรกมีคèาเปน true เพราะวèาประโยคหรือตัวแปรที่มีคèาเปน true เมื่อนำมาประมวลกับคèาใด ๆ ก็ตามจะไดéคèา true เสมอ expression ผล true or true True true or false True false or true True false or false False
47 48 นิพจนìทางตรรกะศาสตรì (Boolean Expressions)
7.3 NOT (ไมè)
มีคียìเวิรìดคือ not โดยเมื่อไปอยูèหนéาตัวแปรหรือประโยคที่มีคèาทางตรรกศาสตรìคèาใดคèาหนึ่ง ก็จะเปลี่ยนคèา นั้นใหéเปนตรงกันขéามทันที expression ผล not true False not false True
ตัวอยèาง
>>> i = 1 >>> j = 2 >>> k = 3 >>> l = 1 >>> i == k and j == i False >>> i == k or l == i True >>> not i == k and l == i True บทที่ 8
ชèวงของการทำงาน (Statement block) และ ชèวง ชีวิตของตัวแปร (Life time หรือ Variable scope)
8.1 ชèวงของการทำงาน (Statement block)
กèอนอื่นเราตéองทำความเขéาในเกี่ยวกับชèวงของการทำงานของไพธอนเสียกèอน ยกตัวอยèาง ในภาษา C นั้นชèวงของการทำงานจะครอบดéวย เครื่องหมายปกกาเปดและปด ..... แตèใน Python ใชéยèอหนéาแทน (indentation) เชèน >>> x = 1 >>> if x == 1: >>> print "True" >>> else: >>> print "False" >>> print "xxx" การจบ block ก็ดูไดéจากยèอหนéา คำสั่ง if ก็อยèางที่เห็น if ตามดéวย เงื่อนไข จบดéวย : (colon) หลัง จากนั้น สิ่งที่จะถูกทำเมื่อเงื่อนไขเปนจริงก็จะอยูèในยèอหนéาเยื้องถัดมา ซึ่งโปรแกรมขéางบนก็ไดéผลออกมาเปน True xxx
8.2 ชèวงชีวิตของตัวแปร (Life time หรือ Variable scope)
ในการกำหนดชèวงชีวิตของตัวแปรวèาตัวแปรตัวไหนจะมีชèวงการทำงานในสèวนใดไดéบéางนั้นสามารถทำไดé โดยจากตัวอยèางดéานลèางนั้น เราไดéสรéางตัวแปรชนิดจำนวนเต็มชื่อวèา x ใหéคèาคือ 5 และสรéางฟงกìชั่นชื่อวèา hello โดยในตัวอยèางที่ 1 นั้นเรากำหนดตัวแปรภายในฟงกìชั่นใหéมีชื่อเปน x เหมือนกัน แลéวใสèคèาใหéเปน 6 แลéวตèอมาใหéฟงกìชั่น hello ทำงาน และ print คèา x ออกมา ผลคือไดé 6 และ 5 ตามลำดับ ในตัวอยèางที่ 2 นั้นเราไดéกำหนดตัวแปร และฟงกìชั่นตèาง ๆ เหมือนกับตัวอยèางที่ 1 เพียงแตèเราใชé global มากำหนดใหéกับ x วèาเราจะใชé x จาก global scope แทน แลéวทำการใสèคèาใหéกับ x เปน 6 ผลที่ไดéคือ 6 และ 6 ตามลำดับ
49 50 ชèวงของการทำงาน (Statement block) และ ชèวงชีวิตของตัวแปร (Life time หรือ Variable scope)
ตัวอยèางที่ 1 ตัวอยèางที่ 2
>>> x = 5 >>> x = 5 >>> def hello(): >>> def hello(): >>> global x >>> x = 6 >>> x = 6 >>> print x >>> print x >>> hello() >>> hello() >>> print x >>> print x คำตอบคือ คำตอบคือ
6 6 5 6
จากตัวอยèางทั้งสองจะเห็นวèาเราสามารถใชéตัวแปรแบบภายในฟงกìชั่นและจากภายนอกฟงกìชั่นไดéดéวยวิธี ดังตèอไปนี้
1. ถéาตéองการใชéตัวแปรภายนอกฟงกìชั่นที่มีอยูèแลéวใหéในคียìเวิรìด global แลéวตามดéวยชื่อตัวแปรที่มีอยูè แลéวจากภายนอกฟงกìชั่นนั้น แลéวจึงนำมาใชéงาน
2. ถéาตéองการประกาศตัวแปรใหมèภายในฟงกìชั่น สามารถประกาศตัวแปรไดéโดยทั่วไปไดéทันที
3. ถéาตéองการใชéทั้งตัวแปรภายนอกและภายในพรéอม ๆ กันใหéตั้งชื่อตัวแปรที่ตั้งใหมè ซึ่งใชéภายในฟงกìชั่น นั้นใหéชื่อแตกตèางกันเพื่อปองกันการสับสน บทที่ 9
การควบคุมทิศทางของโปรแกรม (Control flow, Flow of Control หรือ Alternatively)
การควบคุมทิศทางของโปรแกรม เปนการเลียนแบบ การทำงานของมนุษยì เพราะในเหตุการณìตèาง ๆ เรา มีการตัดสินสินใจในแบบตèาง ๆ กันออกไป เชèนเมื่อเดินทางไปเจอ 3 แยก เราตéองตัดสินใจ เสี้ยวซéายหรือ เลี้ยวขวา โดยมีแผนที่ และปายบอกเสéนทางเปนตัวกำหนด ใหéเราเลี้ยวซéายหรือเลี้ยวขวา เปนตéน ในการเขียน โปรแกรมก็คือ การจำลองตัวเราลงไป เพื่อจัดการกับสถาณการณìตèางๆ ซึ่งเราตéองมีขéอมูลในการประกอบการ พิจารณา ถéาขéอมูลบอกเราแบบหนึ่ง เราก็ตéองทำแบบหนึ่ง แตèถéาขéอมูลบอกเราอีกอยèาง เราก็ตéองทำอีกอยèาง ที่แตกตèางกันออกไป ซึงèการที่ตéองจัดการกับสถาณการณìตèางๆ นี้ เราเรียกมันวèาการควบคุมการทำงานของ โปรแกรมนั่นเอง การควบคุมการทำงาน มี 3 รูปแบบ ไดéแกè
1. การตัดสินใจ (Decisions, Choice หรือ Selection)
2. การวนทำซ้ำ (Loop หรือ Iteration)
3. การจัดการความผิดปกติของโปรแกรม (Error Checking)
ในการควบคุมทิศทาง ไมèวèาจะเปนการตัดสินใจ หรือการทำงานแบบวนซ้ำ เราจะตéองอาศัยการ พิจรณาขéอมูล ที่มีอยูè ประกอบการควบคุม สèวนการจัดการความผิดปกติของโปรแกรมนั้นเปนการดักจับสิ่งที่อาจจะเกิดขึ้น ไดéจากการเขียนโปรแกรมที่ไมèครอบคลุมการทำงาน ซึ่งอาจจะเกิดขึ้นไดé แตèปองกันโปรแกรมปดตัวเองโดย ฉับพลัน เราจึงใชéการจัดการความผิดปกติของโปรแกรมมาชèวยในการดักจับสิ่งเหลèานี้
9.1 การตัดสินใจ (Decisions, Choice หรือ Selection)
9.1.1 if Statements
คำสั่ง if ใชéตัดสินใจวèาจะทำหรือไมèทำคำสั่งชุดหนึ่งที่อยูèภายในชèวงของการทำงานของ if (if Statements scope) ถéาเงื่อนไขที่นำมาทดสอบทางตรรศาสตรìเปนจริง (True) ก็จะทำคำสั่งชุดนั้นถéาเงื่อนไขที่นำมาทดสอบ ทางตรรกศาสตรìเปนเท็จ (False) ก็จะไมèทำคำสั่งชุดนั้น โดยมีรูปแบบคำสั่งในภาษาไพธอนดังนี้
51 52 การควบคุมทิศทางของโปรแกรม (Control flow, Flow of Control หรือ Alternatively) if Condition: Statements ...... else: Statements ......
ตัวอยèาง
>>> x = 1 >>> if x is 1: >>> print ’Yes’ >>> else: >>> print ’No’
โดยจากตัวอยèางดéานบนนั้นจะไดéผลออกมาเปน "Yes" เนื่องจากวèา x มีคèาเปน 1 และเปรียบเทียบกับ 1 ซึ่งมี คèาเดียวกันผลที่ออกมาเปน True ในการเปรียบเทียบ แลéวจึงพิมพìคèา "Yes" ออกมานั้นเอง ซึ่งในบางครั้งการตัดสินใจในการทำชุดคำสั่งอาจมีมากกวèา 2 ทางจากขéางตéน เราสามารถในคำสั่งอีกหนึ่ง ตัวที่ชื่อวèา elif ไดé (หรือ มาจาก else if ในภาษาอื่น เชèน java หรือ c/c++) โดยมีรูปแบบดังตèอไปนี้ if Condition: Statements ...... elif Condition: Statements ...... else: Statements ......
ตัวอยèาง
>>> x = 3 >>> if x < 1: >>> print ’x < 1’ >>> elif x > 1: >>> print ’x > 1’ >>> else: >>> print ’x = 1’
จากตัวอยèางดéานบน นั้นเราจะไดéคำตอบคือ "x > 1" 9.2 การวนทำซ้ำ (Loop) 53
9.1.2 switch Statements
ในไพธอนนั้นไมèสนับสนุนการตัดสินใจแบบ switch
9.2 การวนทำซ้ำ (Loop)
9.2.1 while Statements
คำสั่ง while เปนคำสั่งที่ใชéในการวนทำซ้ำในชèวงของการทำงานของ while (while Statements scope) จนกวèาการทดสอบทางตรรกศาสตรìจะเปนเท็จ มีรูปแบบดังนี้ while Condition: Statements ......
ตัวอยèาง
>>> x = 1 >>> while x < 5: >>> print ’Yes\n’ >>> x+=1
ผลจากการทำ
Yes Yes Yes Yes
จากตัวอยèางคือกำหนดใหé x มีคèาเปน 1 แลéวเปรียบเทียบทางตรรกศาสตรìกèอน โดยใหé x < 5 ในที่นี้ x มี คèาเปน 1 ผลคำตอบคือ True จึงทำคำสั่งภายในชèวงการทำงานของ while โดยการพิมพì Yes แลéวทำการเพิ่ม คèา x โดยการบวกไปทีละ 1 คèา แลéวกลับมาเปรียบเทียบทางตรรกศาสตรìใหมè ทำอยèางนี้ไปเรื่อย ๆ จนกวèา การเปรียบเทียบทางตรรกศาสตรìจะมีผลเปน False
9.2.2 for Statements
คำสั่ง for เปนคำสั่งที่ใชéในการวนทำซ้ำในชèวงของการทำงานของ for (for Statements scope) จนกวèา การทดสอบทางตรรกศาสตรìจะเปนเท็จ โดยมีการกำหนดชèวงการทำงานต่ำสุด และมากสุดของจำนวนครั้งที่ ทำคำสั่งภายในดéวย โดยใชé for รวมกับคำสั่งในการเปรียบเทียบทางตรรกศาสตรìคือ in และ function การ ทำงานแบบชèวงของกลุèมของขéอมูลคือ range (ดูวิธีการใชéไดéจากบทกèอน ๆ ) 54 การควบคุมทิศทางของโปรแกรม (Control flow, Flow of Control หรือ Alternatively) for var in range(m, n [, step = 1]): Statements ......
ตัวอยèาง
>>> for i in range(0, 10): >>> if i % 2 == 0: >>> print i, ’is an even number’ >>> else: >>> print i, ’is an odd number’
จากตัวอยèางดéานบนนั้นทำการทำซ้ำตั้งแตè 0 ไปจนถึง 9 แลéวทำการตรวจสอบหาเลขคี่และเลขคูèดéวย
0 is an even number 1 is an odd number 2 is an even number 3 is an odd number 4 is an even number 5 is an odd number 6 is an even number 7 is an odd number 8 is an even number 9 is an odd number
ซึ่งในไพธอนนั้นไมèสนับสนุน foreach แตèเราสามารถใชéความสามารถของ for มาใชéงานจนไดéคำสั่ง fore- ach ไดéอยูèแลéว
>>> x = {’first’:’one’, ’second’:’two’} >>> for j in x: print x[j] two one
9.2.3 pass, break, continue และ else Clauses Statements pass
เปนคำสั่งที่ใชéในการทดแทน Statements อื่น ๆ โดยไมèมีการทำงานตัวอยèาง
>>> while True: .... pass .... 9.3 การจัดการความผิดปกติของโปรแกรม (Error Checking) 55 break
คำสั่งนี้ใชéในการหยุดการทำงานของการวนทำซ้ำ หรือการตัดสินใจ continue
คำสั่งนี้ใชéในการเริ่มการทำงานหลังจากหยุดการทำงานของการวนทำซ้ำ หรือการตัดสินใจ else Clauses
คำสั่งนี้ใชéในการทำหลังจาก break ใน การวนทำซ้ำ (Loop, Iteration)
ตัวอยèาง for n in range(2, 10): for x in range(2, n): if n % x == 0: print n, ’equals’, x, ’*’, n/x break else: print n, ’is a prime number’
2 is a prime number 3 is a prime number 4 equals 2 * 2 5 is a prime number 6 equals 2 * 3 7 is a prime number 8 equals 2 * 4 9 equals 3 * 3
9.2.4 do-while Statements
ในไพธอนนั้นไมèสนับสนุนการตัดสินใจแบบ do-while (จะสนับสนุนบน Python 2.5 และมีบน Python 2.5 Beta เมื่อวันที่ 24 กุมพาพันธì 2549)
9.3 การจัดการความผิดปกติของโปรแกรม (Error Checking)
9.3.1 assert Statements
assert เปนคำสั่งที่วางไวéสำหรับตรวจสอบความผิดพลาดภายในคำสั่งที่เราเขียนในโปรแกรมของเรา โดย เปนเหมือนสèวนเติมเต็มในการแจéงความผิดพลาดของตัวไพธอนเพื่อบอกรายละเอียดที่มากขึ้นในการเขียน โปรแกรมของเรา ดังรูปแบบคือ assert Condition, ’Text Error or Text Mixed’ 56 การควบคุมทิศทางของโปรแกรม (Control flow, Flow of Control หรือ Alternatively)
ตัวอยèาง def test(arg1, arg2): arg1 = float(arg1) arg2 = float(arg2) assert arg2 != 0, ’Bad dividend, arg1: %f arg2: %f’ % (arg1, arg2) ratio = arg1 / arg2 print ’ratio:’, ratio test(0,2) test(2,0)
เมื่อเราสั่งใหéทำงานจะไดéดังนี้ ratio: 0.0 Traceback (most recent call last): File "C:\tmp.py", line 51, in ? test(2,0) File "C:\tmp.py", line 46, in test assert arg2 != 0, ’Bad dividend, arg1: %f arg2: %f’ % (arg1, arg2) AssertionError: Bad dividend, arg1: 2.000000 arg2: 0.000000
จะเห็นไดéวèาโปรแกรมจะมีตัวชèวยในการสรéางมุมมองของตัวแปรตèาง ๆ ไดéวèาคèาที่ใสèไปนั้นถูกตéองหรือไมè
9.3.2 try-except และ raise Statements (Exception handling)
ในภาษาไพธอนนั้น try-except เปนการบอกถึงสิ่งผิดปกติที่เกิดขึ้นในโปรแกรม ซึ่งอาจเปนขéอผิดพลาด หรือเหตุการณìที่ไมèพึงประสงคìและตéองการความดูแลเปนพิเศษ โดยทั่วไปในการเขียนโปรแกรมที่ดีนั้น เรา จะตéองตรวจสอบถึงเหตุการณìที่อาจทำใหéโปรแกรมของเราลéมเหลวในการทำงาน เชèน ขéอมูลถูกหารดéวยศูนยì, การเขéาหาขéอมูลใน list ดéวยการใชé index ที่ไมèมีอยูèจริง หรือ อéางถึงหนèวยความจำที่เปน null เปนตéน ถึงแมéวèา เรามีวิธีการตรวจสอบ error ตèาง ๆ เหลèานี้ดéวยการใชéการตั้งสินใจดéวย if Statements หรือ การตรวจสอบอื่น ๆ ที่ทำใหéโปรแกรมของเราทำงานไดéราบรื่น แตèจะทำใหé code ของเราดูแลéววุèนวายเพราะถéามีการตรวจสอบ ขéอผิดพลาดมากเกินไปชุดคำสั่งของเราก็จะดูซับซéอนมากยิ่งขึ้น แตèไมèไดéหมายความวèาเราจะไมèตรวจสอบ และ ดักจับขéอผิดพลาดเหลèานี้ การนำเอา try-except เขéามาเปนตัวชèวยในการตรวจสอบและดักจับ ทำใหéเกิดการ แยกสèวนของ code ที่ทำงานไดéราบรื่น ออกจากสèวนของชุดคำสั่งที่จัดการเกี่ยวกับความผิดพลาดทำใหéเรา สามารถที่จะคéนหาสèวนของคำสั่งทั้งสองไดéงèายขึ้น ถéามีการเปลี่ยนแปลง code ในอนาคต ขéอดีอีกอันหนึ่ง ของ try-except ก็คือ ทำใหéการตรวจสอบและดักจับเปนไปอยèางเฉพาะเจาะจง ตรงกับขéอผิดพลาดที่เกิดขึ้น ทำใหéการแกéไขเปนไปอยèางถูกตéอง และเนื่องจากวèาขéอผิดพลาดตèาง ๆ มีหลากหลายรูปแบบ เราตéองเขียน คำสั่งตèาง ๆ ขึ้นมารองรับไมèเชèนนั้นแลéว โปรแกรมของเราก็จะไมèผèานการ compile เราไมèจำเปนที่จะตéอง ใชé try-except ในการตรวจสอบและดักจับ error ในโปรแกรมเสมอไป เพราะการใชé exception จะเสียเวลา ในการประมวลผลมาก ทำใหéโปรแกรมทำงานชéาลง ดังนั้นเราจะตéองตัดสินใจใหéดีวèาควรจะใชé try-except ใน กรณีไหน อยèางไร ตัวอยèางของโปรแกรมที่ไมèตéองใชé try-except ก็นèาจะเปนการใสèขéอมูลนำเขéาแบบผิด ๆ ของ ผูéใชé ซึ่งถือเปนเรื่องปกติ ถéาเรามัวแตèเสียเวลาในการดักจับดéวยการใชé try-except แทนการตรวจสอบและดัก จับทั่วไปโปรแกรมของเราก็จะเสียเวลาในการประมวลผลสèวนอื่น ๆ ไป 9.3 การจัดการความผิดปกติของโปรแกรม (Error Checking) 57
รูปแบบคำสั่ง try: Standard operation except: Error operation
จากรูปแบบคำสั่ง ชุดคำสั่งเดิมหรือคำสั่งที่ตéองกาารทำงานทั่ว ๆ ไป จะอยูèภายใตéชèวงการทำงานของ try ถéา การทำงานภายในชèวงการทำงานของ try มีขéอผิดพลาดการทำงานจะกระโดด หรือถูกโยนการทำงานไปสูèชèวง การทำงานของ except แทน ดังตัวอยèางดéานลèางนี้
>>> try: ... x = y ... except: ... print ’y not defined’ ... y not defined
ถéาเราไมèไดéใชé try-except จะไดéผลแบบนี้
>>> x = y Traceback (most recent call last): File "", line 1, in ? NameError: name ’y’ is not defined
จากตัวอยèางที่ไดéดูไปเปนรูปแบบ try-except ที่งèายที่สุด แตèในการดักจับขéอผิดพลาดจริง ๆ แลéวเราไมèสามารถ ที่จะทำแบบนี้ไดéทุกกรณี เพราะขéอผิดพลาดในชุดคำสั่งที่เราเขียนไปนั้นมีกลุèมของความผิดพลาดที่แตกตèาง กัน เชèนความผิดพลาดของการอèานและเขียนไฟลì, ขéอผิดพลาดจากการทำเกินขอบเขตของลิสตì, ฯลฯ โดยเรา ดูไดéจากตัวอยèางตèอไปนี้ ตัวอยèางที่ไมèไดéใชé try-except
>>> fridge_contents = {"egg":8, "mushroom":20, "pepper":3, "cheese":2, "tomato":4,"milk":13} >>> if fridge_contents["orange juice"] > 3: ... print "Sure, let’s have some juice" ... Traceback (most recent call last): File "
จากดéานบนไมèไดéมีการแกéไขปญหาทาง try-except ทำใหéแจéงขéอผิดพลาดแบบควบคุมไมèไดé เราจึงเขียนใหมè โดยใชé try-except มาแกéปญหานี้
>>> fridge_contents = {"egg":8, "mushroom":20, "pepper":3, "cheese":2, "tomato":4,"milk":13} >>> try: 58 การควบคุมทิศทางของโปรแกรม (Control flow, Flow of Control หรือ Alternatively)
... if fridge_contents["orange juice"] > 3: ... print "Sure, let’s have some juice" ... except KeyError: ... print "Aww, there’s no juice. Lets go shopping" ... Aww, there’s no juice. Lets go shopping
เมื่อเราใชé try-except เราสามารถควบคุมควบคุมวèาผลของความผิดพลาดที่ออกมาจะเปนอยèางไรดéวย โดย ควบคุมชนิดของความผิดพลาดวèาจะใหéออกมาเปนแบบใด ในที่นี้ในการ except ความผิดพลาดแบบ KeyEr- ror แลéวใหéพิมพìขéอความผิดพลาดออกมา
>>> fridge_contents = {"egg":8, "mushroom":20, "pepper":3, "cheese":2, "tomato":4,"milk":13} >>> try: ... if fridge_contents["orange juice"] > 3: ... print "Sure, let’s have some juice" ... except KeyError, error: ... print "Woah! There is no %s" % error ... Woah! There is no ’orange juice’
raise เปน Statements เสริมของ try-except เพื่อชèวยในการโยนความผิดพลาดไปใชéใน try-except ตèอ อื่น ๆ ที่เกี่ยวขéอง
>>> class E(RuntimeError): ... def __init__(self, msg): ... self.msg = msg ... def getMsg(self): ... return self.msg ... >>> >>> try: ... raise E(’my test error’) ... except E, obj: ... print ’Msg:’, obj.getMsg() ... Msg: my test error บทที่ 10
การสรéางฟงกìชั่น (Defined Function)
ฟงกìชั่นคือแหลèงรวมชุดคำสั่งหลาย ๆ โดยคำสั่งที่เราเรียบเรียงขึ้นเอง เพื่อนำไปใชéในการเขียนโปรแกรม ซ้ำ ๆ กันโดยไมèตéองเขียนชุดคำสั่งนั้น ๆ ใหมèอีกครั้ง (Reusability Code) โดยในไพธอนนั้นก็มีฟงกìชั่นอยูè 2 แบบคือ สามารถคืนคèากลับมาไดé (real function, return value) และแบบไมèคืนคèา (void, sub , subprogram หรือ subroutine ) การสรéางฟงกìชั่นจะใชéคียìเวิรìดชื่อ def แลéวตามดéวยชื่อของฟงกìชั่นนั้น ๆ โดยลักษณะของ ชèวงการทำงานเหมือนกับคำสั่งควบคุมทิศทางโปรแกรมตèาง ๆ เชèนเดียวกัน รูปแบบการเขียนคำสั่ง def function_name( [Argument] ): Statement …… [return]
• function name ชื่อฟงกìชั่น
• Statements ชุดคำสั่ง
• var ตัวแปร
• Argument รับคèาของฟงกìชั่น
• return การคืนคèากลับ โดยที่การคืนคèากลับนั้นสามารถคืนคèากลับไดéมากกวèา 1 คèา หรือมากกวèา 1 ตัวแปร ซึ่งสามารถคืนคèาไดéทุกชนิดขéอมูลดéวย
ตัวอยèาง
# สèวนนี้ใชé define ฟงกìชั่น def foo(): print "Foobar" # สèวนนี้เปนสèวนที่เรียกใชé ตéองมีเครื่องหมาย () หลังวงเล็บเสมอ foo()
ผลการทำงาน
Foobar
59 60 การสรéางฟงกìชั่น (Defined Function)
10.1 การรับคèาของฟงกìชั่น, คืนคèากลับ และคèามาตรฐานของการรับคèา
1. การรับคèาของฟงกìชั่น (Function Argument)
2. การคืนคèากลับ (return)
3. คèามาตรฐานของการรับคèา (Function Default Argument)
ตัวอยèาง
# สèวนนี้ใชé define ฟงกìชั่น def foo(text): print text # สèวนนี้เปนสèวนที่เรียกใชé ตéองมีเครื่องหมาย () หลังวงเล็บเสมอ foo("Foobar")
ผลการทำงาน
Foobar
ตัวอยèาง คียìเวิรìด return เปนคำสั่งใหéฟงกìชั่นนั้นคืนคèาและ ออกจาก function def add(x,y): return x + y print add(10,20) print add(add(10,20),30)
ผลการทำงาน
30 60
ตัวอยèาง การคืนคèาแบบหลายคèา หรือหลายตัวแปร a, b, c = 0, 0, 0 def getabc(): a = "Hello" b = "World" c = "!" return a,b,c def gettuple(): a,b,c = 1,2,3 return (a,b,c) def getlist(): a,b,c = (3,4),(4,5),(5,6) return [a,b,c] a,b,c = getabc() 10.1 การรับคèาของฟงกìชั่น, คืนคèากลับ และคèามาตรฐานของการรับคèา 61 print a,b,c d,e,f = gettuple() print d,e,f g,h,i = getlist() print g,h,i
ผลการทำงาน
Hello World ! 1 2 3 (3, 4) (4, 5) (5, 6)
ตัวอยèาง กำหนดคèามาตรฐานของตัวแปร x และ y ใหéมีคèาเปน 0 เพื่อปองกันการไมèใสèใหéกับตัวรับคèาใน ฟงกìชั่น def add(x = 0,y = 0): return x + y print add(10,20) print add()
ผลการทำงาน
30 0
ตัวอยèาง def multiprint( n=5, txt="Hello" ): i = 0 while i < n: print txt multiprint()
ผลการทำงาน
Hello Hello Hello Hello
ตัวอยèาง def factorial(n = 1): if n <= 1: return 1 return n*factorial(n-1) print "2! = ",factorial(2) 62 การสรéางฟงกìชั่น (Defined Function) print "3! = ",factorial(3) print "4! = ",factorial(4) print "5! = ",factorial(5)
ผลการทำงาน
2! = 2 3! = 6 4! = 24 5! = 120
10.2 ตัวแปรแบบ Global (ทั่วไป) และ Local (เฉพาะสèวน)
ในการประกาศตัวแปรตัวหนึ่งขึ้นมาใชé จะเปลืองหนèวยความจำไปสèวนหนึ่งสำหรับเก็บคèาตัวแปร ดังนั้นถéา เราประกาศตัวแปรมา 1 ตัว แลéวนำไปใชéเพียงในฟงกìชั่นเดียว จะเปนการสิ้นเปลื่องโดยใชèเหตุ ดังนั้นควร ประกาศตัวแปรแบบทั่วไปบéางตามความเหมาะสม โดยตัวแปรเฉพาะสèวนที่อยูèภายในฟงกìชั่นนั้น เมื่อฟงกìชันจบการทำงานตัวแปรพวกนี้จะถูกลบออกไป จากหนèวยความจำทันที ซึ่งประโยชนìอีกอยèางหนึ่งของตัวแปรเฉพาะ (Local Variable) ก็คือ สèวนอื่น ๆ ของ โปรแกรมจะไมèรูéจักตัวแปรเฉพาะสèวนที่อยูèในฟงกìชั่นเลย ดังนั้นเราก็สามารถใชéตัวแปรชื่อเดียวกันไดé พรéอมกันในคนละสèวนของโปรแกรม โดยไมèเกิดขéอผิดพลาด โดยในการทำงานหลัก ๆ ของโปรแกรมเราก็ตéองใชéตัวแปรทั่วไป (Global Variable) โดยที่ตัวแปรทั่วไป จะเปนที่รูéจักไปทั้งโปรแกรมดังนั้นฟงกìชั่นตèาง ๆ ก็สามารถเรียกใชéไดéดéวย โดยการเรียกใชéตัวแปรทั่วไปในนั้น ตéองใชéดียìเวิรìดที่ชื่อ global ตามดéวยชื่อตัวแปรแบบทั่วไป
ตัวอยèาง การใชéตัวแปรแบบเฉพาะที่ ตัวอยèาง การใชéตัวแปรแบบทั่วไป
x = 5 x = 5 def hello(): def hello(): global x x = 6 x = 6 print x print x hello() hello() print x print x ผลการทำงาน ผลการทำงาน
6 6 5 6 บทที่ 11
การใสèขéอมูลผèานคียìบอรìด (Input Data from Keyboard)
เราสามารถใหéผูéใชéสามารถที่จะใสèคèาที่เราตéองการไดéผèานทางคียìบอรìดโดยทำงานผèานฟงกìชั่นที่ชื่อวèา raw input รูปแบบการเขียนคำสั่ง var = raw_input([prompt])
• prompt ขéอความที่เปนคำถาม
• var ตัวแปรที่มารับขéอมูล ซึ่งคèาที่สèงออกมาจาก raw input ฟงกìชั่น โดยมีชนิดขéอมูลเปน String
ตัวอยèาง print "Halt!" s = raw_input("Who Goes there? ") print "You may pass,", s
เมื่อสั่งทำงานจะแสดงขéอความดังนี้
Halt! Who Goes there?
ทำการกรอกขéอมูลงไปใน โดยในตัวอยèางนี้กรอกคำวèา Josh ลงไป แลéวจะทำการแสดงออกมา
Halt! Who Goes there? Josh You may pass, Josh
63 64 การใสèขéอมูลผèานคียìบอรìด (Input Data from Keyboard)
ตัวอยèาง menu_item = 0 list = [] while menu_item != 9: print "------" print "1. Print the list" print "2. Add a name to the list" print "3. Remove a name from the list" print "4. Change an item in the list" print "9. Quit" menu_item = input("Pick an item from the menu: ") if menu_item == 1: current = 0 if len(list) > 0: while current < len(list): print current,". ",list[current] current = current + 1 else: print "List is empty" elif menu_item == 2: list.append(raw_input("Type in a name to add: ")) elif menu_item == 3: del_name = raw_input("What name would you like to remove: ") if del_name in list: item_number = list.index(del_name) del list[item_number] #The code above only removes the first occurance of # the name. The code below from Gerald removes all. #while del_name in list: # item_number = list.index(del_name) # del list[item_number] else: print del_name," was not found" elif menu_item == 4: old_name = raw_input("What name would you like to change: ") if old_name in list: item_number = list.index(old_name) list[item_number] = raw_input("What is the new name: ") else: print old_name," was not found" print "Goodbye" 65
การทำงาน เมื่อทำงานจะแสดงขéอความดéานลèางนี้
------1. Print the list 2. Add a name to the list 3. Remove a name from the list 4. Change an item in the list 9. Quit
ใหéพิมพì 2 ลงไปแลéวกรอกคำวèา Jack และไลèการทำงานตèาง ๆ ดังตัวอยèางดéานลèาง ไปเรื่อย ๆ ซึ่งนี่คือการ ทำงานโดยการรับคèาผèานทางคียìบอรìดนั้นเอง
Pick an item from the menu: 2 Type in a name to add: Jack
Pick an item from the menu: 2 Type in a name to add: Jill
Pick an item from the menu: 1 0 . Jack 1 . Jill
Pick an item from the menu: 3 What name would you like to remove: Jack
Pick an item from the menu: 4 What name would you like to change: Jill What is the new name: Jill Peters
Pick an item from the menu: 1 0 . Jill Peters
Pick an item from the menu: 9 Goodbye 66 การใสèขéอมูลผèานคียìบอรìด (Input Data from Keyboard) ภาคผนวก ก
เรื่องที่หéามลืมใน Python
1. Don’t forget the colons อยèาลืมโคลอน (Colon, :) เมื่อจบคำสั่งควบคุมทิศทางของโปรแกรมตèาง ๆ เชèน if, while หรือ for เปนตéน
2. Start in column 1 ไพธอนใชéระบบแท็ปแทนปกกาเพื่อควบคุมชèวงของการทำงาน และตéองเริ่มจาก คอลัมที่ 1 ทุกครั้งดéวย
3. Blank lines matter at the interactive prompt อยèาเผลอมีบรรทัดวèางหรือขึ้นบรรทัดใหมèใน shell prompt ถéาไมèชัวรìวèาเขียนคำสั่งจบในบรรทัดนั้น ๆ
4. Indent consistently อยèาใชéปุèมแท็ปปนกับการเคาะเวéนวรรค โดยควรเลือกวèาจะใชéการแท็ปหรือเคาะ วรรคì ถéาใชéเคาะวรรคก็ควรใชéใหéตลอดรอดฝง โดย 1 แท็ป ใหéมีขนาดเทèากับเคาะวรรค 4 ครั้ง (4 whitespaces/tab)
5. Don’t code C in Python อยèาเขียนโคéดแบบ C ในไพธอน เชèน if (X==1): print X โดยในความ เปนจริงแลéวไมèตéองมี () ก็ไดé เปนตéน
6. Don’t always expect a result บาง Method เชèน Append หรือ Sort อยèาไปคิดวèามันจะ return obj บางครั้งมัน return None หรือ Null ออกมา ซึ่งเราไมèจำเปนตéองเขียน list=list.append(X) แตèใหé เขียน list.append(X) ลงไปไดéเลย
7. Use calls and imports properly หลังเรียก Method ใหéมี () ดéวยเชèน function() อยèาใชé function เฉยๆ และตอน Import ไมèตéองใสèนามสกุล file อยèาง import mod.py ใชé import mod เฉยๆ ก็พอ
67 68 เรื่องที่หéามลืมใน Python ภาคผนวก ข
การติดตั้ง Python, wxPython และ Stani’s Python Editor
ข.1 การติดตั้ง Python
* ในเอกสารนี้อéางอิง Python Version 2.4.3
1. ดาวนìโหลด Python 2.4 สำหรับ Windows ไดéจาก http://www.python.org/download/ และเลือก version 2.4.x จากรายการดาวนìโหลด โดยเลือกรูปแบบ "Python 2.4.x Windows installer"
รูปที่ ข.1: เลือกดาวนìโหลด Python 2.4 สำหรับ Windows
2. ดับเบิลคลิ้กที่ Python-2.xxx.yyy.exe ที่เปนไฟลìที่เราดาวนìโหลด แลéวทำตามขั้นตอนการติดตั้งดังตèอไปนี้
69 70 การติดตั้ง Python, wxPython และ Stani’s Python Editor
รูปที่ ข.2: ขั้นตอนที่ 1 : ดับเบิลคลิ้กที่ไฟลìติดตั้ง
รูปที่ ข.3: ขั้นตอนที่ 2 : เลือก "Install for all users"
รูปที่ ข.4: ขั้นตอนที่ 3 : ใหéเลือกที่ติดตั้งที่ C:\Python24\ ข.1 การติดตั้ง Python 71
รูปที่ ข.5: ขั้นตอนที่ 4 : เลือกติดตั้งทุกตัวเลือก
รูปที่ ข.6: ขั้นตอนที่ 5 : ดำเนินการติดตั้ง
รูปที่ ข.7: ขั้นตอนที่ 6 : เสร็จสิ้นการติดตั้ง 72 การติดตั้ง Python, wxPython และ Stani’s Python Editor
ข.2 การติดตั้ง wxPython
* ในเอกสารนี้อéางอิง wxPython Version 2.6.3.3 win32-unicode for Python 2.4 1. ดาวนìโหลด wxPython Version 2.6 สำหรับ Windows ไดéจาก http://www.wxpython.org/download.php และไปที่ Microsoft Windows และเลือก win32-unicode จากตาราง wxPython runtime โดยเลือก ที่คอรìลัม Python 2.4 จากรายการดาวนìโหลด โดย win32-unicode สำหรับ Windows NT/2000/XP และ win32-ansi สำหรับ Windows 95/98/Me
รูปที่ ข.8: เลือกดาวนìโหลด wxPython runtime for Python 2.4
รูปที่ ข.9: เลือกสถานที่ดาวนìโหลด
2. ดับเบิลคลิ้กที่ wxPython2.6-win32-unicode-2.6.3.3-py24.exe แลéวทำตามขั้นตอนการติดตั้งดังตèอไปนี้ ข.2 การติดตั้ง wxPython 73
รูปที่ ข.10: ขั้นตอนที่ 1 : ดับเบิลคลิ้กที่ไฟลìติดตั้ง
รูปที่ ข.11: ขั้นตอนที่ 2 : หนéาตéอนรับการติดตั้งใหé กด Next
รูปที่ ข.12: ขั้นตอนที่ 3 : หนéายอมรับขéอตกลงใหé กด Yes
รูปที่ ข.13: ขั้นตอนที่ 4 : หนéาเลือกสถานที่ติดตั้ง ใหéเลือกตามที่โปรแกรมไดéกำหนดไวéแตèแรก 74 การติดตั้ง Python, wxPython และ Stani’s Python Editor
รูปที่ ข.14: ขั้นตอนที่ 5 : หนéาเลือก component ใหéเลือกทั้งหมด แลéวกด Next
รูปที่ ข.15: ขั้นตอนที่ 6 : เขéาสูèขั้นตอนการติดตั้งและเมื่อเสร็จแลéวใหéเลือก checkbox ทั้งหมดเพื่อใหé โปรแกรมติดตั้งทำการดัดแปลงระบบเพิ่มเติมแลéวกด Finish ข.3 การติดตั้ง Stani’s Python Editor 75
ข.3 การติดตั้ง Stani’s Python Editor
* ในเอกสารนี้อéางอิง Stani’s Python Editor Version 0.8.2.a for wxPython Version 2.6 win32- unicode and Python 2.4 1. ดาวนìโหลด Stani’s Python Editor Version 0.8.2.a ไดéจาก http://www.stani.be/python/spe/page download และไปที่ Where to get? และเลือก SourceForge (mirror)
รูปที่ ข.16: ดาวนìโหลด Stani´s Python Editor Version 0.8.2.a สำหรับ Windows ไดéจากลิงสì SourceForge (mirror)
รูปที่ ข.17: เลือกสถานที่ดาวนìโหลด
2. ดับเบิลคลิ้กที่ SPE-0.8.2.a-wx2.6.1.0-py24.exe ที่เปนไฟลìที่เราดาวนìโหลด แลéวทำตามขั้นตอนการ ติดตั้งดังตèอไปนี้ 76 การติดตั้ง Python, wxPython และ Stani’s Python Editor
รูปที่ ข.18: ขั้นตอนที่ 1 : ดับเบิลคลิ้กที่ไฟลìติดตั้ง
รูปที่ ข.19: ขั้นตอนที่ 2 : หนéาตéอนรับการติดตั้งใหé กด Next
รูปที่ ข.20: ขั้นตอนที่ 3 : หนéาเลือกสถานที่ติดตั้ง ใหéเลือกตามที่โปรแกรมไดéกำหนดไวéแตèแรก ข.3 การติดตั้ง Stani’s Python Editor 77
รูปที่ ข.21: ขั้นตอนที่ 4 : เขéาสูèขั้นตอนการติดตั้งโดยกด Next เพื่อเริ่มการติดตั้ง
รูปที่ ข.22: ขั้นตอนที่ 5 : เขéาสูèขั้นตอนการติดตั้ง และเสร็จสิ้นการติดตั้ง 78 การติดตั้ง Python, wxPython และ Stani’s Python Editor ภาคผนวก ค
อธิบายสèวนตèาง ๆ พอสังเขปของโปรแกรม SPE
รูปที่ ค.1: เปดโปรแกรม Stani’s Python Editor หรือเรียกสั้น ๆ วèา SPE ขึ้นมา
79 80 อธิบายสèวนตèาง ๆ พอสังเขปของโปรแกรม SPE
รูปที่ ค.2: หนéาตèางโปรแกรม Stani’s Python Editor (SPE)
ค.0.1 Sidebar
Explore
เปนหนéาตèาง Class browser สำหรับแสดงรายการ class, method และ function ที่แสดงออกมาเปน โครงสรéางตéนไมé
Index
หนéาตèางที่ทำหนéาที่คéนหาอัตโนมัติสำหรับสรéาง index เพื่อทำ index ใหéกับการคéนโดยทำ index จาก class และ and method
Todo
หนéาตèางแสดงรายการที่ตéองทำในไฟลìนั้น ๆ
Notes
หนéาตèางแสดงหมายเหตุตèาง 81
Browser
หนéาตèางในการแสดงไฟลìใน folder หรือ directory ที่ไฟลìนั้นอยูè ทำงานคลéาย ๆ กับ Windows Explorer
ค.0.2 Source
Editor
หนéาตèางสำหรับในการพิมพìโคéดคำสั่งตèาง ๆ
UML view
หนéาตèางแสดง Graphical layout ของลำดับของ class hierarchy
Pydoc
หนéาตèางสรéางไฟลì documentation แบบอัตโนมัติ
Separators
หนéาตèางสำหรับใชé separator เพื่อทำ Label ของชุดคำสั่งของโปรแกรม
ค.0.3 Tools
Shell
เปนสèวนรายงานความผิดพลาดตèาง ๆ ของโปรแกรมที่เราเขียน และสามารถใชéเปนตัวกระโดดขéามไปยัง Error line ไดéงèาย และยังใชéในการพิมพìคำสั่ง หรือโคéดโปรแกรมตèาง ๆ แทน Editor ไดéดéวย
รูปที่ ค.3: Shell
Local object browser
เปนสèวนบอกรายการตัวแปร, อ็อปเจ็ค และคลาส ตèาง ๆ เพื่อใชéในการดูชèวงของชีวิตของตัวแปร และ อ็อปเจ็คตèาง ๆ และยังชèวยในการคéนหาและกระโดดไปยังตัวแปร, อ็อปเจ็ค และคลาส ที่เราตéองการไดéงèาย 82 อธิบายสèวนตèาง ๆ พอสังเขปของโปรแกรม SPE
รูปที่ ค.4: Local object browser
Session
เปนตัวบันทึกการพิมพìโคéดโปรแกรมสำหรับชèวยในการไมèตéองพิมพìใหมèในกรณีที่ใชé shell ในการพิมพì คำสั่งโปรแกรมตèาง ๆ
รูปที่ ค.5: Session
Output
ถéาคุณสั่งใหéโปรแกรมทำงานใน SPE โดยใชéคำสั่ง Tools > Run/Stop ตัวผลการทำงานจะออกมาใน หนéาตèางนี้ รวมถึง Error ตèาง ๆ โดยสามารถกระโดดไปยังโคéดหรือชุดคำสั่งที่ Error นั้น ๆ ไดéจากหนéาตèางนี้
รูปที่ ค.6: Output 83
อื่น ๆ
1. Find หนéาตèางสำหรับการคéนหาขéอมูลตèาง ๆ
2. Browser หนéาตèางที่ใชéในการเรียกรายชื่อไฟลìซึ่งทำงานเหมือน Windows Explorer
3. Recent หนéาตèางแสดงรายชื่อไฟลìที่เราเปดอยูè
4. Todo หนéาตèางแสดงรายการที่ตéองทำใน Project หรือไฟลìที่เราเปดอยูè
5. Index หนéาตèางคำสั่งสำหรับเรียกใชéสารบัญงานตèาง ๆ ภายในไฟลì
6. Notes หนéาตèางคำสั่งหมายเหตุสำหรับปองกันการหลงลืม 84 อธิบายสèวนตèาง ๆ พอสังเขปของโปรแกรม SPE ภาคผนวก ง
การเขียน, Debug และสั่งใหéโปรแกรมทำงาน
ง.1 การเขียนโปรแกรมใน SPE และสั่งใหéโปรแกรมทำงาน
เพื่อทดสอบการทำงานใหéพิมพìคำสั่งโปรแกรมเริ่มตéนกèอนโดยพิมพìคำสั่งดังนี้
>>> print "Hello, World!"
พิมพìลงใน Source Editor แลéวไปไปที่ "Tools" ที่ menu bar แลéวไปที่ คำสั่ง "Run without argu- ments/Stop" หรือกด short-key Ctrl+Shift+R
รูปที่ ง.1: สั่งใหéโปรแกรมทำงาน
รูปที่ ง.2: ผลการทำงาน
85 86 การเขียน, Debug และสั่งใหéโปรแกรมทำงาน
ง.2 การ Debug โปรแกรม
รูปที่ ง.3: การแจéง Error เพื่อใชéประกอบการ Debug
File "C:\Documents and Settings\Ford AntiTrust\Desktop\helloworld.py", line 1 print "Hello, World! ^ SyntaxError: EOL while scanning single-quoted string
จากตัวอยèางไดéแจéง Error ไดéสองที่ดéวยกัน คือหนéาตèาง Editor ซึ่งจะมีเสéนใตéเปนฟนปลาสีแดงขีดตาม บรรทัดที่มี Error และในหนéาตèาง Output ก็มี Error Code แจéงไวé โดยไดéบอกไวéวèาที่ line 1 มี Error โดย บอกวèาเปน SyntaxError และมีปญหาจาก Systax ลักษณะ single-quoted string มีปญหานั้นเอง โดยปญหาในการแจéงตèาง ๆ นั้นตัว Interpreter จะแจéงใหéทราบไดéจาก line ที่มีปญหา เชèนตัวอยèางดéาน ลèางนี้ไดéแจéงไวéวèามาจาก line ที่ 1
File "C:\Documents and Settings\Ford AntiTrust\Desktop\helloworld.py", line 1
รวมไปถึงแจéง column ของ line วèานèาจะผิดที่คำสั่งใด ในที่นี้ผิดที่คำสั่ง print นั้นเอง print "Hello, World! ^ SyntaxError: EOL while scanning single-quoted string ภาคผนวก จ
ขéอมูลอéางอิง
• Python programming language. http://www.python.org/, Python Software Foundation, 2006.
• Python programming language. http://en.wikipedia.org/wiki/Python programming language, Wikipedia the free encyclopedia, 2006.
• Python software. http://en.wikipedia.org/wiki/Python software, Wikipedia the free encyclope- dia, 2006.
• Comparison of programming languages. http://en.wikipedia.org/wiki/Comparison of programming languages, Wikipedia the free en- cyclopedia, 2006.
• Python Tutorial Online. http://python.cmsthailand.com/, CMSthailand.com, 2005.
• An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl — March 2000 refereed journal paper. http://page.mi.fu-berlin.de/prechelt/Biblio/jccpprt˜ computer2000.pdf, Lutz Prechelt, 2000.
• Programming in Python. http://www-128.ibm.com/developerworks/library/os-python5/index.html, Robert Brunner ([email protected]), Research Scientist, National Center for Supercomputing Applications, 2005.
• wxPython, a blending of the wxWidgets C++ class library. http://www.wxpython.org/, OS- AF (Open Source Applications Foundation), 2006.
• Stani’s Python Editor, Python IDE with Blender, Kiki, PyChecker, wxGlade & XRC support. http://pythonide.stani.be/, S. Michiels, Amsterdam, the Netherlands 2006.
• Beginning Python Wiley Publishing, Inc., Peter Norton, Alex Samuel, David Aitel, Eric Foster-Johnson, Leonard Richardson, Jason Diamond, Aleatha Parker, Michael Roberts, 2005.
• Python http://veer.exteen.com/, วีรì สัตยมาศ, 2005.
• เรื่องที่หéามลืมใน Python http://plynoi.exteen.com/20060827/python, Plynoi, 2006.
87 ดรรชนี
64 bit double precision, 30 จำนวนเชิงซéอน (Complex Numbers), 31 จำนวนเต็ม (Integer), 29 Alternatively, 50 จำนวนเต็มธรรมดา (Plain Integer), 29 Category และ Application Domains, 16 จำนวนเต็มแบบยาว (Long integer), 30 3D Graphics Rendering, 17 สายอักขระ (String หรือ Array of Characters), Database Access, 16 39 Desktop GUI, 17 Flow of Control, 50 Education, 17 Function argument, 59 Game, 17 Functions GUI, 17 abs(), 26 Network programming, 17 complex(), 31 Numeric computation, 17 float(), 31 Scientific, 17 int(), 30 Software builder, 17 len(), 34 Software Testing, 17 max(), 26 Web และ Internet Development, 16 min(), 26, 27 Colon Symbol, 32 print, 21 Comment, 22 range(), 27, 53–55 Concatenation Symbol, 40 raw input, 63 Control flow, 50 set(), 35 Data type, 27 sum(), 27 ชนิดขéอมูลแบบการรวมกลุèมขéอมูล (Collection type(), 29 Data Types), 32 Google, 19 ดิกชันนารี (Dictionary หรือ Groupings of Guido van Rossum, 13 Data Indexed by Name), 33 ทับเบิ้ล (Tuples) และ อนุกรม (Sequences), Hello World, 21, 85 33 ลิสตì (List), 32 Industrial Light & Magic, 18 อารìเรยì (Array), 32 Language Evaluation Criteria, 15 เซ็ต (Sets), 34 Cost, 15 ตัวเลข (Numbers), 29 Readability, 15 imaginary number, 31 Reliability, 15 signed integer, 29 Writability, 15 จำนวนตรรกะ (Boolean), 30 จำนวนจริง (Floating-point numbers), 30 Multi-paradigm language, 15
88 ดรรชนี 89
NASA, 19 return , 22 try, 22, 56 Operator while, 22, 53 *, 25 with, 22 **, 25, 30 yield, 22 +, 25 -, 25 Stani’s Python Editor (SPE), 75 /, 25 Browser, 81 %, 25 Explore, 80 Index, 80 Python, 13 Notes, 80 Source, 81 Repetition Symbol, 21 Editor, 81 Reserved words (Keywords), 22 Pydoc, 81 and, 22, 47 Separators, 81 as, 22 UML view, 81 assert, 22, 55 Todo, 80 break, 22, 54 Tools, 81 class, 22 Local object browser, 81 continue, 22, 54 Output, 82 def, 22, 58 Session, 82 del, 22 Shell, 81 elif, 22, 51 อื่น ๆ, 83 else, 22, 51 การเขียน, Debug และสั่งใหéโปรแกรมทำงาน, 85 else clauses, 54 การ Debug โปรแกรม, 86 else if, 51 การสั่งใหéโปรแกรมทำงาน, 85 except, 22, 56 การเขียนโปรแกรมใน SPE, 85 exec, 22 หนéาตèางโปรแกรม, 80 finally, 22 statement block, statement scope, 48 for, 22, 53 String Concatenation Symbol, 40 from, 22 String formatting operator, 41 global, 22, 49, 62 Symbol if, 22, 51 *, 21 import, 22 +, 40 in, 22, 45, 53–55 „ 40 is, 22, 45 :, 32 lambda, 22 #, 22 not, 22, 47 % (String formatting operator), 41 or, 22, 47 pass, 22, 54 type print, 22 bool, 30 raise, 22, 56 complex, 31 return, 59 dict, 33 90 ดรรชนี
False, 30 การคำนวณพื้นฐาน (normal arithmetic oper- float, 30 ators), 25 int, 29 คูณ, 25 list, 32 บวก, 25 long, 30 ยกกำลัง, 25 set, 34 ลบ, 25 True, 30 หาร, 25 tuple, 34 หารเอาเศษ, 25 อันดับความสำคัญของการคำนวณ, 25 wxPython, 72 การตั้งตัวชื่อแปร, 22 การติดตั้ง, 69 การควบคุมทิศทางของโปรแกรม, 50 Python, 69 การจัดการความผิดปกติของโปรแกรม (Error Check- Stani’s Python Editor (SPE), 69, 75 ing), 51, 55 wxPython, 69, 72 assert Statements, 55 การสรéางฟงกìชั่น (Defined Function), 58 try-except และ raise Statements (Exception Global Variable, 62 handling), 56 Local Variable, 62 การตัดสินใจ (Decisions, Choice or Selection), การคืนคèากลับ (return) , 60 51 การรับคèาของฟงกìชั่น (Function Argument), 60 การตัดสินใจ (Decisions, Choice หรือ Selec- คèามาตรฐานของการรับคèา (Function Default Ar- tion) gument, 60 elif, 51 การเปรียบเทียบ (Comparisons), 43 else, 51 ตัวอยèาง, 45 else if, 51 การแสดงผลเบื้องตéน (Printing) และสัญลักษณìที่เกี่ยวขéอง, if, 51 19 switch, 52 ขéอเดèนของภาษาไพธอน, 15 การวนทำซ้ำ (Loop, Iteration), 51 break, 54 คำสงวน, 22 continue, 54 ชนิดของตัวแปร, 27 do-while, 55 ชèวงของการทำงาน, 48 else clauses, 54 ชèวงของการทำงาน (Statement block), 49 for, 53 ชèวงชีวิตของตัวแปร (Life time หรือ Variable s- while, 53 cope), 49 การคำนวณทางคณิตศาสตรì (Arithmetic Mathemat- ics), 23 ซอฟตìแวรìที่เขียนดéวยไพธอน, 17 การคำนวณผèานฟงกìชั่นภายใน (Built-in Math Battlefield 2, 18 Functions), 26 BitTorrent, 17 การหาคèาสัมบูรณì, 26 Blender, 18 กำหนดจำนวนตัวเลขทศนิยม, 27 Chandler, 18 จำนวนที่นéอยที่สุด และมากที่สุดในกลุèม, 26 Civilization IV, 18 ชèวงของขéอมูลตัวเลข, 27 EVE Online, 18 หาผลรวมทั้งหมดในชุดขéอมูล, 27 Indian Ocean Tsunami Detector, 18 ดรรชนี 91
Kombilo, 18 Mailman, 18 MoinMoin, 18 OpenRPG, 18 Plone, 18 Stani’s Python Editor(SPE), 18 Trac, 18 Turbogears, 18 ViewVC, 18 Zope, 18
นิพจนìทางตรรกะศาสตรì (Boolean Expressions), 46 AND, 47 NOT, 47 OR, 47
ประวัติ, 13 Python 1.0, 13 Python 2.0, 14 อนาคต, 14
หลักปรัชญาของภาษาไพธอน, 15