บทนำ
Python เป็นภาษาเขียนโปรแกรมคอมพิวเตอร์ระดับสูง เป็นหนึ่งในภาษาที่ได้ความนิยมอย่างมากในปัจจุบัน ตั้งแต่วงการไอโอที ปัญญาประดิษฐ์ เว็บ และอื่น ๆ เนื่องจากความยืดหยุ่นของตัวภาษา เขียนได้อย่างรวดเร็ว เชื่อมต่อกับภาษาอื่น ๆ ได้ดี ดังนั้น ผู้เริ่มต้นเขียนโปรแกรม หรือ เขียนโปรแกรมเป็นอยู่แล้ว ควรเรียนรู้และสามารถใช้งานภาษานี้ได้
บทที่ 1 เริ่มต้นกับ python
Python เป็นภาษาอย่างหนึ่งของคอมพิวเตอร์ มีจุดเด่นคล่อง ๆ ดังนี้
- เป็นภาษาที่มี syntax ที่เรียบง่ายและสะอาด สามารถเรียนรู้ได้ง่าย เข้าใจได้ง่าย
- สนับสนุนการเขียนโปรแกรมแบบ OOP
- ทำงานแบบ interpreter
- dynamic code (ภาษาที่ไม่ต้องกำหนด type ในการประกาศตัวแปร)
Python เวชั่นแรกถูกพัฒนาโดย Guido van Rossum พัฒนาขึ้นมาในปี ค.ศ.1991
ปัจจุบัน Python ได้ถูกพัฒนาโดย Python Software Foundation
ได้เดินทางมาถึง Python 3
เริ่มต้นกับภาษา Python
เให้ผู้อ่านติดตั้ง Python ดังนี้
- Windows เข้าไปที่ https://www.python.org/download/ ให้เลือกดาวน์โหลด รุ่นในสาย Python 3 แล้วเลือกให้ตรงกับสเปคเครื่อง ตัวอย่างเช่น เครื่องผมใช้ Windows 64 Bit ผมต้องเลือก Python 3.4.1
Windows X86-64 MSI Installer เมื่อรันหน้าต่างติดตั้งขึ้นมา
อย่าลืมเลือก set path ด้วย จะได้ไม่ต้องมาเสียเวลาตั้งค่าภายหลัง
โดยทำอย่างนี้ เริ่มต้นด้วยการรันไฟล์ติดตั้งที่โหลดมา
เสร็จแล้วกด Next ไปเรื่อย ๆ - Linux สำหรับบน Ubuntu หรือ Linux ในสาย Debian
- Mac OS X เข้าไปที่ https://www.python.org/download/
เมื่อติดตั้งแล้ว ผู้อ่านสามารถเขียนโปรแกรมภาษา Python ได้เลย
เครื่องมือที่ใช้ในการเขียนภาษา Python
มีหลายโปรแกรม ผู้อ่านสามารถใช้ IDLE (Python GUI)
ในการเขียนโปรแกรมได้หรือจะใช้โปรแกรมอย่าง Notepad++ หรือ text editor
ต่าง ๆ และ IDLE ในการเขียนได โดยบันทึกไฟล์เป็นนามสกุล .py
นอกจากนี้ เราขอแนะนำ PyCharm เป็น IDLE ที่น่าใช้งาน โหลดฟรีได้ที่ http://www.jetbrains.com/pycharm/ เลือกรุ่นที่เป็น Community Edition
โปรแกรมแรก Hello world.py
โค้ด
print ("Hello world")
# ผลลัพธ์: Hello world
บทที่ 2 ชนิดข้อมูลพื้นฐาน
ข้อมูล คือ ข้อเท็จจริง นี้คงเป็นกฎที่หลาย ๆ ท่านคงเคยศึกษามา
บทนี้จะกล่าวถึงเรื่อง ชนิดของข้อมูลพื้นฐาน
ซึ่งเป็นสิ่งสำคัญที่ทุกท่านต้องรู้ก่อนเขียนโปรแกรมในภาษา Python
ใน Python มีชนิดข้อมูลหลายประเภท มีชนิดข้อมูลธรรมดาเพียง 3 ชนิด ได้แก่
- จำนวนเต็ม (Integer)
- จำนวนจริง (Float)
- สายอักขระ หรือ สตริง (String)
ข้อมูลแบบซับซ้อนอีก 2 ชนิดดังนี้
- รายการ หรือ ลิสต์ (List)
- พจนานุกรม หรือ ดิกชันนารี (Dictionary)
ข้อมูลซับซ้อนนี้หมายถึง ข้อมูลนี้ประกอบไปด้วยข้อมูลอื่นที่อยู่ภายในแล้วแต่การใช้งาน ถ้าแบ่งเป็นประเภทใหญ่ ๆ จะได้ดังนี้
- ตรรกกะ
- ตัวเลข
- ลำดับ มีให้เลือกนำไปใช้งาน 3 ชนิด ดังนี้
- สายอักขระ หรือ สตริง (String)
- ทูเปิ้ล (Tuple)
- รายการ หรือ ลิสต์ (List)
- จับคู่ (Mapping)
List ใน Python
ในภาษา Python ไม่มีข้อมูลชนิดอาร์เรย์ (array) เหมือนกับภาษาอื่น
แต่สามารถใช้ข้อมูลชนิดลิสต์แทนอาร์เรย์ได้ โดยชื่อชนิดลิสต์ คือ list
ข้อมูลชนิดนี้จะเรียงต่อกันในลิสต์ของตัวแปรและคั่นข้อมูลด้วยเครื่องหมาย , ครอบด้วยเครื่องหมาย square brackets [" และ "]
มีลักษณะดังนี้
[1,2,3,4,5,6]
สามารถดึงข้อมูลจากลิสต์มาใช้งานได้ดังนี้
a = [1,2,3,4,5,6]
print(a[2]) # output: 3
และ
b = [[1, 2], [3, 4]]
print(b[0][0]) # output: 1
การดำเนินการลิสต์
- len() เป็นคำสั่งนับจำนวนสมาชิกในลิสต์
- list+list เป็นคำสั่งรวมสมาชิกของลิสต์ตัวอย่างเช่น
[1, 2] + [3, 4]
ผลลัพธ์[1, 2, 3, 4]
- เช็คสมาชิกในลิสต์ เช่น
3 in [1, 2, 3]
ผลลัพธ์True
- เพิ่มข้อมูลเข้าไปยังข้อมูลชนิด List
ใช้คำสั่ง
list.append(วัตถุ)
- Iteration เป็นการแยกข้อมูลออกมาจากลิสต์ เช่น
for x in [1, 2, 3]: print (x),
ผลลัพธ์1 2 3
- คำสั่ง insert(x,y)
เป็นคำสั่งสำหรับเพิ่มข้อมูลเข้าไปแซงข้อมูลในตำแหน่งนั้น โดย x เป็น
ตำแหน่ง index และ y เป็นข้อมูลที่ต้องการแทนที่
ตัวอย่าง
a= [1,2,3,4,5]a.insert(1,"hi")
print(a)
ผลลัพธ์
[1, 'hi', 2, 3, 4, 5]
อาร์เรย์ (array) เบื้องต้นใน Python
อาร์เรย์ (array) เป็นข้อมูลชนิดหนึ่ง เป็นโครงสร้างข้อมูล แต่ว่า Python ไม่สนับสนุนอาร์เรย์ชนิดนี้โดยตรง จึงต้องใช้ชนิดข้อมูลที่เรียกว่ารายการ ซึ่งเกือบเหมือนกับอาร์เรย์ แต่สามารถเข้าถึงได้เพียงหนึ่งดัชนี
อาร์เรย์ 1 มิติ
ใน Python จะมีรูปแบบดังนี้ [1,2,3,4,5,6]
a = [1,2,3,4,5,6]
print(a[2])
จะได้ผลลัพธ์ คือ 3 จะเห็นได้ว่าใน python จะนับอาร์เรย์ตัวที่ 1 เป็น 0 ไล่ไปเรื่อย ๆ
หากต้องการจำนวน 3 ถึง 5 ใช้คำสั่ง
print(a[2:5])
ผลลัพธ์จะได้ [3, 4, 5]
ถ้าต้องการค่าข้อมูลบนอาร์เรย์ ตามตำแหน่งคอลัมน์
print(a[5:])
จะได้ผลลัพธ์ [6]
ต่อมาเราจะเปลี่ยนค่าข้อมูลในอาร์เรย์กัน
เช่น a[5] จากเดิมเป็น [6] หากใช้คำสั่ง
>>a[5] = 11
>>print(a[5:])
[11]
จะเห็นได้ว่าข้อมูลใหม่จะทับข้อมูลเก่า ข้อมูลเก่าจะหายไปเป็นไปตามหลักการเก็บข้อมูลของคอมพิวเตอร์
หากใช้คำสั่ง print(a[:]) คือแสดงอาร์เรย์ทั้งหมดออกมา
>>> print(a[:])
[1, 2, 3, 4, 5, 11]
อาร์เรย์ 2 มิติ
อาร์เรย์ 2 มิติมีการจัดเรียงข้อมูลในแถว / คอลัมน์ สามารถเปรียบเทียบได้กับเมทริกซ์ในคณิตศาสตร์
ใน Python อาร์เรย์ 2 มิติ จะมีรูปแบบเป็น [[1, 2], [3, 4]]
b = [[1, 2], [3, 4]]
ถ้าเป็นรูปแบบเมทริกซ์ในคณิตศาสตร์จะเป็น
b = [1, 2]
[3, 4]
หากต้องการดึงข้อมูลมาใช้จากอาร์เรย์ 2 มิติ ใช้คำสั่งดังนี้ เช่น
>>> b = [[1, 2], [3, 4]]
>>> print(b[0][0])
1
แถวที่ 1 หลักที่ 1 คือ 1
>>> print(b[0][1])
2
แถวที่ 1 หลักที่ 2 คือ 2
>>> print(b[1][0])
3
แถวที่ 2 หลักที่ 1 คือ 3
>>> print(b[1][1])
4
แถวที่ 2 หลักที่ 2 คือ 4
หากต้องการแสดงทั้งแถวและคอลัมน์ใช้คำสั่ง
>>> print(b[0:][0:])
[[1, 2], [3, 4]]
หากต้องการเฉพาะแถวที่ 1 ใช้คำสั่ง
>>> print(b[0][0:])
[1, 2]
อาร์เรย์ 3 มิติ
มีลักษณะการใช้งานเหมือนกับที่ผ่านมา แต่มีอาร์เรย์เพิ่มอีกมิติ ตัวอย่างเช่น
[[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
[[10, 11, 12], [13, 14, 15], [16, 17, 18]],
[[19, 20, 21], [22, 23, 24], [25, 26, 27]]]
การนำไปใช้งาน
>>> d = [[[1, 2, 3], [4, 5, 6], [7, 8, 9]],
[[10, 11, 12], [13, 14, 15], [16, 17, 18]],
[[19, 20, 21], [22, 23, 24], [25, 26, 27]]]
>>> d[0][1]
[4, 5, 6]
>>> d[0][1][2]
6
หากต้องการคำนวณมากกว่านั้น แนะนำให้ใช้โมดูล numpy แทนดีกว่า
การดำเนินการแบบตรรกะ (Boolean Operations) ใน Python 3
การดำเนินการแบบตรรกะ (Boolean Operations) ใน Python 3 โดยใช้ตรรกะศาสตร์เข้ามา โดยการใช้หลักเหตุและผล ผลลัพธ์ที่ได้จะได้ จริง
(True) และ เท็จ (False)
หากผู้อ่านเคยเรียนวิชาตรรกะศาสตร์มาจะเข้าใจบทความนี้ยิ่งขึ้น
การเปรียบเทียบประพจน์
จริง และ จริง ได้ จริง ที่เหลือเท็จ
เท็จ หรือ เท็จ ได้ เท็จ ที่เหลือจริง
ถ้า จริง แล้ว เท็จ ได้ เท็จ ที่หลือจริง
จริง ก็ต่อเมื่อ จริง , เท็จ ก็ต่อเมื่อ เท็จ ได้ จริง ที่เหลือเท็จ
การดำเนินการแบบตรรกะใน Python 3
การดำเนินการ | ความหมาย | ผลลัพธ์ |
---|---|---|
x or y | x หรือ y | ถ้า x = True , y = True ดังนั้น x หรือ y ได้จริง (True) |
x and y | x และ y | ถ้า x = False , y = True ดังนั้น x และ y ได้เท็จ (False) |
not x == y | ถ้า x แล้ว y | ถ้า x = True , y = False ดังนั้น ถ้า x แล้ว y ได้จริง (True) |
ทูเพิล (Tuple) ใน Python
ทูเพิล (Tuple) คือ โครงสร้างข้อมูลแบบเรียงลำดับ (List) ที่ไม่สามารถแก้ไขข้อมูลที่อยู่ใน
tuple ได้ ตัวอย่างทูเพิล(Tuple)
Tuple1 = (5,4,3)
print (Tuple1)
ผลลัพธ์
(5,4,3)
เมื่อเปรียบเทียบความแตกต่างระหว่างทูเพิล(Tuple) กับแบบเรียงลำดับ (List)ตัวอย่าง เช่น
กรณี List
List1 = [5,4,3]
List1.append(2)
print (List1)
ผลลัพธ์>>[5, 4, 3, 2]
กรณี Tuple
Tuple1 = (5,4,3)
print (Tuple1)
ผลลัพธ์
>>(5,4,3)
หากต้องการเพิ่มข้อมูลเข้าไปใน Tuple
Tuple2 = (5,4,3)
Tuple2.append(2)
print (Tuple2)
ผลลัพธ์
>>> Tuple2 = (5,4,3)
>>> Tuple2.append(2)
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
Tuple2.append(2)
AttributeError: 'tuple' object has no attribute 'append'
จะพบว่าเราไม่สามารถใช้ append เพิ่ม 2 เข้าไปใน Tuple ได้
นี่คือข้อแตกต่างระหว่างข้อมูลแบบเรียงลำดับ (List) กับทูเพิล (Tuple)
ตัวแปรข้อมูล Dictionary ใน Python
Dictionary เป็นอาเรย์ที่สามารถใช้สตริงเป็นคีย์ (key) ในการเข้าถึงข้อมูลได้ โดยปกติอาเรย์จะมีคีย์เป็นจำนวนเต็มนับตั้งแต่ 0 ถึง n-1
โดยชนิดข้อมูลประเภทจับคู่ ใน Python จะครอบเริ่มด้วย { และลงท้ายด้วย } ตามนี้
{'ก':1,'ข':2,'ค':3}
หมายความว่าในดิกชั่นนารีนี้ มีค่า 3 ค่า คือ 1,2 และ 3 และมีคีย์ 3 คีย์คือ 'ก','ข' และ 'ค'
ในการเรียกใช้งานข้อมูลในดิกชั่นนารี สามารถทำได้โดยการอ้างอิงคีย์ใน [คีย์] เช่น
>>> {'ก':1,'ข':2,'ค':3}['ข']
2
สรุปตัวแปร Dictionary ใน Python คืออะไร?
Dictionary คือตัวแปรข้อมูลประเภท key, value
มีรูปแบบดังนี้
{key:value}
ตัวอย่างเช่น
>>> money = {'Art':'250', 'Mark':'549'}
>>> money
{'Mark': '549', 'Art': '250'}
>>> money['Mark']
'549'
>>> money['Art']
'250'
โดยสร้างตัวแปร money เก็บจำนวนเงินของ Art และ Mark โดยใน {'Art':'250', 'Mark':'549'} ข้างหน้า : คือ Key ข้างหลัง : คือ value
บรรทัดที่ 4 ต่อมา เราได้สั่ง money['Mark'] คือ ให้แสดงค่าของคีย์ Mark ที่เก็บอยู่ในตัวแปร money
นอกจากนั้นเรายังสามารถสร้างตัวแปรข้อมูล Dictionary ด้วยคำสั่ง dict() ได้ดังนี้
>>> name = dict(name='Mark', age=18)
>>> name
{'name': 'Mark', 'age': 18}
และนอกจากกำหนดค่าแล้วเราสามารถเพิ่มค่าเข้าไปยัง Dictionary ได้ดังนี้
>>> buy = {} #ข้างในนี้ Dictionary ว่างเปล่า
>>> buy['Mark'] = '70' #เพิ่มคีย์ Mark และค่า 70 เข้าไปยัง buy
>>> buy['Art'] = '36' #เพิ่มคีย์ Art และค่า 36 เข้าไปยัง buy
>>> buy
{'Mark': '70', 'Art': '36'}
ต่อไปเราจะมาลองทำ Dictionary ซ้อนในค่าของคีย์ใน Dictionary
>>> money = {'Art':'250', 'Mark':'549'}
>>> money['Pop'] = {'buy':123} #สร้างคีย์ Pop ขึ้นมาแล้วเก็บค่า {'buy':123} เข้าไป
>>> money
{'Pop': {'buy': 123}, 'Mark': '549', 'Art': '250'}
>>> money['Pop'] #แสดงค่าข้อมูลในคีย์ Pop
{'buy': 123}
>>> money['Pop']['buy'] #แสดงค่าข้อมูลคีย์ buy ในคีย์ Pop
123
คำสั่งกับตัวแปรข้อมูล Dictionary ใน Python
คำสั่ง dict.keys(), dict.values(), dict.items()
- คำสั่ง dict.keys() เป็นคำสั่งสำหรับดึงคีย์ทั้งหมดใน Dictionary ออกมา
- คำสั่ง dict.values() เป็นคำสั่งสำหรับดึงค่าในคีย์ทั้งหมดใน Dictionary ออกมา
- คำสั่ง dict.items() เป็นคำสั่งสำหรับดึงทั้งค่าและคีย์ทั้งหมดใน Dictionary ออกมา
>>> money = {'Art':'250', 'Mark':'549'}
>>> list(money.keys())
['Mark', 'Art']
>>> list(money.values())
['549', '250']
>>> list(money.items())
[('Mark', '549'), ('Art', '250')]
คำสั่ง dict.get()
เป็นคำสั่งสำหรับรับค่าในคีย์ของ Dictionary ที่ต้องการ ตัวอย่างเช่น
>>> money = {'Art':'250', 'Mark':'549'}
>>> print(money.get('Art'))
250
>>> print(money.get('Mark'))
549
คำสั่ง dict.update()
เป็นคำสั่งสำหรับใช้เปลี่ยนแปลงค่าข้อมูลในคีย์ของ Dictionary ที่ต้องการ ตัวอย่างเช่น
>>> money = {'Art':'250', 'Mark':'549'}
>>> money2 = {'Ploy':300} #สร้าง Dictionary
>>> money.update(money2) #เพิ่ม Dictionary ของ money2 เข้าไปยัง Dictionary ของ money
>>> money
{'Mark': '549', 'Art': '250', 'Ploy': 300}
>>> money.update({'Art':115}) #ปรับเปลี่ยนค่าข้อมูลของคีย์ Art ใน Dictionary ของ money
>>> money
{'Mark': '549', 'Art': 115, 'Ploy': 300}
คำสั่ง dict.pop()
เป็นคำสั่งสำหรับดึงค่าข้อมูลในคีย์ที่ต้องการออกแล้ว ให้ลบคีย์นั้นทิ้งใน Dictionary นั้น ตัวอย่างเช่น
>>> money = {'Mark': '549', 'Art': '115', 'Ploy': 300}
>>> money.pop('Art')
115
>>> money
{'Mark': '549', 'Ploy': 300}
คำสั่ง dict.fromkeys()
ถ้าต้องการให้ค่าสำหรับแต่ละคีย์เหมือนกัน เราสามารถใช้ fromkeys() เพื่อ Dictionary ด้วยคีย์เดียวกันได้ ตัวอย่างเช่น
>>> a = {}
>>> a.fromkeys(['1','2','3','4'],'Cat')
{'1': 'Cat', '4': 'Cat', '2': 'Cat', '3': 'Cat'}
คำสั่ง dict.clear()
เป็นคำสั่งสำหรับล้างข้อมูลทั้งหมดใน Dictionary ตัวอย่างเช่น
>>> money = {'Mark': '549', 'Art': '115', 'Ploy': 300}
>>> money.clear()
>>> money
{}
Byte Array ในภาษาไพทอน Python 3
ในภาษาไพทอนจะมีข้อมูลชนิดหนึ่ง คือ ข้อมูลไบต์ (Byte) เป็น bytes-like
object (วัตถุที่เหมือนกับไบต์)
โดยในภาษาไพทอนจะมีสัญลักษณ์บ่งบอกขนิดข้อมูลนี้ b''
ตัวอย่างเช่น
a = b'Hello'
print(a)
print(type(a)
ผลลัพธ์
b'Hello'
<class 'bytes'>
มาเริ่มคำสั่ง Byte Array ในภาษาไพทอน 3 กัน
คำสั่ง
bytearray([source[, encoding[, errors]]])
เป็นคลาสลำดับเปลี่ยนแปลงได้ของจำนวนเต็มในช่วง 0 < = x < 256
สามารถสร้าง bytearray ได้จากข้อมูลชนิด list หรือไบต์ได้ดังนี้
>>> # ข้อมูลไบต์
>>> b = bytearray(b"Hello World")
>>> b.split()
[bytearray(b'Hello'), bytearray(b'World')]
>>> b[:5]
b"It"
>>> b
bytearray(b'It World')
>>> # ข้อมูล list
>>> key1 = [1,2,3]
>>> key2 = bytearray(key1)
>>> key2
bytearray(b'\x01\x02\x03')
รับค่าขนาดไบต์ได้โดยอ้าอิงข้อมูลในข้อมูลชนิดไบต์ :
>>> b = bytearray(b"Hello World")
>>> b[:1]
bytearray(b'H')
>>> b[1]
101
>>> b[:0]
bytearray(b'')
>>> b[0]
72
>>> #ลูปจำนวนไบต์ทั้งหมดออกมา
>>> for c in b: print(c)
...
72
101
108
108
111
32
87
111
114
108
100
>>>
>>> for c in key2: print(c)
...
1
2
3
อ่านเอกสารเพิ่มเติมได้ที่ https://docs.python.org/3/library/functions.html#bytearray
บทที่ 3 การแสดงผลข้อมูลใน Python 3
การแสดงผลข้อมูลถือเป็นสิ่งสำคัญเพื่อให้รู้ผลลัพธ์จากการประมวลผลของคอมพิวเตอร์
ถ้าไม่มีการแสดงผลการทำงานของโปรแกรม
การที่เขียนโปรแกรมนั้นจะไม่มีประโยชน์อะไรเลย
เพราะไม่สามารถนำข้อมูลไปใช้งานได้
รูปแบบการแสดงผลข้อมูลใน Python 3
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
- objects คือ วัตถุ
- sep คือ การแยก
- end คือ การขึ้นบรรทัดใหม่
ตัวแทนชนิดของข้อมูล
%s - สตริง เช่น ข้อความ
%d - จำนวนเต็ม
%f - เลขทศนิยม
%.f - เลขทศนิยมมีจำนวนคงตัวเลขทางด้านขวาของจุดทศนิยม
%x/%X - จำนวนเต็มใน hex แทน (พิมพ์เล็ก/ใหญ่)
ตัวอย่างการแสดงผลข้อมูลใน Python 3
ตัวอย่างที่ 1
print("Hello World")
ผลลัพธ์
Hello World
อธิบาย
ตัวอย่างนี้แสดงข้อความที่กำหนดออกมาทางจอภาพเท่านั้น ไม่มีการแสดงข้อมูลอื่นเพิ่มเติม
ตัวอย่างที่ 2
print ("1+1 = %d" % (2))
ผลลัพธ์
1+1 = 2
อธิบาย
ในตัวอย่างนี้มีการใช้ String Formatting
ในแบบข้อความผสมกับตัวแทนชนิดข้อมูล มีการรับค่าคงที่เข้า คือ 2
เข้ามาแทนที่ตัวแทนชนิดข้อมูลในประโยค
ตัวอย่างที่ 3
num = 100
print ("%d/2" % (num))
ผลลัพธ์
100/2
อธิบาย
ในตัวอย่างนี้มีการใช้ String Formatting ในแบบข้อความผสมกับตัวแทนชนิดข้อมูล โดยมีการเรียกใช้ตัวแปรเข้ามาแทนที่ตัวแทนชนิดข้อมูล
ตัวอย่างที่ 4
print ("Are you ok?","\n")
ผลลัพธ์
Are you ok?
อธิบาย
ในตัวอย่างนี้แสดงข้อความที่กำหนดออกมาทางจอภาพเท่านั้น และขึ้นบรรทัดใหม่โดยใช้ \n
หากเราต้องการแสดงข้อมูลซ้ำ
print (ข้อความหรือตัวแปร*จำนวนที่ต้องการแสดงซ้ำ)
ตัวอย่างเช่น
print ("Hello, World!"*5)
ผลลัพธ์
print ("Hello, World!"*5)
Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!
บทที่ 4 Decimal Python
เรามาเรียนรู้การใช้ Decimal หรือเลขทศนิยมใน Python กัน
สิ่งหนึ่งที่โปรแกรมเมอร์รู้กันนั้นก็คือคอมพิวเตอร์ใช้เลขฐานสองเป็นภาษาเครื่อง
คือ 0 และ 1 ไม่ได้ใช้เลขฐานสิบดังที่มนุษย์ ทำให้การใช้ Decimal
หรือเลขทศนิยมในเลขฐานสอง จะไม่ตรงกับเลขทศนิยมในเลขฐานสิบได้
หากเราเขียนโปรแกรมเปรีบเทียบเช่น
>>> print (0.05 + 0.05 == 0.1)
True
จะเห็นได้ว่าได้ผลลัพธ์ที่ต้องการในระดับหนึ่ง แต่ถ้าเราเขียนโปรแกรมที่มีการทำงานวนซ้ำกันจำนวนหลาย ๆ ครั้งมาก ๆ กับเลขทศนิยม เช่น
>>> aa = 0.0
>>> for i in range(1000):
aa += 0.0001
print(repr(aa))
0.0001
0.0002
0.00030000000000000003
...
0.09980000000000183
0.09990000000000183
0.10000000000000184
>>> print (aa == 1.0)
False
จะเห็นได้ว่าโปรแกรมทำงานไม่ได้ผลลัพธ์ตามที่เราต้องการและออกแบบไว้
หากเราต้องการให้ทำงานเพื่อให้ได้ผลลัพธ์ที่ต้องการ เราต้องทำตามเอกสาร
เป็นสเปคของเลขทศนิยมฐานสิบใน Python ทำให้ได้ผลลัพธ์ที่ถูกต้องกว่า อย่าลืม from decimal import Decimal กัน เช่น
>>> from decimal import Decimal
>>> b = Decimal("0.0")
>>> for i in range(1000):
b += Decimal("0.001")
print(repr(b))
Decimal('0.001')
...
Decimal('1.000')
>>> print(b == Decimal("1.0"))
True
อ่านรายละเอียดเพิ่มเติมได้ที่
https://docs.python.org/3/library/decimal.html
บทที่ 5 การใช้งาน range ใน Python
range เป็นคำสั่งสำหรับมีไว้ในการลำดับจำนวนตัวเลข เช่น แสดงตัวเลข 0 - 3
หรือแบบก้าวกระโดด 3,6,9 มีทั้งไปทาง + และ - ตามระบบเส้นจำนวนจริง
มีหลักในการใช้งานหลักน
range(เริ่ม,จบ, การเพิ่มขึ้น)
ตัวอย่างการใช้งาน range ใน Python
>>> list(range(3))
[0, 1, 2]
>>> list(range(0,10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> list(range(-3,9))
[-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> list(range(0, 20, 2))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
การนำไปใช้กับการลูป
สมมุติว่า มีโจทย์โปรแกรมให้เขียนโปรแกรมโดยใช้ for การลูปใน Python โดยไล่ตามนี้
1
22
333
4444
55555
โค้ดตัวอย่าง
>>> for i in range(1, 6): #กำหนดให้ตัวแปร i แทน range(1, 6) หมายถึงช่วงของตัวเลข 1 - 6
print(str(i) * i + "\n")
1
22
333
4444
55555
บทที่ 6 แยกข้อความด้วย split ใน Python 3
การเขียนโปรแกรม เมื่อเรารับค่าข้อมูลมา โดยที่เราได้ทำกำหนดเครื่องหมายแยกข้อความ เช่น , - เป็นต้น
เมื่อต้องการแสดง หากต้องการแแสดงตัวแปรที่รับข้อมูลมาโดยมีการแยกข้อความมาแล้ว ใน Python เราต้องใช้ split
มีหลักการใช้งานดังนี้
ตัวแปร.split("เครื่องหมายแยกข้อความที่กำหนด")
ตัวอย่าง
a = u'สวัสดีปีใหม่ ขอให้มีแต่ความสุขกันนะครับ'
a.split(" ")
ผลลัพธ์
a = u'สวัสดีปีใหม่ ขอให้มีแต่ความสุขกันนะครับ'
>>> a.split(" ")
['สวัสดีปีใหม่', 'ขอให้มีแต่ความสุขกันนะครับ']
ตัวอย่าง
b = "แมว,คน,นก"
b.split(",")
ผลลัพธ์
>>> b = "แมว,คน,นก"
>>> b.split(",")
['แมว', 'คน', 'นก']
บทที่ 7 Input การรับค่าข้อมูลจากคีย์บอร์ดใน Python
การรับค่าข้อมูล (Input) จากคีย์บอร์ดใน Python เป็นเรื่องพื้นฐานที่นักพัฒนาโปรแกรมไม่ว่าภาษาไหนก็ต้องเรียนรู้ด้วย
เมื่อตอน Python 2 มีคำสั่งรับค่าข้อมูลจากคีย์บอร์ดด้วยคำสั่ง
raw_input()
แต่ใน Python 3 ปัจจุบันนี้ได้มีการเปลี่ยนแปลงคำสั่งนิดหน่อยจาก
raw_input()
เป็น
input()
หากผู้อ่านเคยใช้ Python 2 เปลี่ยนมาใช้ Python 3 สามารถนำมาใช้งานง่าย ๆ แค่แก้ไขโค้ดนิดหน่อยสำหรับคำสั่งดังกล่าว
การรับค่า String ข้อความ ใน Python 3
ใช้ input() โดยมีรูปแบบการใช้งานดังน
text = input("Enter some text ")
การรับค่าตัวเลขจำนวนเต็มใน Python 3
ต้องใช้
int
มาใช้งานกับ
input()
เพื่อกำหนดให้รับค่าข้อมูลได้เฉพาะที่เป็นจำนวนเต็ม (-1 , 0 , 1) โดยใช้คำสั่ง
int(input())
โดยมีรูปแบบการใช้งานดังนี้
number = int(input("Enter a integer: "))
การรับค่าเลขทศนิยมใน Python 3
ต้องใช้
float
มาใช้งานกับ
input()
เพื่อกำหนดให้รับค่าข้อมูลที่เป็นเลขทศนิยมได้ (-1.84 , 0.96 , 1.78) โดยใช้คำสั่ง
float(input())
โดยมีรูปแบบการใช้งานดังนี้
floating = float(input("Enter a floating point number: "))
กรณีที่เขียนโปรแกรมโดยใช้คำสั่ง input() ไปแล้วต้องการแปลงค่าข้อมูลที่รับมาเป็นตัวเลขเพื่อนำไปคำนวณ เช่น
number = input("Enter some text ") #กำหนดตัวแปร number ให้รับค่าข้อมูล
anumber = float(number) #เปลี่ยนข้อมูลที่รับมาในตัวแปร number ให้สามารถแปลงเป็น เลขทศนิยม
#เพื่อนำไปคำนวณได้ หากต้องการกำหนดให้เป็นจำนวณเต็มแค่เปลี่ยน float เป็น int
บทที่ 8 การรับค่าตัวแปรและแสดงค่าตัวแปรใน Python 3
ทำไมต้องมีตัวแปร บทนิยมของตัวแปร คือ ลักษณะของข้อมูลที่เปลี่ยนแปลงได้ แสดงโดยใช้สัญลักษณ์ เช่น ตัวแปร X , Y ในเรื่องกราฟแกน X , Y ทางคณิตศาสตร์ เป็นต้น
ตัวแปรทำให้มีความง่ายต่อการเรียกใช้งานข้อมูล ถ้าจะเปรียบเทียบ ขอเปรียบเทียบแบบง่าย ๆ ตัวแปรก็เหมือนกับช่องว่างในกรอกข้อมูลในเอกสารต่าง ๆ
กฎการตั้งชื่อตัวแปรใน Python 3
- ห้ามตั้งชื่อตัวแปรให้ตรงกับคีย์เวิร์ดของ Python 3 โดยมีคีย์เวิร์ด ดังนี้ False class finally is return None continue for lambda try True def from nonlocal while and del global not with as elif if or yield assert else import pass break except in raise แต่สามารถใช้ตัวพิมพ์ใหญ่ได้
- ห้ามใช้ตัวพิมพ์เล็ก
- ห้ามใช้อักษระสัญลักษณ์ เช่น / * - + # ! - % $ เป็นต้น
- ห้ามใช้ตัวเลข
- ไม่เว้นว่าง
รูปแบบการรับค่าตัวแปรใน Python 3
จะเป็นตัวเลขหรือข้อความก็ได้
ตัวแปร = input()
ตัวอย่างในรูปแแบบข้อความ เช่น
name = input("What is your name? ")
แล้วรันจะได้ผลลัพท์ มีให้กรอกข้อความ
What is your name?
สมมุติให้ผมกรอกว่า tonatn
What is your name? tontan
ตัวอย่างในรูปแบบตัวเลข
a = int(input("input1: "))
การแสดงค่าหรือดึงค่าจากตัวแปรมาใช้งานใน Python 3
ตัวแปร
ตัวอย่างเช่น
name
ก็จะแสดงผลลัพท์ค่าตัวแปร
'tontan'
หรือ print name
ก็แสดงค่าตัวแปรเช่นกัน
ตัวอย่างการเขียนโปรแกรมใน Python 3 โดยใช้ตัวแปรรวมด้วยโปรแกรมบวกเลข
a = int(input("input1: "))
input1: 1
b = int(input("input1: "))
input1: 3
print ("=" , a + b)
= 4
บทที่ 9 คำสั่งเงื่อนไข if else ใน Python 3
บทความนี้จะพูดถึงเรื่อง คำสั่งเงื่อนไข if else ใน Python 3 กัน
คำสั่งเงื่อนไข if
นี้ใช้ในการเปรียบเทียบเงื่อนไขว่าตรงตามที่ต้องการหรือไม่
คำสั่ง elif
ถ้าไม่ให้ทำการเปรียบเทียบต่อไป
คำสั่ง else
จนหมดเงื่อนไขที่จะเปรียบเทียบแล้วให้ทำตามคำสั่ง else
รูปแบบการใช้คำสั่งเงื่อนไข if else ใน Python 3
if เงื่อนไข:
คำสั่ง
elif เงื่อนไข:
คำสั่ง
else:
คำสั่ง
อธิบายรูปแบบการใช้คำสั่งเงื่อนไข if else ใน Python 3
เมื่อกำหนดเงื่อนไข if แล้ว ถ้าโปรแกรมที่สร้างนั้น
ต้องใช้เงื่อนไขหลายเงื่อนไขในการเปรียบเทียบ elif
โดยเปรียบเทียบเงื่อนไขไปเรื่อย ๆ จนกว่าเงื่อนไขไหนจะเป็นจริงจนสุดท้าย
ถ้าเงื่อนไขทั้งหมดเป็นเท็จ ให้ทำตามคำสั่งในเงื่อนไข else
ตัวอย่างการนำคำสั่งเงื่อนไข if else ไปใช้ในการเขียนโปรแกรมบน Python 3
ตัวอย่าง
โปรแกรมตรวจสอบตัวเลขว่าน้อยกว่ามากกว่าหรือเท่ากับ 0
หลักการโปรแกรม
รับค่าตัวเลขเข้ามาแล้วเอามาแทนตัวแปร x ให้ตัวแปร y = 0 เช็คว่า น้อยกว่ามากกว่าหรือเท่ากับ 0
โค้ด:
y = 0
x = int(input("input: "))
if x == y:
print ("=" , y)
elif x < y:
print ("<" , y)
elif x > y:
print (">" , y)
else:
print ("No, It isn't num.")
บทที่ 10 ฟักชั่นทางคณิตศาสตร์เบี้องต้นใน Python 3
ฟักชั่นคณิตศาสตร์ถือเป็นสิ่งที่ขาดไม่ได้ในภาษาคอมพิวเตอร์ ฟักชั่นทางคณิตศาสตร์พื้นฐานก็จะมี + - * / เพื่อไม่เป็นการเสียมาเริ่มเนื้อหากันเลย
ฟักชั่นพื้นฐาน + - * / ** (บวก ลบ คูณ หาร ยกกำลัง) ใน Python 3
รูปแบบการใช้ ฟักชั่นพื้นฐาน + - * / ง่าย ๆ ดังนี้
บวก
2 + 2
4
ลบ
50 - 5
45
คูณ
2 * 3
6
หาร
8 / 5
1.6
แบบเงื่อนไข
(2 + 2) * 5
20
การยกกำลังใน Python 3
2 ** 4
16
ตัวอย่างการใช้ฟักชั่นทางคณิตศาสตร์โดยอ้างอิงตัวแปรใน Python 3
a = 4
b = 3
(a + b) / a
1.75
อีกตัวอย่างหนึ่ง ใช้ฟักชั่นทางคณิตศาสตร์เบี้องต้นในรูปแบบสมการ
x = 3 + 4a
y = 2 - 3a
z = x + y
print(z)
(5+1a)
บทที่ 11 คำสั่งการวงรอบ Loop หรือคำสั่งทำซ้ำ
การเขียนโปรแกรมในบางกรณีโปรแกรมที่เขียนต้องทำงานอย่างหนึ่ง ๆ ซ้ำกันหลาย ๆ ครั้ง เราต้องใช้การวงรอบ Loop ในการโปรแกรม
บทนี้จะนำเสนอการใช้คำสั่งการวงรอบ Loop ขอเรียกว่า คำสั่งทำซ้ำ
คำสั่งการวงรอบ Loop มีดังนี้
- for
- while
คำสั่งทำซ้ำ for ใน Python 3
รูปแบบ
for ตัวแปร in ลำดับขอบเขต :
คำสั่ง
ตัวอย่างที่ 1
for c in 'word':
print( c )
ผลลัพธ์
w
o
r
d
อธิบาย
กำหนดให้ตัวแปร c มีลำดับอยู่ใน word
(ถ้าเอาตามหลักคณิตศาสตร์ คือ เซต C มีสมาชิกเป็น w , o , r ,
d)แล้วแสดงสมาชิกที่อยู่ในขอบเขตนั้นออกมา
ตัวอย่างที่ 2
for count in range(1, 11):
print(count)
ผลลัพธ์
1
2
3
4
5
6
7
8
9
10
อธิบาย
กำหนดให้ตัวแปร count มีลำดับในเงื่อนไข(1, 11) คือ ไล่ตัวเลขจาก 1 ถึง 10 ไม่เอา 11
ตัวอย่างที่ 3
for x in range(3):
print (x)
else:
print ('Final x = %d' % (x))
ผลลัพธ์
0
1
2
Final x = 2
อธิบาย
กำหนดให้ x มีลำดับใน range(3) แล้วแสดงลำดับออกมา ต่อมาใช้ else แสดงลำดับสุดท้ายออกมา นั้นคือ 2
ตัวอย่างที่ 4
list_of_lists = [["1, 2, 3"], ["4, 5, 6"], ["7, 8, 9"]]
for i in list_of_lists: # loop รายการละ 1 รายการ
for x in i: # loop รายการที่อยู่ในภายใน i ทีละ 1
print (x) # แสดงผลรายการแต่ละอันที่อยู่ในรายการย่อยของรายการ i
ผลลัพธ์
1, 2, 3
4, 5, 6
7, 8, 9
อธิบาย
list อยู่ในลำดับของ list_of_lists แล้ว x อยู่ในลำดับของ list ให้แสดงลำดับนั้นออกมา
คำสั่งทำซ้ำ While ใน Python 3
คำสั่งทำซ้ำ While ใน Python
มีลักษณะการใช้เหมือนกันแต่จนกว่าเงื่อนไขที่กำหนดจะพบกัน เพราะการวนรอบใน
Python เพื่อให้มีประสิทธิภาพ While จึงนำมาใช้จำนวนน้อยครั้ง
ยกเว้นในกรณีที่มีการนำเข้าข้อมูลของผู้ใช้ที่จำเป็น
รูปแบบ
while นิพจน์:
ข้อความสั่ง(s)
ตัวอย่างที่ 5
count = 0
while (count <= 8):
print ('Is:', count)
count = (count + 1)
ผลลัพธ์
Is: 0
Is: 1
Is: 2
Is: 3
Is: 4
Is: 5
Is: 6
Is: 7
Is: 8
อธิบาย
กำหนดให้ตัวแปร x มีค่าเท่ากับ 0
แล้วต่อมาใช้คำสั่งทำซ้ำ While โดยในขณะที่ count น้อยกว่าหรือเท่ากับ 8
แล้วให้แสดงค่านั้นตามหลัง Is: แล้วให้ count + 1
แล้ววนรอบต่อไปจนกว่าจะเท่ากับ 8
ตัวอย่างที่ 6
while True:
n = input("Please enter 'hello':")
if n.strip() == 'hello':
break
ผลลัพธ์
Please enter 'hello':
อธิบาย
กำหนดให้มีค่าความจริงเป็นจริง ให้ตัวแปร x
รับค่าจากผู้ใช้มาใช้ในเงื่อนไข if โดยค่าที่ได้จะเป็นจริงก็ต่อเมื่อค่า n
มีค่าเป็น hello เท่านั้นแล้วจึงจะออกจากการวนรอบโดยใช้ break
บทที่ 12 Python OOP อ๊อบเจ็กและคลาส
หลาย ๆ ท่านคงเคยได้ยินคำว่า OOP การเขียนโปรแกรมเชิงวัตถุกันมาบ้างแล้ว โดย OOP ย่อมาจาก Object-Oriented Programming เป็นหลักการที่เหมาะสมกับการพัฒนาโปรแกรมทั้งขนาดเล็ก ขนาดกลาง และขนาดใหญ่
คลาสจะแบ่งปัญหาใหญ่ให้เล็กลงเพื่อแก้ไขในขอบเขตที่จำกัด บทนี้จะพาทุกท่านไปเขียน OOP ในภาษา Python กัน
มาเริ่มกันด้วยคลาสง่าย ๆ บน Python กัน
class FC:
pass
ต่อมาสร้างอ๊อบเจ็ก
a = FC()
เราสามารถนำ a ไปใช้งานได้เลย เหมือนกล่องเปล่า
a.one = 1
a.ten = 10
print (a.ten - a.one)
ผลลัพธ์
9
ตัวอย่างข้างบนมีข้อเสียตรงที่อ๊อบเจ็กอื่นของคลาส FC จะไม่มี one และ ten สามารถแก้ไขได้โดยการกำหนดค่าเริ่มต้น
class FC:
one = 1
ten = 10
เวลาเอาไปใช้
a = FC.one
b = FC.ten
print (b - a)
ผลลัพธ์
9
ตัวอย่างข้างบน เป็นที่แน่นอนว่า คลาส FC มี one และ ten แน่นอน แต่ยังไม่สามารถกำหนดค่าเริ่มต้นแบบเป็นระเบียบได้
class FC:
def __init__(self,one,ten):
self.one = one
self.ten = ten
วิธีกำหนดค่าเริ่มต้นจะต้องใช้ constructor เข้ามาช่วย นั้นคือเมธอดชื่อ
init ทุกเมธอดในคลาสจะใช้พารามิเตอร์ตัวแรกแทนตัวเอง
ชึ่งปกติจะใช้ชื่อ self สำหรับในภาษาซีหรือจาวา self คือ this
a = FC(1,10)
ต่อมาใส่เมธอดเพิ่มเติมเข้าไปในคลาส
class FC:
def __init__(self,one,ten):
self.one = one
self.ten = ten
def show(self):
print (self.ten,"-",self.one,"=",self.ten - self.one)
นำมาใช้
a = FC(one=1,ten=10)
a.show()
ผลลัพธ์
10 - 1 = 9
บทที่ 13 Python Regular Expressions
Regular Expressions (RegEx) คือ วิธีการตรวจสอบข้อมูล โดยกำหนดรูปแบบของสตริงที่ต้องการตรวจสอบที่เรียกว่า แพตเทิร์น(Pattern) มีต้นกำเนิดมาจากภาษา Perl
รูปแบบแพตเทิร์น(Pattern) ใน Python
Anchors
^
เริ่มต้นของสตริงหรือเริ่มต้นของบรรทัดในรูปแบบหลายบรรทัด
\A
จุดเริ่มต้นของสตริง
$
สิ้นสุดของสตริงหรือจุดสิ้นสุดของเส้นในรูปแบบหลายบรรทัด
\Z
สิ้นสุดของสตริง
\b
ขอบเขตคำ
+
ตรงกับอย่างน้อยหนึ่งอักขระก่อนหน้านี้
*
มีหรือไม่ก็ได้
|
คือ "หรือ" , "OR"
haracter Classes
.
(จุด) แทนตัวอักษรใด ๆ 1 ตัว ยกเว้นตัวอักษรขึ้นบรรทัดใหม่
\s
เว้นบรรทัด
\S
ไม่ได้เว้นบรรทัด
\B
ไม่ขอบเขตคำ
<
จุดเริ่มต้นของคำ
>
สุดท้ายของคำ
\b
ตรงกับขอบเขต string
\d
แทนตัวเลข 0 ถึง 9
\D
ตัวอักษรที่ไม่ใช่ตัวเลข
\w
คำ
\W
ไม่ใช่คำ
{จำนวนที่ซ้ำ}
ระบุว่าต้องการการซ้ำซ้อนทั้งหมดกี่ตัว
อักขระพิเศษ
\n
บรรทัดใหม่
\t
Tab
กลุ่ม
(? ... )
Passive (ไม่จับ) กลุ่ม
[abc]
ช่วง (A หรือ B หรือ C)
[^abc]
ไม่ใช่ a หรือ b หรือ c
[a-z]
ใช้แทน a - z ตัวพิมพ์เล็ก
[a-z0-9]
ใช้แทน a-z ตัวพิมพ์เล็กและแทนเลข 0 - 9
[A-Z]
ใช้แทน A - Z ตัวพิมพ์ใหญ่
[A-Z0-9]
ใช้แทน A - Z ตัวพิมพ์ใหญ่และแทนเลข 0 - 9
[0-9]
ใช้แทนช่วง 0 - 9 ที่ยกมาด้านบนเป็นรูปแบบแพตเทิร์น(Pattern) ใน Python ที่ใช้กันบ่อย ๆ สำหรับเรื่อง รูปแบบแพตเทิร์น(Pattern) ไปศึกษารายละเอียดย่อย ๆ ได้ที่ http://www.cheatography.com/davechild/cheat-sheets/regular-expressions/
ในการใช้ Regular Expressions ใน Python เราต้องใช้โมดูลที่มากับตัว Python ที่มีชื่อว่า re
findall
findall()
เป็นฟังก์ชั่นที่มีประสิทธิภาพที่สุดในโมดูล re เราจะใช้
findall()
ในการค้นหารูปแบบในตัวอย่างนี้
ผลลัพธ์
['Barack Obama', 'Bill Gates']
match
re.match()
ตรวจสอบว่า Regular Expressions
ตรงที่จุดเริ่มต้นของสตริง เมื่อพบจะคืนค่า match object ออกมา
ถ้าไม่พบจะคืนค่า None ออกมา ดังตัวอย่างต่อไปนี้
>>> import re
>>> m = p.match('tempo')
>>> m
<_sre.SRE_Match object; span=(0, 5), match='tempo'>
ถ้าไม่พบข้อความ
>>> import re
>>> p.match("")
>>> print(p.match(""))
None
search
re.search() ใช้ค้นหารูปแบบภายในสตริงที่กำหนด ดังตัวอย่างต่อไปนี้
import re
print(re.search(r'\d\d\d', 'Your number is <b>123</b>').group(0))
ผลลัพธ์
123
การใช้ re.search()
กับการเช็คเงื่อนไข if else
หากต้องการเช็คเงื่อนไข if else ว่าถ้าในสตริงมีรูปแบบที่ตรงกับรูปแบบ re
ที่กำหนดไว้ ให้ทำเงื่อนไขใน if หากไม่ใช่ ให้ทำเงื่อนไขใน else
สามารถทำได้โดยใช้โค้ดต่อไปนี้
ตัวอย่างเช่น
หากกำหนดรูปแบบให้ค้นหา 0 - 9 หากพบให้แสดงเป็น 1 หากไม่พบ ให้แสดงเป็น 0
เขียนรูปแบบ re ได้เป็น [0-9] ได้โค้ดออกมาตามตัวอย่างนี้
import re
a = '5'
if (re.search(r'[0-9]',a)):
print("1")
else:
print("0")
ผลลัพธ์
1
sub
re.sub() เป็นคำสั่งที่ใช้แทนที่ตัวอักษรในสตริง ไม่ว่าจะเป็นคำหรือประโยค ดังตัวอย่างต่อไปนี้
import re
a = "คน เดิน ด้วย เครื่องบิน"
b = re.sub("เดิน", "บิน", a)
print(b)
ผลลัพธ์
คน บิน ด้วย เครื่องบิน
compile
re.compile()
เป็นคำสั่งที่ใช้รวบรวมรูปแบบ (Pattern) เป็นวัตถุเก็บรูปแบบที่ต้องการ ดังตัวอย่างต่อไปนี้
import re
ผลลัพธ์
['hello', 'world']
split
re.split
เป็นคำสั่งที่ใช้แยกสตริงตามที่กำหนด เราสามารถนำมาใช้ได้กับ Regular Expressions ดังตัวอย่างต่อไปนี้
>>> import re
>>> re.split('\W+','This... is a test.')
['This', 'is', 'a', 'test', '']
สำหรับท่าใดที่อยากลองเขียน Regular Expressions ดู สามารถเข้าไปลองเขียนเล่นได้ที่ http://re-try.appspot.com/
บทที่ 14 อ๊อบเจ็กและคลาสพื้นฐานในภาษา Python
ในภาษา Python การสร้างอ๊อบเจ็กและคลาส มีรูปแบบดังนี้
ลองเขียนอ๊อบเจ็กและคลาสกันดู
แล้วนำเรียกใช้ข้อมูลที่อยู่ในคลาส test
>>> a = test() #กำหนดให้ a แทนคำสั่งในคลาส test
>>> a.run() #เรียกใช้ฟังก์ชัน run ในคลาส test
It's ok
>>> a.opentest() #เรียกใช้ฟังก์ชัน opentest ในคลาส test
Open A Test
จะเห็นได้ว่า เราสามารถเรียกใช้ฟังก์ชั่นที่อยู่ในคลาสได้
ด้วยการอ้างอิงตำแหน่งที่อยู่ของฟังก์ชั่นในคลาสนั้น
ต่อไปเราจะกำหนดให้ฟังก์ชั่นในคลาสสามารถกำหนดพารามิเตอร์ของฟังก์ชั่นได้ด้วยการใช้ self
แล้วลองนำมาใช้งานดู
>>> b = test2() #กำหนดให้ b แทนคำสั่งในคลาส test2
>>> b.minus(10,5) #เรียกใช้ฟังก์ชัน minus ในคลาส test2 โดยกำหนดพารามิเตอร์ num1,num2
5
หากเราต้องการกำหนดค่าเริ่มต้นจะต้องใช้ constructor เข้ามาช่วย นั้นคือเมธอดชื่อ init โดยทุกเมธอดในคลาสจะใช้พารามิเตอร์ตัวแรกแทนตัวมันเอง พูดง่าย ๆ ฟังก์ชั่นที่มีเมธอดชื่อ init จะเป็นฟังก์ชั่นหลักของคลาสนั้น
เมื่อเรียกใช้คลาส test3
>>> c = test3(1,2)
3
นอกจากนั้นเรายังสามารถเพิ่มฟังก์ชั่นลงในคลาสที่มีการใช้เมธอดชื่อ init ได้ด้วย
เรียกใช้งานในคลาส test4
>>> aa = test4(2,3)
5
>>> aa.test()
It's ok
เราสามารถกำหนดค่าว่างให้กับคลาสได้ด้วยคำสั่ง pass ตัวอย่างเช่น
class D():
pass
เราสามารถใช้คลาส D โดยใช้เก็บค่าต่าง ๆ ได้เลย เหมือนเป็นกล่องเปล่า ตัวอย่างเช่น
>>> a = D()
>>> a.one = 1
>>> a.ten = 10
>>> print (a.ten - a.one)
9
คืนค่าข้อมูลด้วย return
คำสั่ง return เป็นคำสั่งสำหรับคืนคาข้อมูลที่อยู่ในคลาสและฟังก์ชัน
ตัวอย่างเช่น
def ok():
return "ok"
print(ok)
print(ok())
ผลลัพธ์
ok
บทที่ 15 สร้าง Modules ใน Python 3
ในบางกรณีเมื่อเราพัฒนาโปรแกรมโดยมีความซับซ้อนและมีขนาดใหญ่ ทำให้เราต้องเสียเวลาไปกับเขียนโค้ดเดิม ๆ ที่เรียกใช้และมีลักษณะการทำงานเหมือนกัน
หากเราเปลี่ยนมาใช้งานแบบ Modules ใน Python 3 จะช่วยเพิ่มความสะดวกสบายในเขียนโค้ดและเรียกใช้งานขึ้น
ใน Python เราแค่เขียนไฟล์ Modules ขึ้นมา แล้วบันทึก เวลาต้องการเรียกใช้งานแค่ import ชื่อไฟล์ Modules ที่สร้าง โดยไฟล์ Modules ที่สร้างต้องอยู่ในโฟลเดอร์เดียวกันกับไฟล์งานที่เรียกใช้
ตัวอย่างเช่น
ไฟล์ mod1.py
def cal1(a,b):
c = a + b
return c
เป็นการสร้างฟังก์ชัน cal1 ขึ้นมา ทำเป็น Module เมื่อเรียกไปใช้งาน
ไฟล์ testmod1.py
import firstmod
print (firstmod.cal1(5,6))
เรียกใช้งานฟังก์ชัน cal1 ใน Module ชื่อ firstmod จะได้ผลลัพธ์เป็น
11
ตัวอย่างต่อมา
ไฟล์ mod2.py
def body():
print ("I'm Python. :)")
เรียกมาใช้งาน
ไฟล์ testmod2.py
import mod2
mod2.body()
ได้ผลลัพธ์เป็น
I'm Python. 😃
บทที่ 16 ฟังก์ชัน math ใน Python
ฟังก์ชัน math เป็นฟังก์ชันที่ใช้คำนวณทางคณิตศาสตร์ เพื่อหาค่าทางคณิตศาสตร์ โดยฟังก์ชัน math ใน Python นี้จะใช้ฟังก์ชันทางคณิตศาสตร์ที่กำหนดโดยมาตรฐาน C
เวลาเรียกใช้งานฟังก์ชัน math ใน Python ต้อง import math เข้ามาด้วย
ทฤษฎีตัวเลข
- การปัดเลขทศนิยมmath.ceil(x)เมื่อแทน x เป็นจำนวนจริงเลขทศนิยมโค้ดตัวอย่าง math.ceil(0.54) แสดงผล 1
- math.copysign(x, y)คืนค่าจำนวนจริงมีจำนวน (ค่าสัมบูรณ์) ของ x แต่เป็นเครื่องหมายของ y
math.copysign(1.0,-0.0)
ผลลัพธ์1.0
- ค่าสัมบูรณ์math.fabs(x)คืนค่าสัมบูรณ์ของ xโค้ดตัวอย่าง
math.fabs(0.9)
ผลลัพธ์0.9
- แฟกทอเรียล math.factorial(x) คืนค่า x แฟกทอเรียล เพิ่มค่าข้อผิดพลาดถ้า x ไม่เป็นจำนวนเต็มหรือเป็นจำนวนลบ
>>> math.factorial(5)
120
- ปัดเศษทศนิยมทิ้งmath.floor(x)คืนค่า x โดยปัดเศษทศนิยบนค่า X ทิ้ง
>>> math.floor(9.2)
9
- math.fmod(x,y)คืนค่าส่วนเหลือของ x หาร ด้วย y
>>> math.fmod(33,55)
33.0 #หลังจากที่ 33/55 จะพบว่า เราไม่สามารถหารได้ถ้าไม่มีส่วนที่เหลือ คือ 33.0
>>> math.fmod(10,20)
10.0
- math.frexp(x)คืนค่าแมนทิสซา(mantissa)และเลขชี้กำลังของ x เป็นคู่ (m, e)
>>> math.frexp(16)
(0.5, 5)
>>> math.frexp(8)
(0.5, 4)
- math.fsum(iterable)คืนค่าผลรวมของ iterable เช่น set, list, หรือ tuple
>>> import math
>>> i=[5,6,1]
>>> math.fsum(i)
12.0
- math.isfinite()คืนค่า true หรือ false ถ้าค่าของ x จะมีขอบเขต (เพิ่งมีใน Python 3.2)
>>> math.isfinite(12**12)
True
>>>math.isfinite(333**55555553333445)
false
- math.isinf(x)คืนค่า True ถ้า x เป็นจำนวนเต็มบวกหรือเต็มลบที่เป็นจำนวนอนันต์ ถ้าไม่เป็นจำนวนอนันต์คืนค่า False
- math.isnan(x)คืนค่า True ถ้า x ไม่ใช่จำนวนตัวเลข และคืนค่า False หากไม่ตรงกับเงื่อนไขนี้
- math.ldexp(x, i)คืนค่า x * (2**i) คำสั่งนี้เป็นหลัก ผกผันของ ฟังก์ชัน frexp()
- math.modf(x)คืนค่าส่วนที่เป็นจำนวนเต็มและเศษส่วนของ x ทั้งผลลัพธ์ดำเนินการเครื่องหมายของ x และเป็นจำนวนจริง
- math.trunc(x)คืนค่าจริงของ x ถูกตัดเหลือเพียง Integral (มักจะเป็นจำนวนเต็ม ) ตัวแทน X__trunc__()
Power และฟังก์ชั่นลอการิทึม
- math.exp(x)คืนค่า e**x
- math.expm1(x)เพิ่งมีใน Python 3.2 เป็นต้นมาคืนค่า e**x - 1 ของจำนวนจริงขนาดเล็ก ในบวกการลบ exp(x) - 1 จะส่งผลต่อการสูญเสียความแม่นยำที่สำคัญไปฟังก์ชัน expm1() จะช่วยให้สามารถคำนวณปริมาณความแม่นยำเต็มรูปแบบนี้:
>>> from math import exp, expm1
>>> exp(1e-5) - 1 #ช่วยให้ผลลัพธ์ที่ถูกต้องถึง 11ตำแหน่ง
1.0000050000069649e-05
>>> expm1(1e-5) # ให้ผลลัพธ์ที่ถูกต้องแม่นยำกว่า exp()
1.0000050000166668e-05
- math.log(x[, เลขฐาน])คืนค่าผลลัพธ์ที่ได้จากค่า log ตามคณิตศาสตร์ หากไม่ได้กำหนดเลขฐาน เลขฐานจะเป็นค่า e
>>> import math
>>> math.log(10)
2.302585092994046
>>> math.log(10,10)
1.0
>>> math.log(2)
0.6931471805599453
>>> math.log(1)
0.0
>>> math.log(2,2)
1.0
- math.log1p(x)คืนค่าลอการิทึมธรรมชาติของ 1 + x (ฐาน e) ผลลัพธ์การคำนวณที่ถูกต้องสำหรับ x อยู่ใกล้ศูนย์
- math.log2(x)เพิ่งมีใน Python 3.3 เป็นต้นมาคืนค่าผลลัพธ์ที่ได้จากค่า log เลขฐาน 2 เหมือนใช้คำสั่ง log(x, 2)
- math.log10(x)คืนค่าผลลัพธ์ที่ได้จากค่า log เลขฐาน 10 เหมือนใช้คำสั่ง log(x, 10)
- math.pow(x, y)คืนค่าผลลัพธ์ที่ได้จากการที่ x ยกกำลัง y
- math.sqrt(x)คืนค่ารากที่สองของ x
ฟังก์ชันตรีโกณมิติ
- math.acos(x)คืนค่าอาร์กโคไซน์ (arccos หรือ cos-1) ของ x ในเรเดียน
- math.asin(x)คืนค่า arc sine ของ x ในเรเดียน
- math.atan(x)คืนค่า arc tan ของ x ในเรเดียน
- math.atan2(y, x)คืนค่า atan(y / x) ของ x ในเรเดียน
- math.cos(x)คืนค่า cosine ของ x ในเรเดียน
- math.hypot(x, y)คืนค่าการคำนวณบรรทัดฐานแบบยุคลิด sqrt (x * x + y * y) นี้เป็นความยาวของเวกเตอร์จากแหล่งกำเนิดไปยังจุด (x, y)
- math.sin(x)คืนค่า sin ของ x ในเรเดียน
- math.tan(x)คืนค่า sin ของ x ในเรเดียน
Angular conversion
- math.degrees(x)แปลงมุม x จากเรเดียนให้เป็นองศา
- math.radians(x)แปลงมุม x จากองศาให้เป็นเรเดียน
>>> import math
>>> math.radians(180)
3.141592653589793
>>> math.degrees(3.141592653589793)
180.0
Hyperbolic functions
- math.acosh(x) คืนค่าส่วนกลับ hyperbolic cosine ของ x
- math.asinh(x) คืนค่าส่วนกลับ hyperbolic sine ของ x
- math.atanh(x) คืนค่าส่วนกลับ hyperbolic tangent ของ x
- math.cosh(x) คืนค่า hyperbolic cosine ของ x
- math.sinh(x) คืนค่า hyperbolic sine ของ x
- math.tanh(x) คืนค่า hyperbolic tangent ของ x
ค่าคงตัว
- math.pi ค่าคงที่ทางคณิตศาสตร์ของ π = 3.141592...
- math.e ค่าคงที่ทางคณิตศาสตร์ของ e = 2.718281...
บทที่ 17 Type hints ใน Python
หลังจากที่ Python 3.5 ได้เปิดตัวออกมา ได้มีไวยากรณ์หนึ่งที่เพิ่มเข้ามาตั้งแต่ Python 3.5 นั่นคือ Type hints
Type hints คือ การบอกว่าฟังก์ชันหรือ method ต้องการตัวแปรชนิดใด และคืนค่าออกมาเป็นชนิดข้อมูลชนิดใด ช่วยให้เราสามารถเขียนโค้ดมีคุณภาพมากยิ่งขึ้น
ในภาษา Python ได้มีการเพิ่มการรองรับ type hints มาตั้งแต่ Python 3.5 เป็นต้นมา
สำหรับ Python ที่ต่ำกว่า 3.5 สามารถใช้งาน type hints โดย backport ด้วยคำสั่ง
pip install typing
การใช้งาน type hints
สมมติว่าต้องการสร้างฟังก์ชันบวกเลขด้วยข้อมูลชนิด int โดยที่ไม่ใช้ type hints
def plus(a,b): return a+b
ผลลัพธ์
plus("9", "1")
"91"
จะเห็นได้ว่า หากเป็น str บวกกันจะรวมข้อความกัน ทั้งที่เราอยากให้เฉพาะข้อมูล int เท่านั้นที่บวกกันได้ เพราะเราไม่ได้กำหนด method ว่าต้องการตัวแปรชนิดใด
เมื่อลองมาใช้ Type hints
การใช้ Type hints ทำได้ง่าย ๆ เพียงแค่เติม : หลังพารามิเตอร์แต่ละตัวแล้วใส่ชนิดข้อมูลที่ต้องการลงไป และใส่ -> ตามด้วยชนิดข้อมูลที่จะคืนค่าหลัง ) ดังนี้
def plus(a: int,b: int)->int: return a+b
หากลองรันจะรันได้ปกติ
plus("9", "1")
"91"
แต่หากนำไปใช้ใน IDE อย่าง PyCharm จะมีการแจ้งเตือนหากใช้ข้อมูลผิดชนิดข้อมูลที่กำหนดไว้
บทที่ 18 Recursive Function กับ Python
รีเคอร์ซีฟฟังก์ชัน (recursive functions) คือ ฟังก์ชันที่เรียกตัวเอง โดยแต่ละครั้งที่ฟังก์ชันถูกเรียก จะเกิดตัวแปรอัตโนมัติชุดใหม่ที่ไม่เกี่ยวข้องกับชุดเดิม จึงเรียกอีกชื่อหนึ่งว่า "ฟังก์ชันแบบเวียนเกิด"
หลักการรีเคอร์ซีฟฟังก์ชัน คือ เขียนโปรแกรมวนซ้ำเพื่อลดปัญหาของโปรแกรมที่ซับซ้อน
ขั้นตอนการเขียนรีเคอร์ซีฟฟังก์ชัน
- ทำความเข้าใจโจทย์
- หาจุดวนกลับ โดยจะหาเมื่อการวนกลับยุติลงแล้วส่งค่ากลับไปคืนจุดที่เรียก
- หาขั้นตอนที่ต้องเรียกซ้ำ
รูปแบบทั่วไปของรีเคอร์ซีฟฟังก์ชันมีรูปแบบดังนี้
def ฟังกชัน(พารามิเตอร์):
if < เงื่อนไขที่ผลให้ยุติการเรียกซ้ำ (จุดวกกลับ หรือ base case) >:
ส่งคำตอบคืน
else:
แยกปัญหาเป็นประเด็นย่อย ด้วยการเรียกซ้ำ (Recursive)
ข้อควรระวัง : ในการเขียนโปรแกรมด้วยรีเคอร์ซีฟฟังก์ชันต้องรอบคอบ และรีเคอร์ซีฟฟังก์ชันจำเป็นจะต้องมี if statement เพื่อตัดสินใจว่าควรเรียกตัวเองต่อไปหรือไม่
ตัวอย่างเช่น โปรแกรม Python หาแฟกทอเรียลได้
โดยนิยามของแฟกทอเรียฟังก์ชัน คือ
n! = n*(n-1)! if n < 0
เอานำมาหา 5!
5! = 5*4*3*2*1 = 5*4!
4! = 4*3*2*1 = 4*3!
3! = 3*2*1 = 3*2!
2! = 2*1 = 2*1!
1! = 1 = 1
0! = 1 นี่คือ จุดวกกลับ หรือ base case
สามารถเขียนโปรแกรม Python หาแฟกทอเรียลในรีเคอร์ซีฟฟังก์ชันได้ดังนี้
def factorial(num):
if num==0:
return 1
else:
return num * factorial(num-1)
print(factorial(3))
print(factorial(5))
ผลลัพธ์
6
120
ในทางกลับกัน เราสามารถนำรีเคอร์ซีฟฟังก์ชันมาเขียนเป็นฟังก์ชันลูปได้เช่นกัน
def factorial(num):
i=num
while num!=0:
if num!=1:
i=i*(num-1)
num-=1
return i
print(factorial(3))
print(factorial(5))
ผลลัพธ์
6
120
เมื่อเปรียบเทียบระหว่างแบบรีเคอร์ซีฟฟังก์ชันกับแบบฟังก์ชันลูป
จะเห็นได้ว่า รีเคอร์ซีฟฟังก์ชันลดความซับซ้อนของโปรแกรมและเข้าใจง่ายขึ้น
ข้อควรระวังการใช้งานรีเคอร์ซีฟฟังก์ชัน
คือ ปัญหา Stack Overflow และในสถานการณ์ทั่วไป รีเคอร์ซีฟฟังก์ชันทำงานช้ากว่าลูป เพราะต้องเสียเวลาสร้าง Call Stack ในทุกครั้งที่เรียก
เมื่อนำรีเคอร์ซีฟฟังก์ชันไปสร้างเป็นไฟล์
factorial1.py
แล้วนำฟังก์ชันลูปไปสร้างเป็นไฟล์
factorial2.py
ทำการทดสอบด้วยโค้ด
python -m profile ไฟล์.py
ผลลัพธ์
ไฟล์ factorial1.py
6
120
16 function calls (8 primitive calls) in 0.007 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 :0(exec)
2 0.000 0.000 0.000 0.000 :0(print)
1 0.007 0.007 0.007 0.007 :0(setprofile)
1 0.000 0.000 0.000 0.000 factorial1.py:1(<module>)
10/2 0.000 0.000 0.000 0.000 factorial1.py:1(factorial)
1 0.000 0.000 0.007 0.007 profile:0(<code object <module> at 0x7f1448cc08a0, file "factorial1.py", line 1>)
0 0.000 0.000 profile:0(profiler)
ไฟล์ factorial2.py
6
120
8 function calls in 0.005 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 :0(exec)
2 0.000 0.000 0.000 0.000 :0(print)
1 0.005 0.005 0.005 0.005 :0(setprofile)
1 0.000 0.000 0.000 0.000 factorial2.py:1(<module>)
2 0.000 0.000 0.000 0.000 factorial2.py:1(factorial)
1 0.000 0.000 0.005 0.005 profile:0(<code object <module> at 0x7f55e91108a0, file "factorial2.py", line 1>)
0 0.000 0.000 profile:0(profiler)
จะเห็นได้ว่า ในภาษา Python รีเคอร์ซีฟฟังก์ชันทำงานช้ากว่าฟังก์ชันลูป และมีการเรียกใช้ function calls มากกว่า
บทที่ 19 ติดตั้งโมดูล python ด้วย pip
pip เป็นคำสั่งสำหรับใช้ติดตั้งโมดูล Python ที่อยู่บน pypi.org
PyPI ย่อมาจาก Python Package Index เป็นแหล่งรวมชุดคำสั่งของภาษา Python โดยทำงานร่วมกับคำสั่ง pip สำหรับติดตั้งชุดคำสั่งใน Python
ผู้ใช้งานสามารถค้นหาไลบรารีหรือโปรแกรมภาษา Python ได้ง่าย ๆ จากช่องค้นหา และมีรายละเอียดการคำสั่งติดตั้ง กับประวัติรุ่นไลบรารีที่ต้องการ
ส่วนสำหรับนักพัฒนาจะนำชุดคำสั่งภาษา Python ที่เขียน
ไม่ว่าจะเป็นไลบรารีหรือโปรแกรมต่าง ๆ ที่ใช้ร่วมกับภาษา Python
ขึ้นไปฝากไว้กับ PyPI โดย PyPI มีอยู่ 2 ส่วนด้วยกัน
- Test PyPI
Test PyPI ตั้งอยู่ที่ https://test.pypi.org/ ให้นักพัฒนาสามารถอัพโหลดไลบรารีหรือโปรแกรมภาษา Python ของตัวเองขึ้นทดสอบก่อนนำไปอัพโหลดขึ้น PyPI โดยการติดตั้งไลบรารีจาก Test PyPI จะใช้คำสั่งที่ยาวขึ้นมาหน่อยดังนี้
pip install -i https://test.pypi.org/simple/ ชื่อไลบรารี
- PyPI
PyPI ตั้งอยู่ที่ https://pypi.org/ ผู้ใช้งานสามารถติดตั้งไลบรารีหรือโปรแกรมโปรแกรมภาษา Python ได้ หากว่านักพัฒนาอัพโหลดไลบรารีหรือโปรแกรมของตัวเองขึ้น PyPI แล้ว
เพียงแค่ใช้คำสั่ง
pip install ไลบรารี
คำสั่งที่ควรรู้
- pip install package - เป็นคำสั่งติดตั้งโมดูล
- pip uninstall package - เป็นคำสั่งถอนการติดตั้งโมดูล (ต้องยืนยันก่อนถอนด้วย)
บทที่ 19 เขียนไฟล์-อ่านไฟล์ด้วยภาษา Python
บทนี้เราจะมาเรียนรู้กับการอ่าน เขียน ไฟล์บนภาษา Python
เขียนและอ่านข้อมูลจากเท็กซ์ไฟล์บน Python 3
เท็กซ์ไฟล์ (Text Files) เป็นอีกหนึ่งรูปแบบในการบันทึกข้อมูล
มาเริ่มต้นที่การเปิดไฟล์กัน
รูปแบบการเปิดไฟล์
ตัวแปร = open(ชื่อไฟล์, โหมดการเปิดไฟล์)
โหมดการเปิดไฟล์ที่ใช้กับเท็กซ์ไฟล์
r คือ อ่านเพียงอย่างเดียว
w คือ เขียนเพียงอย่างเดียว ถ้ายังไม่มีไฟล์ จะสร้างไฟล์ใหม่
w+ คือ เขียน สร้างไฟล์ใหม่ หรือแทนที่ข้อมูลเดิม
a คือ เปิดไฟล์แล้วเขียนข้อมูลต่อท้ายข้อมูลเดิม
r+ คือ เปิดไฟล์เพื่ออ่านหรือเขียนข้อมูลทับไฟล์
ตัวอย่าง
a = open('work1.txt', 'w')
เขียนข้อมูลลงเท็กซ์ไฟล์
สำหรับโหมดเขียนข้อมูลลงไฟล์นี้ ห้ามใช้ r เพราะโหมดนี้ไม่สามารถเขียนข้อมูลลงไฟล์ได้
มีรูปแบบดังนี้
ตัวแปรที่เปิดไฟล์.write(ข้อความหรือตัวแปร)
ตัวอย่าง
a = open('work1.txt', 'w')
a.write('This is a testn')
ผลลัพธ์
work1.txt
This is a testn
เขียนข้อมูลรายการ (List) ลงเท็กซ์ไฟล์ทีละบรรทัด
มีรูปแบบดังนี้
ตัวแปรที่เปิดไฟล์.writelines(List ข้อมูล)
อ่านข้อมูลจากเท็กซ์ไฟล์
มีรูปแบบดังนี้
ตัวแปรที่เปิดไฟล์.read()
ตัวอย่าง
a = open('work1.txt', 'r')
a.read()
ผลลัพธ์
This is a testn
หรือจะใช้ with
with open('work1.txt', 'r') as f:
read_data = f.read()
print(read_data)
ผลลัพธ์
This is a testn
อ่านข้อมูลจากเท็กซ์ไฟล์ทีละบรรทัด
ในการอ่านข้อมูลทีละบรรทัดนี้ Python ได้แบ่งบรรทัดโดยอ้างอิง \n
เวลาเขียนข้อมูลลงไฟล์ หากต้องการขึ้นบรรทัดใหม่ให้ใส่ \n
ตามหลังเข้าไปด้วย
มีรูปแบบดังนี้
ตัวแปรที่เปิดไฟล์.readline()
ตัวอย่าง
a = open('work2.txt', 'r')
a.readline()
ปิดไฟล์หลังเรียกใช้งาน
เมื่อเรียกใช้งานไฟล์เสร็จ ควรที่จะปิดไฟล์เพื่อคืนทรัพยากรให้กับระบบ
มีรูปแบบการใช้งานดังนี้
ตัวแปรที่เปิดไฟล์.close
ตัวอย่าง
a.close()
ฟังก์ชันเพิ่มเติม
- ตัวแปรที่เปิดไฟล์.name - จะคืนค่าชื่อไฟล์ที่เปิดอยู่
- ตัวแปรที่เปิดไฟล์.mode - จะคืนค่าโหมดการเปิดไฟล์ เช่น w , r เป็นต้น
อ่าน-เขียนข้อมูลไบนารีไฟล์ในภาษาไพทอน
ไบนารีไฟล์ (binary files) เป็นไฟล์ข้อมูลในรูปแบบเฉพาะของคอมพิวเตอร์ โดยข้อมูลที่เก็บอาจเป็นเลขจำนวนเต็ม ตัวอักษร และอื่น ๆ เป็นต้น
ในภาษาไพทอน มีหลักไวยากรณ์ในการอ่านและเขียนข้อมูลไบนารีไฟล์ในภาษาไพทอนดังนี้
การเปิดไฟล์ไบนารีในภาษาไพทอน
open(ชื่อไฟล์,โหมดการเปิดไฟล์)
โหมดการเปิดไฟล์มีดังนี้
- wb เขียนไบนารีไฟล์หรือสร้างไบนารีไฟล์ใหม่ในกรณีที่ไม่มีไฟล์ที่เรียก
- rb อ่านไบนารีไฟล์
- ab เขียนข้อมูลต่อท้ายข้อมูลที่มีอยู่ในไฟล์
- wb+ เขียนไบนารีไฟล์หรือสร้างไบนารีไฟล์ใหม่ในกรณีที่ไม่มีไฟล์ที่เรียก
- rb+ อ่านไบนารีไฟล์ ถ้าไม่มีไฟล์ให้สร้างไฟล์ใหม่
- ab+ เขียนข้อมูลต่อท้ายข้อมูลที่มีอยู่ในไฟล์ ถ้าไม่มีไฟล์ให้สร้างไฟล์ใหม่
การปิดไฟล์
หลังอ่าน เขียน ไฟล์แล้ว เพื่อคืนความจำให้กับระบบ ต้องทำการปิดไฟล์ โดยใช้คำสั่ง
file.close()
เขียนข้อมูลลงไฟล์
ทบทวนความรู้พื้นฐานเรื่องจำนวนไบต์และบิต MB GB
8 Bit (บิต) = 1 Byte (ไบต์)
1 Byte (ไบต์) = 1 ตัวอักษร
1 KB (กิโลไบต์) = 1024 Byte
1 MB (เมกกะไบต์) = 1024 KB
1 GB (กิกะไบต์) = 1024 MB
การเขียนข้อมูลลงไบนารีไฟล์ในภาษาไพทอน ใช้คำสั่งต่อไปนี้
file.write(ข้อมูลไบต์)
ตัวอย่างการเขียนข้อมูลลงไฟล์
ofile = open("a", 'wb') # wb เขียนไฟล์
ofile.write(b"ok")
ofile.close()
เขียนข้อมูลต่อจากไฟล์เดิม
ใช้โหมดเปิดไฟล์ ab
ตัวอย่าง
ofile = open("a", 'ab') # ab เขียนข้อมูลต่อจากไฟล์เดิม
ofile.write(b"Hi")
ofile.close()
อ่านไฟล์
ใช้คำสั่ง
file.read(ขนาดข้อมูลไบต์ที่อ่าน)
ตัวอย่างการอ่านไฟล์
ofile = open("a", 'rb') # rb อ่านไฟล์
print(ofile.read(2)) # อ่านข้อมูล 2 ไบต์
print(ofile.read(2)) # อ่านข้อมูลอีก 2 ไบต์
ofile.close() # ปิดไฟล์
ผลลัพธ์
b'ok'
b'Hi'
บทที่ 20 สร้างโมดูลพร้อมใช้ให้คอมเครื่องอื่น
หลักการเรียกใช้โมดูลในโฟลเลอร์เดียวกัน
ในการ import เรียกใช้โมดูลในโฟลเลอร์เดียวกัน สามารถทำได้โดยตามตัวอย่างนี้
hello.py
print("Hello")
เราสร้างตัวโมดูลสำหรับเรียกใช้กันในโฟลเลอร์เดียวกันแล้ว สามารถเรียกใช้ได้เลยโดยใช้การ
import ชื่อไฟล์โมดูล
โดยชื่อไฟล์โมดูลไม่ต้องมี .py ตัวอย่างเช่น
show.py
import hello
ผลลัพธ์
Hello
หากเราต้องการให้มีการเรียกใช้คำสั่งที่อยู่ในโมดูล เราต้องสร้างฟังก์ชันขึ้นมารองรับด้วย เมื่อเรียกใช้งาน โดยอ้างอิงจากฟังก์ชันที่อยู่ใน cal.py
test.py
from cal import plue,plueto #เรียกใช้ฟังก์ชันหรือ class จากโมดูล cal
print(plue(5))
print(plueto(5,10))
ผลลัพธ์
10
15
หากเราต้องการทราบคำสั่งที่อยู่ในโมดูล cal ที่เราเขียนขึ้นมา สามารถใช้คำสั่ง dict.keys() ได้ดังนี้
list.py
import cal
print(cal.__dict__.keys())
ผลลัพธ์
dict_keys(['__builtins__', 'plueto', '__name__', '__doc__', 'plue', '__spec__', '__file__', '__loader__', '__cached__', '__package__'])
ในกรณีที่มีคำสั่งในโมดูลที่เราเขียน หากเราต้องการสร้าง main ขึ้นมา (เหมือนภาษา C) โดยจะเรียกใช้งานได้เฉพาะโค้ดนี้เท่านั้น เราสามารถใช้ name == 'main' ได้ตามน
caltwo.py
if __name__ == '__main__':
print("5")
เมื่อเรา import โมดูลเข้ามา
show2.py
import caltwo
ผลลัพธ์
จะพบว่า ไม่มีอะไรขึ้นมาเพราะ show2.py ไม่ใช่โปรแกรมหลัก
ทำไฟล์ติดตั้งโมดูลใน Python
หลังจากที่ได้พาผู้อ่านไปเรียกใช้โมดูลในโฟลเลอร์เดียวกันมาแล้ว ต่อไปเราจะทำให้สามารถเรียกใช้งานโมดูลได้โดยที่ไม่ต้องเป็นต้องอยู่โฟลเลอร์เดียวกันกับไฟล์โมดูล เหมือนเราเรียกใช้โมดูล lxml , pyside โดยมีตัวอย่างต่อไปนี้
from distutils.core import setup #ระบบติดตั้งโมดูล
setup(name='Distutils', #ชื่อโมดูล
version='1.0', #เวชั่นของโมดูล
description='Python Distribution Utilities', #รายละเอียดโมดูล
author='Greg Ward', #ชื่อผู้สร้างโมดูล
author_email='[email protected]', #อีเมลล์ติดต่อผู้สร้างโมดูล
url='https://www.python.org/sigs/distutils-sig/', #หน้าเว็บโมดูล
packages=['distutils'], #packages ที่ถูกรวมด้วย โดย packages คือโฟลเลอร์ที่ใช้เก็บไฟล์โมดูลของเรา
)
ต่อไปลงมือทำโมดูลกัน โดยนำไฟล์ cal.py มาทำเป็นโมดูล โดยมีโค้ดดังต่อไป
cal.py
def plue(arg):
return arg+arg
def plueto(a,b):
return a+b
สร้างโฟลเลอร์ใหม่ แล้วเก็บไฟล์ cal.py ไว้ในโฟลเลอร์ packages ที่เราสร้างขึ้นมาเพิ่มชื่อว่า cal
รายละเอียดระบบไฟล์ของโมดูล
โฟลเลอร์หลัก\
cal\
__init__.py
cal.py
setup.py
และผมสร้างไฟล์ init.py เป็นไฟล์สำหรับกำหนดค่าการเรียกใช้คำสั่งในโมดูล
init.py
from cal import * # หมายถึงเรียกใช้โมดูลจากไฟล์ cal.py ที่อยู่ในโฟลเลอร์เดียวกัน โดยดึงคำสั่งทุกคำสั่งมา
เสร็จแล้วทำไฟล์ setup.py ซึ่งเป็นไฟล์ระบบล์ติดตั้งโมดูล โดยไว้ในโฟลเลอร์หลัก
โดยโค้ดไฟล์ setup.py มีดังนี้
setup.py
from distutils.core import setup
setup(
name='cal',
version='0.0.1',
author='Wannaphong',
packages=['cal'],
url='https://python3.wannaphong.com',
license='MIT', #license
description='Test',
include_package_data=True,
)
แล้วเปิดคอมมานด์ไลน์ทำการติดตั้งโมดูลที่ผมทำขึ้นมาเอง
python setup.py install
เสร็จแล้วลองรันใช้งานใน Python IDE ดู
from cal import cal
อ่านรายละเอียดของการทำไฟล์ติดตั้งโมดูลใน Python ได้ที่
https://docs.python.org/3/distutils/setupscript.html
ส่งโมดูล Python ขึ้นไปยัง PyPI
PyPI คืออะไร
PyPI ย่อมาจาก Python Package Index เป็นคลังโปรแกรมและไลบรารีเสริมของ Python โดย Python เวชั่นใหม่ ๆ สามารถสั่งติดตั้งโมดูลจาก PyPI
ได้ด้วยคำสั่ง pip หรือคำสั่ง easy_install ได้
อย่างแรกให้ผู้อ่านสมัคร PyPI account สำหรับส่งโมดูลขึ้นไปยัง PyPI ได้ที่
https://pypi.python.org/pypi?%3Aaction=register_form
โดยต้องใช้ PGP Key ID ด้วย อ่านวิธีการทำ PGP Key ID ได้ที่ https://www.thaicert.or.th/papers/general/2013/pa2013ge002.html
หลังจากที่ยืนยันอีเมลเสร็จแล้ว ให้ผู้อ่านเตรียมความพร้อมของไฟล์เหล่านี้
- ไฟล์ setup.py
ต้องมีรายละเอียดดังนี้
from distutils.core import setup
def read(*paths):
"""สำหรับใช้ดึงข้อมูลจากไฟล์มาแสดง"""
with open(os.path.join(*paths), 'r') as f:
return f.read()
setup(
name = 'mypackage', # ชื่อโมดูล
packages = ['mypackage'], # โฟลเลอร์ไลบรารี
version = '0.1', #เวอร์ชั่นโมดูล
description = 'รายละเอียด',
long_description=(read('README.txt')), #รายละเอียดการใช้งานโมดูล
author = '', # ชื่อนักพัฒนา
author_email = '', # อีเมลนักพัฒนา
url = '', # ลิงค์หน้าหลักโมดูล
#download_url = '', # ลิงค์ดาวน์โหลด
keywords = ['testing', 'logging', 'example'], # คำค้น
classifiers=[
'Development Status :: 5 - Production/Stable',
'Intended Audience :: Developers',
'Natural Language :: English',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 3',
'Topic :: Scientific/Engineering',] # รายละเอียดเบื้องต้นของโมดูล
],
)
-
ไฟล์โมดูล
-
ไฟล์ README.txt
ไฟล์ README.txt นี้เป็นรายละเอียดการใช้งานโมดูลของเรา เหมือนที่เราเห็นทั่วไปตามหน้าเพจของ PyPI
สามารถสร้างไฟล์โดยอาคัยเครื่องมือจากเว็บ http://rst.ninjs.org
- ไฟล์ LICENSE.txt เป็นไฟล์ที่ระบุลิขสิทธิ์การใช้งานโมดูลของเรา เช่น ผมเลือก MIT สามารถเข้าไปที่ http://opensource.org/licenses/MIT
เพื่อก็อบ LICENSE มาวางไว้ที่ LICENSE.txt ได้เลย
แนะนำให้ใช้ภาษาอังกฤษทั้งหมด
เปิดคอมมานด์ไลน์เข้าไปยังโฟลเลอร์ที่เก็บไฟล์ setup.py ของโมดูล แล้วใช้คำสั่ง
python setup.py register
>python setup.py register
running register
running check
We need to know who you are, so please choose either:
1. use your existing login,
2. register as a new user,
3. have the server generate a new password for you (and email it to you), or
4. quit
Your selection [default 1]:
1
Username:
Password:
Registering pytemperature to https://pypi.python.org/pypi
Server response (200): OK
I can store your PyPI login so future submissions will be faster.
(the login will be stored in C:\Users\วรรณพงษ์\.pypirc)
Save your login (y/N)?y
แล้วใช้คำสั่ง
python setup.py sdist
จะได้โฟลเลอร์ dist โดยข้างในจะเก็บไฟล์บีบอัดโมดูลไว้
เสร็จแล้วทำการติดตั้งโมดูล twine เป็นโมดูลที่ช่วยอัพโหลดไฟล์ขึ้น PyPI
pip install twine
จากนั้นทำการอัพโหลดไฟล์โมดูลขึ้น pypi
twine upload dist/*
หลังจากนี้สามารถติดตั้งโมดูลของคุณได้จากคำสั่ง
pip install ชื่อโมดูลของคุณ
บทที่ 21 เริ่มต้นกับ NumPy
โมดูล NumPy เป็นโมดูลส่วนเสริมของภาษา Python สำหรับใช้คำนวณทางคณิตศาสตร์และวิทยาศาสตร์ โดยมีคำสั่งพร้อมใช้งานจำนวนมากมาย และโมดูลนี้สามารถสร้างข้อมูลชนิดอาร์เรย์ (ที่ภาษา Python ไม่มี) และคำนวณอาร์เรย์ของตัวเลข สตริงและวัตถุได้
โมดูล NumPy รองรับทั้ง Python 2 , Python 3 และใช้ License: BSD
การติดตั้งโมดูล NumPy
สามารถติดตั้งได้โดยใช้คำสั่ง pip: (ตรวจสอบการตั้งค่า c compiler กับ Python ให้เรียบร้อยก่อนติดตั้งครับ)
$ pip install numpy
สำหรับผู้ใช้ Windows สามารถโหลดไฟล์ .whl มาติดตั้งได้จาก http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy
การใช้งาน NumPy
ในการใช้งานต้อง import NumPy เข้ามา
import numpy as np
ข้อมูลชนิดอาร์เรย์กับ NumPy
อย่างที่เรารู้กัน ภาษา Python ไม่มีข้อมูลชนิดอาร์เรย์ สามารถใช้ list แทนได้ แต่หากใช้โมดูล NumPy เราจะสามารถใช้ข้อมูลชนิดอาร์เรย์ได้ดังนี้
>>> x = np.array([1,2,3])
>>> x
array([1, 2, 3])
ต่อไปเราจะมาสร้าง array เก็บข้อมูลระหว่าง 0 - 10 กัน
>>> x = np.arange(10)
>>> x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
เมื่อเรานำ x ที่เก็บข้อมูลอาร์เรย์ของตัวเลขไว้ มาบวกกับ 10 และนำมาบวกกับตัวมันเอง
>>> x = np.arange(10)
>>> x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> y = x + 10 # มาบวกกับ 10
>>> y
array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
>>> z = x + x # บวกกับตัวมันเอง
>>> z
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
การเรียกใช้ข้อมูลจากอาร์เรย์ และแทนที่ข้อมูลในอาร์เรย์ได้ดังนี้
>>> x = np.arange(10)
>>> x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> x[1]
1
>>> x[8]
8
>>> x[9]
9
>>> x[0] = 99
>>> x
array([99, 1, 2, 3, 4, 5, 6, 7, 8, 9])
หาค่าสูงสุด ต่ำสุด
x = np.arange(5) + 1
x.mean() # ค่าเฉลี่ยเลขคณิต คือ 3.0
x.max() # ค่ามากสุดือ 5
x.min() # ค่าน้อยสุดคือ 1
x.std() # คำนวณส่วนเบี่ยงเบนมาตรฐาน คือ 1.414
ต่อไปเราจะย้ายข้อมูลอาร์เรย์จากแถวเดียว (อาร์เรย์ 1 มิติ) ไปเป็น 2 แถว (อาร์เรย์ 2 มิติ) ได้ โดยแถวและหลักต้องสมดุลกัน เป็นเมทริกซ์ สามารถใช้คำสั่ง reshape() ได้ดังนี้
>>> x = np.arange(10)
>>> y = x.reshape(2,5) # สร้างเมทริกซ์ 2 * 5
>>> y
array([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
หากเรากำหนดค่าเมทริกซ์ไม่สมดุลกัน จะเกิดข้อผิดพลาดขึ้น เนื่องจากค่าเมทริกซ์ไม่สมดุล
>>> x = np.arange(10)
>>> y = x.reshape(2,2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: total size of new array must be unchanged
เมทริกซ์
>>> A = np.matrix('1.0 2.0; 3.0 4.0')
>>> A
[[ 1. 2.]
[ 3. 4.]]
>>> type(A) # ตรวจสอบชนิดของข้อมูลตัวแปร A
<class 'numpy.matrixlib.defmatrix.matrix'>
>>> A.T # เมทริกซ์สลับเปลี่ยน (transpose)
[[ 1. 3.]
[ 2. 4.]]
>>> X = np.matrix('5.0 7.0')
>>> Y = X.T
>>> Y
[[5.]
[7.]]
>>> print(A*Y) # การคูณเมทริกซ์
[[19.]
[43.]]
>>> print(A.I) # อินเวอร์สของเมทริกซ์
[[-2. 1. ]
[ 1.5 -0.5]]
อ่านเอกสารการใช้งาน NumPy เพิ่มเติมได้ที่ http://wiki.scipy.org/Tentative_NumPy_Tutorial
บทที่ 22 เชื่อมต่อฐานข้อมูล MySQL ด้วยภาษาไพทอน
ในการเชื่อมต่อฐานข้อมูล MySQL ด้วยภาษาไพทอนสามารถใช้โมดูล mysql-connector ในการเชื่อมต่อฐานข้อมูล MySQLได้
โมดูล mysql-connector-python เป็น MySQL driver ที่เขียนในภาษาไพทอนทั้งหมด
(ไม่มีปัญหาเรื่องความเข้ากันได้) พร้อมรองรับ DB API v2.0 specification
(PEP-249) พัฒนาโดย Oracle
ใช้ License: GNU GPLv2
รองรับทั้ง Python 2 และ Python 3
สามารถติดตั้งได้โดยใช้คำสั่ง pip :
pip install mysql-connector-python
เอกสารการใช้งาน
ในการเรียกใช้งานโมดูลนี้ต้อง
import mysql.connector
เข้ามาทุกครั้ง
การเชื่อมต่อกับฐานข้อมูล
import mysql.connector
# user: scott
# password: tiger
# host: 127.0.0.1
# database: employees
cnx = mysql.connector.connect(user='scott', password='tiger',host='127.0.0.1',database='employees')
cnx.close()
หากต้องการจัดการข้อผิดพลาดสามารถใช้ try except เข้ามาช่วยได้ดังนี้
แต่หากไม่ต้องการกรอกข้อมูลลงใน argument สามารถใช้ข้อมูลชนิด dictionary ช่วยในการเชื่อมต่อกับ
ฐานข้อมูลได้ดังนี้
import mysql.connector
config = {
'user': 'scott',
'password': 'tiger',
'host': '127.0.0.1',
'database': 'employees',
'raise_on_warnings': True,
}
cnx = mysql.connector.connect(**config)
cnx.close()
การใช้คำสั่ง SQL กับฐานข้อมูล MySQL ในภาษาไพทอน
เราสามารถใช้คำสั่ง SQL เพื่อสร้างฐานข้อมูล สร้างตาราง เพิ่มข้อมูลลงตาราง ปรับเปลี่ยนข้อมูล และลบข้อมูลได้ โดยใช้คำสั่ง
cursor.execute(โค้ด SQl)
เมื่อใช้งานคำสั่งเสร็จ ต้องใช้คำสั่ง
commit()
เพื่อบันทึกข้อมูลเสมอ
ตัวอย่างเช่น
ใช้คำสั่งสร้างตาราง
import mysql.connector
from mysql.connector import errorcode
con = mysql.connector.connect(user='scott', password='tiger',host='127.0.0.1',database='employees')cursor = con.cursor()
sql = '''CREATE TABLE foo (
bar VARCHAR(50) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
'''
cursor.execute(sql)
con.commit()
con.close()
การเพิ่มข้อมูล
import mysql.connector
con = mysql.connector.connect(user='scott', password='tiger',host='127.0.0.1', database='employees')
add_db = "insert into foo(bar) values('Tontan')"
cursor = con.cursor()
ccursor.execute(add_db)
con.commit()
con.close()
การดึงข้อมูลมาใช้งาน
สามารถใช้คำสั่ง
cursor.fetchall()
หลังคำสั่ง
cursor.execute(โค้ด SQl)
โดยโค้ด SQl ต้องเป็นคำสั่ง query ข้อมูลตามหลักภาษา SQL
ตัวอย่าง
import mysql.connector
con = mysql.connector.connect(user='scott', password='tiger',host='127.0.0.1',database='employees')
cursor = con.cursor()
sql = ("select bar from foo")
cursor.execute(sql)
data = cursor.fetchall() # ได้ผลลัพธ์ออกมาในรูป list
print(data[0])
ผลลัพธ์
Tontan
เอกสารการใช้งาน http://dev.mysql.com/doc/connector-python/en/
บทที่ 23 เชื่อมต่อกับฐานข้อมูล SQLite ใน Python 3
การเรียกใช้ฐานข้อมูล SQLite ใน Python 3 เราต้องเรียกใช้โมดูลมาตรฐาน sqlite3 ด้วยการ import เข้ามา
import sqlite3
ในการเชื่อมต่อฐานข้อมูลเราจะใช้คำสั่ง
sqlite3.connect(database [,timeout ,other optional arguments])
หากต้องการ cursor ฐานข้อมูลใช้คำสั่ง
connection.cursor([cursorClass])
รันคำสั่ง SQL กับฐานข้อมูล SQLite ใช้คำสั่ง
cursor.execute(คำสั่ง sql [, optional parameters])
fetchall ใช้คำสั่ง
cursor.fetchall()
หลังเพิ่มลบแก้ไข ให้
connection.commit()
ปิดการเชื่อมต่อกับฐานข้อมูล SQLite
connection.close()
เรามาเริ่มลองเขียนโปรแกรมกันครับ
เปิดฐานข้อมูล SQLite ใน Python 3
#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('1.db') # สร้างไฟล์ 1.db เป็นไฟล์ฐานข้อมูล
print("เปิดฐานข้อมูลสำเร็จ")
ผลลัพธ์
เปิดฐานข้อมูลสำเร็จ
และจะได้ไฟล์ฐานข้อมูล 1.db
สร้างตารางฐานข้อมูล SQLite ใน Python 3
#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('1.db')
print("เปิดฐานข้อมูลสำเร็จ")
conn.execute('''CREATE TABLE SAVEONE
(ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
MESSENGE CHAR(150));''')
print("สร้างตารางสำเร็จ :D ")
conn.close()
ผลลัพธ์
เปิดฐานข้อมูลสำเร็จ
เพิ่มข้อมูล INSERT ลงไปฐานข้อมูล SQLite ใน Python 3
#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('1.db')
print("เปิดฐานข้อมูลสำเร็จ")
conn.execute("INSERT INTO SAVEONE (ID,NAME,MESSENGE ) \
VALUES (1, 'ต้นตาล','ทดสอบระบบ :D ')")
conn.execute("INSERT INTO SAVEONE (ID,NAME,MESSENGE ) \
VALUES (2, 'วรรณพงษ์','ทดสอบระบบ ครับ :D ')")
conn.commit()
print("เพิ่มระเบียงข้อมูลสำเร็จ")
conn.close()
ผลลัพธ์
เปิดฐานข้อมูลสำเร็จ
อ่านข้อมูลด้วยการเลือกตาราง (SELECT) กับฐานข้อมูล SQLite ใน Python 3
#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('1.db')
print("เปิดฐานข้อมูลสำเร็จ")
cursor = conn.execute("SELECT ID,NAME,MESSENGE from SAVEONE")
for row in cursor:
print("ID = ", row[0])
print("NAME = ", row[1])
print("MESSENGE = ", row[2])
print("ดำเนินการเสร็จสิ้น")
conn.close()
ผลลัพธ์
เปิดฐานข้อมูลสำเร็จ
fetchall ฐานข้อมูล
import sqlite3
import sys
conn = sqlite3.connect('1.db')
with conn:
cur = conn.cursor()
cur.execute("SELECT * FROM SAVEONE")
rows = cur.fetchall()
for row in rows:
print(row)
input()
ผลลัพธ์
(1, 'ต้นตาล','ทดสอบระบบ 😄 ')
อัปเดรตข้อมูลใหม่โดยใช้คำสั่ง UPDATE กับฐานข้อมูล SQLite ใน Python 3
#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('1.db')
print("เปิดฐานข้อมูลสำเร็จ")
conn.execute("UPDATE SAVEONE set NAME = 'HI' where ID=1")
conn.commit()
print("แถวที่อัปเดรตข้อมูลใหม่ :", conn.total_changes)
cursor = conn.execute("SELECT ID,NAME,MESSENGE from SAVEONE")
for row in cursor:
print("ID = ", row[0])
print("NAME = ", row[1])
print("MESSENGE = ", row[2])
print("ดำเนินการเสร็จสิ้น")
conn.close()
input()
ผลลัพธ์
เปิดฐานข้อมูลสำเร็จ
ลบข้อมูล (DELETE) กับฐานข้อมูล SQLite ใน Python 3
#!/usr/bin/python
import sqlite3
conn = sqlite3.connect('1.db')
print("เปิดฐานข้อมูลสำเร็จ")
conn.execute("DELETE from SAVEONE where ID=2;")
conn.commit()
print("แถวที่ถูกลบ :", conn.total_changes)
cursor = conn.execute("SELECT ID,NAME,MESSENGE from SAVEONE")
for row in cursor:
print("ID = ", row[0])
print("NAME = ", row[1])
print("MESSENGE = ", row[2])
print("ดำเนินการเสร็จสิ้น")
conn.close()
input()
ผลลัพธ์
เปิดฐานข้อมูลสำเร็จ
อ่านรายละเอียดเพิ่มเติมได้ที่ https://docs.python.org/3/library/sqlite3.html
บทที่ 23 เขียนโปรแกรมเครือข่าย Socket ใน Python
Socket ในความหมายภาษาไทยแบบง่าย ๆ หมายถึง
เต้ารับที่สามาเอาอุปกรณ์มาเชื่อมต่อกันได้ เหมือนเต้ารับของปลั๊กไฟ
ในการเขียนโปรแกรม Socket คือ การสื่อสารระหว่างโปรแกรมบนเครือข่าย
ในการเขียนโปรแกรมเชื่อมต่อการสื่อสารนั้นเราต้องใช้ Socket API
โดยต้องระบุถึงโปรแกรมผ่าน Port Number
และที่อยู่ของเครื่องอีกเครื่องหนึ่งบนเครือข่ายด้วย IP Address
สรุป
Socket Address = IP Address + Port Number
ในการเขียนโปรแกรมในปัจจุบัน ภาษาคอมพิวเตอร์ต่าง ๆ ได้รองรับ Socket
กันไปนานแล้ว เช่น Java , Python , C/C++ เป็นต้น การใช้งาน Socket
จึงไม่ได้จำกัดแค่ภาษาใดภาษาหนึ่ง
ในการเขียนโปรแกรมภาษา Python ได้รวม Socket API เข้ามาตั้งแต่ต้นแล้ว เวลาเรียกใช้งานต้อง
import socket
เข้ามาในโค้ดโปรแกรม
รายละเอียดเบื้องต้นของโมดูล Socket ใน Python :
- socket.listen() – listen สำหรับการเชื่อมต่อขาเข้า
- socket.accept() – ยอมรับการเชื่อมต่อขาเข้า
- socket.recv() – ส่งกลับข้อมูลที่เข้ามาเป็น string
- socket.send() – ส่งข้อมูลไปยังไคลเอนต์ socket
- socket.close() – ปิดซ็อกเก็ต
มาลองเขียนโปรแกรมเครือข่าย Socket ส่งข้อมูลข้ามเครือข่ายกัน
ในการรับส่งข้อมูล ต้องมีผู้ส่งสาร สื่อ และผู้รับสาร โดยส่ง และรับข้อมูล โดย TCP ใน Python
โค้ด client.py
import socket
TCP_IP = "127.0.0.1" # ที่อยู่ ip
TCP_PORT = 8081 # port
BUFFER_SIZE = 1024
MESSAGE = "Hello, World!" # ข้อความที่จะส่ง
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP,TCP_PORT)) #เชื่อมต่อ
s.send(MESSAGE.encode('utf-8')) #ส่งข้อมูลโดยก่อนส่งได้เข้ารหัสตัวอักษรเป็น utf-8
data = s.recv(BUFFER_SIZE) #ดึงผลลัพธ์การส่งข้อมูล
s.close() #จบการเชื่อมต่อ
print("received data:", data) #แสดงผลลัพธ์การส่งข้อมูล
โค้ด server.py
import socket
TCP_IP = "127.0.0.1"
TCP_PORT = 8081
BUFFER_SIZE = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP,TCP_PORT)) #เชื่อมต่อ
s.listen(1)
conn, addr = s.accept() #รอรับข้อมูลที่ส่งมาจาก client.py
print('Connection address:', addr) #แสดงลายละเอียดของ client ที่เชื่อมต่อมา
while 1:
data = conn.recv(BUFFER_SIZE)
if not data: break
print("received data:", data) #แสดงข้อมูลที่ส่งมา
conn.send(data) # echo
conn.close() #จบการเชื่อมต่อ
ในการรัน ต้องรันไฟล์ server.py ก่อนครับ เพราะ server.py เป็นไฟล์เซิร์ฟเวอร์สำหรับรับและส่งข้อมูล แล้วจึงค่อยรัน client.py
ผลลัพธ์
ไฟล์ server.py
Connection address: ('127.0.0.1', 60447)
received data: b'Hello, World!'
ไฟล์ client.py
received data: b'Hello, World!'
จากโปรแกรมข้างบนจะพบว่า เราได้กำหนดค่า IP Address เป็น 127.0.0.1
นั้นคือส่งข้อมูลภายในเครื่อง เพื่อทดสอบโปรแกรมและกำหนดค่า Port Number
เป็น 8081 โดย Port Number ต้องห้ามซ้ำกับ Port Number ที่มีอยู่ในระบบ
หากเอาไปใช้งานผ่านเครือข่ายให้แก้ IP Address และ Port Number
ตามที่ต้องการ
Python Cheat Sheet เบื้องต้น
เป็น Cheat Sheet สำหรับไวยากรณ์ภาษา Python เบื้องต้น
การดำเนินการทางตรรกะพื้นฐาน
if :
if test:
หาก test เป็นจริงจะทำงานตามคำสั่งในนี้
elif test2:
หาก test2 เป็นจริงจะทำงานตามคำสั่งในนี้
else:
หากเงื่อนไขทั้งหมดเป็นเท็จ จะทำงานตามนี้
Python loop
for :
for x in aSequence:
#ดำเนินการสมาชิกแต่ละตัวใน aSequence
#ตัวอย่างเช่น สมาชิกที่อยู่ใน list
#ตัวอักษรที่อยู่ใน string เป็นต้น
for x in range(10):
#ดำเนินการ 10 ครั้ง (0 ถึง 9)
for x in range(5,10):
#ดำเนินการ 5 ครั้ง (5 ถึง 9)
while :
while test:
#ทำจนกว่าจะสิ้นสุด
#จนกว่า test จะเป็น false
Python Strings
Strings เป็นลำดับของอักษระที่เรียงต่อกัน มักเป็นข้อความที่เก็บไว้
การสร้าง :
the_string = "Hello World!"
the_string = 'Hello World!'
การเข้าถึงตัวอักษรตามลำดับ the_string[1]
คืนค่า e
การแยก String the_string.split(" ")
คืนค่า ['Hello', 'World!']
ในการแปลง List เป็นสตริง เราสามารถทำได้ด้วยคำสั่ง join()
words = ["this", "is", "a", "list", "of", "strings"]
' '.join(words)
คืนค่า "This is a list of strings"
'ZOOL'.join(words)
คืนค่า "ThisZOOLisZOOLaZOOLlistZOOLofZOOLstrings"
"".join(words)
คืนค่า "Thisisalistofstrings"
String Formatting : เหมือนกับ printf() ของภาษา C โดยใช้ % หลังสตริงตามด้วย tuple โดยมีสตริงอยู่ภายใน เช่น
the_string = "Hello World!"
print("text : %s" % the_string)
ผลลัพธ์ text : Hello World!
แปลงสตริงจากตัวพิมพ์ใหญ่เป็นตัวพิมพ์เล็ก "PYTHON".lower() คืนค่า "python"
แปลงสตริงจากตัวพิมพ์เล็กเป็นตัวพิมพ์ใหญ่ "python".upper() คืนค่า PYTHON
นับจำนวนสตริงที่กำหนด "pythonpy".count("py") คืนค่า 2
ค้นหาตำแหน่งสตริงที่ต้องการ "python".find("n") คืนค่า 5 และสามารถค้นหาแบบกำหนดช่วงได้ "pythonpython".find("n",4,6) คืนค่า 5
แทนที่สตริง "pythonpython".replace("py","go") คืนค่า "gothongothon"
Python Dictionaries
การสร้าง :
emptyDict = {}
thisdict = {"a":1, "b":23, "c":"eggs"}
การดึงข้อมูล : thisdict["a"] คืนค่า 1
Python List
การสร้าง List :
thelist = ['5', '3', 'p', '9', 'e']
thelist = list('53p9e') # ['5', '3', 'p', '9', 'e']
การเข้าถึงข้อมูล : thelist[0] คืนค่า '5'
ดึง List เฉพาะส่วนที่ต้องการ :
thelist[1:3] คืนค่า ['3', 'p']
thelist[2:] คืนค่า ['p', '9', 'e']
thelist[:2] คืนค่า ['5', '3']
thelist[2:-1] คืนค่า ['p', '9']
วัดความยาว len(thelist) คืนค่า 5
เรียงลำดับ list ใหม่ thelist.sort() ตอนนี้ list กลายเป็น [3,5,9,'e','p']
เพิ่ม thelist.append(7) ตอนนี้ list กลายเป็น [3,5,9,'e','p',7]
คืนค่า และ ลบค่าออก thelist.pop() คืนค่า 7 ตอนนี้ list กลายเป็น [3,5,9,'e','p']
แทรก List thelist.insert(1, 't') ตอนนี้ list กลายเป็น ['5', 't', '3', 'p', '9', 'e']
ลบค่า thelist.remove("t") ตอนนี้ list กลายเป็น ['5', '3', 'p', '9', 'e']
del thelist[0] ตอนนี้ list กลายเป็น ['3', 'p', '9', 'e']
บวก list thelist + [0] คืนค่า ['3', 'p', '9', 'e', 0]
ค้นหาค่าใน List '3' in thelist คืนค่า True
Python Tuples
การสร้าง Tuples :
emptyTuple = ()
singleItemTuple = ("spam",) # note the comma!
thistuple = 12, 89, 'a'
thistuple = (12, 89, 'a')
การดึงข้อมูล : thistuple[0] คืนค่า 12
Python File
การเปิดไฟล์:
thisfile = open("datadirectory/file.txt",โหมดเปิดไฟล์)
โหมดการเปิดไฟล์
- w เขียนไฟล์
- r อ่านไฟล์
- a เขียนไฟล์ต่อจากข้อมูลเดิม
หากไม่กำหนดโหมดการเปิดไฟล์ ค่าพื้นฐานเป็น r อ่านได้เท่านั้น
คำสั่งเพิ่มเติม
thisfile.read()
อ่านสตริงตัวแรกจากไฟล์thisfile.readline()
อ่านข้อมูล 1 บรรทัดจากไฟล์thisfile.readlines()
อ่านข้อมูลจากบรรทัดทั้งหมดในไฟล์for eachline in thisfile:
อ่านบรรทัดต่อบรรทัดในไฟล์thisfile.write()
เขียนไฟล์thisfile.close()
ปิดไฟล์
หากทำงานกับภาษาไทย แนะนำให้ใช้ codecs โดยใช้ utf-8
import codecs
thisfile = codecs.open("datadirectory/file.txt",โหมดเปิดไฟล์, encoding="utf-8")
Python Functions
def myFunc(param1, param2):
# param1 และ param2 ใช้รับข้อมูลเมื่อใช้งาน myFunc(ข้อมูล1,ข้อมูล2)
# หากไม่มีการรับข้อมูล ไม่ต้องใส่ param ก็ได้
return param1+param2
Python Class
class FC:
def __init__(self,one,ten):
self.one = one
self.ten = ten
def show(self):
print (self.ten,"-",self.one,"=",self.ten - self.one)
a = FC(one=1,ten=10)
a.show()
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)