Python Programming
เอกสารนี้เขียนขึ้นเพื่อให้ความรู้เกี่ยวกับไวยากรณ์และการเขียนโปรแกรมภาษาไพทอนเบื้องต้น ผู้เขียนสมมติว่าผู้อ่านสามารถเขียนโปรแกรมด้วยภาษาเชิงวัตถุอย่าง C++ หรือ Java ได้อยู่แล้ว เอกสารนี้ไม่ใช่เอกสารสอนเขียนโปรแกรม
หากท่านต้องการอ่านเอกสารนี้ให้ได้อรรถรสมากที่สุด กรุณาใช้ Crunchy คุณสามารถอ่านวิธีการติดตั้งและใช้ Crunchy ได้ที่นี่: การติดตั้งและใช้ Crunchy
เนื้อหา
ติดตั้งภาษาไพทอน
คุณสามารถดาวน์โหลดภาษาไพทอนได้จากเวบไซต์อย่างเป็นทางการ http://www.python.org/ ขณะนี้ (15 ตุลาคม 2551) เราแนะนำใหัคุณดาวน์โหลดไพทอนเวอร์ชัน 2.5 เนื่องจาก Crunchy ไม่สามารถใช้ได้กับไพทอนเวอร์ชันต่ำกว่า 2.4 หรือไพทอนเวอร์ชัน 3.0 ขึ้นไปได้ (เราไม่แน่ใจว่ามันใช้กับเวอร์ชัน 2.6 ได้หรือไม่เนื่องจากเรายังไม่ได้ทดสอบ) นอกจากนี้โค้ดไพทอนอื่นๆ ในเอกสารอื่นๆ ในเวบไซต์นี้ล้วนเขียนขึ้นด้วยไพทอนเวอร์ชัน 2.5 ทั้งสิ้น กรุณาดาวน์โหลดโปรแกรมติดตั้งที่เหมาะสมกับระบบปฏิบัติการที่คอมพิวเตอร์คุณใช้อยู่และติดตั้งภาษาไพทอนตามคำแนะำนำของโปรแกรมแล้ว
ตัวแปรภาษาไพทอน (Python Interpreter)
ตัวแปรภาษาไพทอนเป็นโปรแกรมที่ติดมากับภาษาไพทอนที่คุณได้ดาวน์โหลดมาเมื่อตะกี้นี้ มันมีหน้าที่สองอย่าง
- อ่านซอร์สโค้ดภาษาไพทอนแล้วแปรความหมายคำสั่งต่างๆ หรือ
- เป็นโปรแกรมที่อนุญาตให้ผู้ใช้ป้อนคำสั่งหรือนิพจน์ภาษาไพทอน แล้วพิมพ์ผลลัพท์ออกทางหน้าจอ (กล่าวคือเป็น read-eval-print loop) พูดได้อีกอย่างหนึ่งคือมันอนุญาตให้ผู้ใช้เขียนโปรแกรมได้โดยไม่ต้องเซฟเก็บไว้ในไฟล์ก่อน
เราจะใช้ตัวแปรภาษาไพทอนในรูปแบบ read-eval-print loop การทำความคุ้นเคยกับภาษาในขั้นแรก แล้วจะพูดเรื่องการเขียนซอร์สโค้ดเก็บไว้ในไฟล์ทีำหลัง
การใช้ตัวแปรภาษาไพทอนเป็น read-eval-print loop
คุณสามารถเรียกให้ตัวแปรภาษาไพทอนทำงานได้็ด้วยการสั่งคำสั่ง
python
ใน shell ในระบบปฏิบัติการของคุณ ผู้ใช้ระบบปฏิบัติการ Windows อาจจะเจอ shell บ่นว่าไม่มีโปรแกรมชื่อ python ในกรณีให้แก้ไขโดยการสั่ง
set PATH=%PATH%;C:\Python25
หรือการไปแก้ไข Environment ชื่อ Path ใน Control Panel -> System -> Advanced -> Environment Variables ให้มี C:\Python25 รวมอยู่ด้วย (อนึ่ง ไดเรคทอรี C:\Python25 นี้อาจเปลี่ยนไปตามเวอร์ชันของภาษาไพทอนที่คุณลอง กล่าวคือถ้าคุณลงเวอร์ชัน 2.6 ก็ต้องใช้ไดเรคทอรี C:\Python26 แทน นอกจากนี้คุณยังสามารถเลือกลงภาษาไพทอนที่ไดเรคทอรีอื่นๆ ก็ได้ ซึ่งในกรณีนี้คุณจะต้องใช้ไดเรคทอรีที่คุณลงภาษาไพทอนไว้แทน C:\Python25)
เมื่อคุณเรียกตัวแปรภาษาไพทอนให้ทำงานแล้ว คุณจะเห็นหน้าจอคล้ายๆ หน้าจอข้า่งล่างนี้
Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>
โดยคุณสามารถพิมพ์คำสั่งภาษาไพทอนหนึ่งคำสั่ง แล้วกด ENTER ตัวแปรภาษาไพทอนก็จะนำเอาคำสั่งนั้นไปปฏิบัติ ยกตัวอย่างเช่น
>>> print "Hello, world!" Hello, world! >>> 1+1 2 >>> print 2+3 5
การใช้ตัวแปรภาษาไพทอนแปลโปรแกรมที่เก็บไว้ในไฟล์
เราสามารถเรียกตัวแปรภาษาไพทอนให้แปลโปรแกรมที่เก็บไว้ในไฟล์ได้ด้วยการสั่ง
python <<ชื่อไฟล์>>
เมื่อ <<ชื่อไฟล์>> คือชื่อไฟล์ที่เก็บโปรแกรมของเราไว้ ปกติแล้วไฟล์ที่เก็บโปรแกรมภาษาไพทอนจะมีนามสกุล .py เช่น hello.py หรือ abc.py เป็นต้น
เพื่อเป็นการสร้างความคุ้นเคยกับภาษา ลองก็อปปี้โค้ดข้างล่างนี้ใส่ไฟล์ชื่อ factorial.py
def factorial(n): if n == 0: return 1 else: return n * factorial(n-1) for n in range(10): print str(n)+"! =", factorial(n)
แล้วสั่ง
python factorial.py
ใน shell ซึ่งเมื่อสั่งแล้วโปรแกรมควรจะพิมพ์ค่าของฟังก์ชันแฟกตอเรียลตั้งแต่ 0! ถึง 9! ออกทางหน้าจอดังต่อไปนี้
0! = 1 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120 6! = 720 7! = 5040 8! = 40320 9! = 362880
นิพจน์ทางคณิตศาสตร์
โดยทั่วไปแล้วนิพจน์ทางคณิตศาสตร์ในภาษาไพทอนจะคล้ายๆ กับภาษา C
>>> 6*7 42 >>> 10*(30+9) + 8 398 >>> 10.0*(30+9)+8 398.0 >>> 3*10000+7564 37564 >>> 464 / 9 51 >>> 4649 / 9.0 516.55555555555554 >>> 4649.0 / 9 516.55555555555554 >>> 10%3 1
นิพจน์ข้างต้นทำให้เราได้ข้อสังเกตดังต่อไปนี้
- ภาษาไพทอนมีข้อมูลชนิดตัวเลขอย่างน้อยสองชนิด คือ เลขจำนวนเต็ม (int) และเลขทศนิยม (float) ในทางเทคนิคแล้ว float ของไพทอนมีความละเอียดเท่ากับ double ในภาษา C
- มีการทำ type coercion คล้ายภาษา C คือเมื่อนำ int ไปบวกหรือคูณกับ float แล้วก็จะได้ float
- เครื่องหมายหาร (/) ของไพทอนคล้ายภาษา C กล่าวคือ ถ้าเราเอา int ไปหาร int เราจะได้ผลหารเป็น int แต่ถ้าเอา int ไปหาร float หรือเอา float ไปหาร int จะได้ผลลัพท์เป็น float
สิ่งที่น่าสังเกตของเครื่องหมาย (/) และเครื่องหมายหารเอาเศษ (%) หารคือ ถ้าตัวหารเป็นบวกแล้ว มันจะพยายามทำให้เศษของการหารจะเป็นบวกด้วยเสมอ
>>> -11/3 -4 >>> -11%3 1
ซึ่งนี่ผิดกับภาษา C ซึ่งเมื่อคำนวณนิพจน์ -11 / 3 จะได้ผลลัพธ์เป็น -3 และเมื่อสั่ง -11 % 3 จะได้ผลเป็น -2 อย่างไรก็ดีถ้าตัวหารเป็นลบ ไพทอนจะมีพฤติกรรมเหมือนกับภาษา C
>>> -11/-3 3 >>> -11%-3 -2
นอกจากนี้ ไพทอนยังมีเครื่องหมายยกกำลัง (**) ซึ่งมีความสำคัญ (precedence) มากกว่าเครื่องเครื่องหมายคูณ
>>> 4**2 16 >>> 4.0**2 16.0 >>> 2**0.5 1.4142135623730951 >>> 4*3**2 36 >>> (4*3)**2 144
ตัวแปรและการกำหนดค่าให้ตัวแปร
เราสามารถกำหนดค่าให้ตัวแปรได้โดยใช้เครื่องหมายเท่ากับ (=)
>>> x = 20 >>> 2*x 40 >>> y = x+5 >>> y 25 >>> y**2 625
สังเกตว่าในภาษาไพทอน เราไม่จำเป็นตัองประกาศชื่อและชนิดของตัวแปรล่วงหน้าเหมือนภาษา C, C++, หรือ Java นอกจากนี้ตัวแปรในภาษาไพธอนจะเก็บข้อมูลชนิดใดก็ได้ และชนิดข้อมูลที่มันเก็บก็สามารถเปลี่ยนไปได้เรื่อยๆ ถ้ามันถูกกำหนดค่าใหม่ เช่น
>>> x = 428 >>> x/3 142 >>> x = x * 1.0 >>> x/3 142.66666666666666
เราสามารถกำหนดตัวแปรหลายๆ ตัวให้มีค่าเดียวกันได้เหมือนในภาษา C
>>> x = y = z = 0 >>> x 0 >>> y 0 >>> z 0
หรือจะกำหนดค่าให้ตัวแปรทีละหลายๆ ตัวก็ได้
>>> x, y, z = 1, 2, 3 >>> x 1 >>> y 2 >>> z 3
ฟังก์ชัน
ไพทอนมีฟังก์ชันสำเร็จรูปที่สามารถที่สามารถเรียกใช้ได้เลยอยู่หลายฟังก์ชัน ไวยากรณ์การเรียกฟังก์ชันของภาษาไพธอนเหมือนกับภาษา C และ Java กล่าวคือเขียนชื่อฟังก์ชันแล้วตามด้วยวงเล็บเปิด แล้วใส่ parameter ซึ่งถ้า parameter มีหลายตัวก็ให้คั่น parameter ที่อยู่ติดกันด้วยเครื่องหมายคอมมา (,) แล้วตามด้วยวงเล็บปิด เช่น โค้ดตัวอย่างต่อไปนี้เรียกใช้ฟังก์ชัน abs(x) ซึ่งคืนค่าสัมบูรณ์ของ x ที่ป้อนให้
>>> abs(-10) 10 >>> abs(0) 0 >>> abs(10.5) 10.5
ฟังก์ชัน pow(x,y) ซึ่งคือค่า x ยกกำลัง y ซึ่งสามารถใช้แทน x**y ได้
>>> pow(2, 16) 65536 >>> pow(5, 0.5) 2.2360679774997898 >>> pow(5, -2) 0.040000000000000001 >>> pow(2, pow(2, 2)) 16 >>> pow(abs(-3), 1-abs(-1)) 1
ฟังก์ชันในไลบรารีภาษาไพทอน
ไลบรารีของภาษาไพทอนยังมีฟังก์ชันอื่นๆ ให้ใช้อีกมากมาย โดยที่ฟังก์ชันเหล่านี้จะถูกแบ่งจัดเก็บอยู่ใน โมดูล (module) หลายๆ โมดูล โดยก่อนที่เราจะสามารถนำฟังก์ชันเหล่านี้มาใช้ได้เราจะต้องทำการ "นำเข้า" โมดูลที่เก็บฟังก์ชันนั้นไว้ คำสั่ง import เป็นคำสั่งที่ใช้ในการนำ้เข้าโมดูลหรือฟังก์ชันที่อยู่ในโมดูลต่างๆ โดยมันมีไวยากรณ์ดังต่อไปนี้
import <<ชื่อโมดูล>>
ยกตัวอย่างเช่น ถ้าเราต้องการใช้ฟังก์ชันในโมดูืลชื่อ math ซึ่งเก็บฟังก์ชันทางคณิตศาสตร์ต่างๆ ไว้มากมาย เราก็จะสั่ง
import math
คำสั่ง print
คำสั่ง print มีไว้เพื่อพิมพ์ข้อความและค่าต่างๆ ออกทาง standard output ยกตัวอย่าง เช่น
>>> print 1 1 >>> print 2+5 7 >>> print 2.0 / 3 0.666666666667 >>> x = 65536 >>> print x 65536
โดยคำสั่ง print จะทำการเว้นบรรทัดหลังจากพิมพ์ค่าออกไปแล้วให้โดยอัตโนมัติ
คำสั่ง print สามารถรับ argument ได้หลายตัว โดยเราคั่น argument ด้วยเครื่องหมายคอมมา (,) คำสั่ง print จะใส่ช่องว่างระหว่าง argument ที่อยู่ติดกันให้โดยอัตโนมัติ
>>> print 10, 9**3, 0.5*0.1234, 0 10 729 0.0617 0 >>> x, y, z = 7, 8, 9 >>> print x, y, z 7 8 9
สตริง
ค่าประเภทสตริงในไพทอนนั้นคล้ายกับค่าประเภทสตริงในภาษา C และภาษา Java ที่ต่างกันคือทั้งเครื่องหมายฟันหนู (") และเครื่องหมายฝนทอง (') สามารถใช้ล้อมสตริืงเหมือนกัน
>>> print "THIS IS AN EX-PARROT!!" THIS IS AN EX-PARROT!! >>> print 'THIS IS AN EX-PARROT!!' THIS IS AN EX-PARROT!!
เช่นเดียวกับในภาษา C ถ้าเราต้องการตัวอักษรฟันหนู (") ในสตริงที่ล้อมด้วยตัวอักษรฟันหนู เราจะต้องใช้ตัว escape sequence \" แทนตัวอักษรฟันหนู ในทำนองเดียวกัน ถ้าเราต้องการเครื่องฝนทอง (') ในสตริงที่ล้อมด้วยเครื่องหมายฝนทอง เราต้องใช้ escape sequence \' แทน
>>> print "What do you mean \"miss\"?" What do you mean "miss"? >>> print 'I\'m sorry, I have a cold.' I'm sorry, I have a cold.
แต่เราไม่ต้องใช้ escape sequence ถ้าเราต้องการตัวอักษรฟันหนูในสตริงที่่ล้อมด้วยเครื่องหมายฝนทอง และในทางกลับกันก้เป็นจริงด้วย
>>> print '"VOOM"?!? Mate, this bird would not "voom" if you put four million volts through it!' "VOOM"?!? Mate, this bird would not "voom" if you put four million volts through it! >>> print "'E's bleedin' demised!" 'E's bleedin' demised!
Escape sequence อื่นๆ เช่น \n, \t, หรือ \\ ยังมีพฤติกรรมเหมือนกับในภาษา C ทุกประการ
>>> print "PININ' for the FJORDS?!?!?!?\nWhat kind of talk is that?" PININ' for the FJORDS?!?!?!? What kind of talk is that? >>> print "Owner:\t\tNo, no.....No, 'e's stunned!\nMr. Praline:\tSTUNNED?!?" Owner: No, no.....No, 'e's stunned! Mr. Praline: STUNNED?!?