Key Concept
เวลาหัดเขียนโปรแกรม ทุกภาษาจะแบ่งเป็น 5 คอนเซปต์หลัก ถ้าเข้าใจพื้นฐานก็จะเขียนภาษานั้นได้ไม่ยากเลย
- Variable
- Data Type
- Data Structure
- Control Flow
- Function
Module ที่แล้วเราเรียนเรื่อง variable และ data type ของ python ส่วนเนื้อหาใน module นี้จะโฟกัสที่หัวข้อ 3-5 เมื่อเรียนจบนักเรียนจะสามารถเขียนและพัฒนา python program พื้นฐานได้ด้วยตัวเอง
Review
หลังจากดูวีดีโอจบแล้ว นักเรียนสามารถรีวิวโค้ดและคอนเซ็ปต์การเขียนโปรแกรม python ได้ในบทความด้านล่าง แอดทำสารบัญไว้ให้ นักเรียนสามารถคลิกเลือกหัวข้อรีวิวได้เลย
Control Flow
Data Structure
Data Structure คือโครงสร้างข้อมูล หรือพูดง่ายๆคือการนำตัวแปรหรือ data type มาประกอบร่างรวมกันเป็นโครงสร้างที่ใหญ่ขึ้น (structure) โดย python จะมีโครงสร้างพื้นฐานอยู่สามแบบหลักๆ ประกอบด้วย
- List
- Tuple
- Dictionary
คอร์สเรียนนี้เราจะโฟกัสที่การสร้างและจัดการ list เป็นหลัก ซึ่งเป็น structure พื้นฐานที่เราใช้บ่อยที่สุด
List
เราสามารถสร้าง list ด้วยเครื่องหมาย []
และใส่ข้อมูลหรือ item ที่เราต้องการใน list โดย list สามารถเก็บข้อมูลประเภทใดก็ได้ ตั้งแต่ int, float, str, bool หรือแม้แต่ data structure แบบอื่นๆ
เราสามารถนับจำนวน item ที่อยู่ใน list ด้วยฟังก์ชัน len()
## create empty list
empty_list = []
## create shopping list
shopping_list = ['egg', 'milk', 'bread', 'drinking water']
## how many items in list
len(shopping_list)
เราสามารถเช็คได้ด้วยว่า item นั้นอยู่ใน list หรือเปล่าด้วย in
keyword ถ้า milk อยู่ใน shopping_list python จะส่งค่า True
(หรือถ้าไม่อยู่จะส่งค่า False
) กลับมา
## check item in list
print('milk' in shopping_list)
ส่วนอันนี้เป็นตัวอย่าง list ที่เก็บข้อมูลหลายๆประเภท ส่วนตัวแอดไม่ค่อยได้ใช้แบบนี้เท่าไหร่ ปกติ list ที่ใช้ในการทำงานจริงจะเก็บข้อมูลแค่ประเภทเดียว เช่น string หรือ int อย่างเดียว เป็นต้น
## example of list with mixed types
mixed_list = [100, 200, 3.50, "python", True, False, ["hello", "world"]]
List Indices
วิธีการดึงข้อมูลที่อยู่ใน list คือการทำ slicing หรือ indexing โดย index ในภาษา python จะเริ่มที่เลขศูนย์ ถ้าเราใช้ negative index -1 จะดึงข้อมูลตัวสุดท้ายที่อยู่ใน list นั้นๆ อันนี้จะเหมือนกับที่เราเรียน string ในบทก่อน
## indices
print(shopping_list[0]) ## egg
print(shopping_list[1]) ## milk
print(shopping_list[2]) ## bread
print(shopping_list[3]) ## drinking water
print(shopping_list[-1]) ## drinking water
มาลองดูวิธีการ slice list กันบ้าง ทบทวนว่า [0:2]
จะดึงข้อมูล index ที่ 0, 1 แต่ไม่รวม 2 ถ้าเราเขียน [1:]
จะเป็นการดึงข้อมูลตั้งแต่ index ที่ 1 ไปจนถึงตัวสุดท้ายของ list นั้นๆ
## slicing items
print(shopping_list[0:2]) ## ['egg', 'milk']
print(shopping_list[0:3]) ## ['egg', 'milk', 'bread']
print(shopping_list[1:]) ## ['milk', 'bread', 'drinking water']
List Manipulation & Method
เราใช้เครื่องหมาย + เพื่อรวมลิสต์ list + [new items] ได้ตามตัวอย่างนี้
## merge list
new_shopping_list = shopping_list + ['snack', 'cereal']
print(new_shopping_list)
List จะมีฟังก์ชันเฉพาะของตัวมันเองหรือที่เราเรียกว่า “list methods” ตัวหลักๆที่เราใช้บ่อยๆคือ
.append()
.pop()
.sort()
.append()
ใช้เพิ่ม item ใหม่ต่อท้าย list เก่าของเรา ตัวอย่างนี้เราเพิ่ม tomato เข้าไปที่ new_shopping_list
## add new item using append method
new_shopping_list.append('tomato')
print(new_shopping_list)
## ['egg', 'milk', 'bread', 'drinking water', 'tomato']
ถ้าเราต้องการลบ item ใน list ให้ใช้ .pop()
โดย default pop จะลบ item ตัวสุดท้ายใน list เราสามารถกำหนด index ของ item ที่ต้องการลบได้ตามตัวอย่างนี้
## remove the last item
new_shopping_list.pop()
print(new_shopping_list) ## ['egg', 'milk', 'bread', 'drinking water']
## remove index 1
new_shopping_list.pop(1)
print(new_shopping_list) ## ['egg', 'bread', 'drinking water']
และ list method ตัวสุดท้ายคือ .sort()
ใช้ในการเรียงข้อมูลใน list สามารถ sort ได้ทั้งตัวเลขและตัวอักษร default จะเป็นการเรียงจากน้อยไปมาก (หรือ a-z) ถ้าเราเซ็ต reverse = True
จะเป็นการเรียงจากมากไปน้อย
new_shoping_list.sort()
new_shoping_list.sort(reverse=True)
Update Value in List
List คือ data structure แบบ mutable แปลว่าเราสามารถอัพเดทค่าที่อยู่ใน list ได้ ตัวอย่างด้านล่างเราอัพเดทค่าของ item แรกใน marvel เปลี่ยนชื่อ Iron Man เป็น Iron Woman
marvel = ['Iron Man', 'Thor', 'Spider Man', 'Black Widow']
## update first item in list
marvel[0] = 'Iron Woman'
print(marvel) ## ['Iron Woman', 'Thor', 'Spider Man', 'Black Widow']
Control Flow – For Loop
มาดูหัวข้อ control flow กันบ้าง คอร์สนี้เราจะโฟกัสที่การเขียน for
และ if else
ซึ่งเป็นสองตัวหลักที่เราใช้ในการเขียนโปรแกรมที่ซับซ้อนขึ้น โดย control flow คือการควบคุมพฤติกรรมของโปรแกรม (branching, loop) อธิบาย branching เช่น if True
do this, if False
do that.
มาเริ่มกันที่ for
loop กันก่อน อันนี้ไม่ยากเลย เราใช้ for
กับ in
keywords ในการเขียน loop และ data structure ที่เหมาะกับการเขียนลูปที่สุดคือ list นั่นเอง ด้านล่างแอดเขียน for
loop เพื่อปริ้นท์ชื่อ hero ลงใน console hero
เป็น dummy name ที่เราสามารถเปลี่ยนได้ (จะเรียกมันว่าอะไรก็ได้) โดยเราใช้ชื่อนี้อ้างอิงถึง item ที่อยู่ใน list ของเรา
## example list
marvel = ['Iron Woman', 'Thor', 'Spider Man', 'Black Widow']
## control flow - for loop
for hero in marvel:
print(hero)
ข้อดึของการเขียน for
loop คือโปรแกรมของเราจะเขียนสั้นลง ทำงานได้เหมือนเดิม efficient! สถานการณ์ที่เหมาะกับการเขียน for
loop คือเวลาที่เราต้อง copy & paste โค้ดเดิมซ้ำๆมากกว่าสามรอบขึ้นไป
ลองดูตัวอย่างนี้ สมมติเราอยากจะปริ้นท์ “Hello ” + hero + “!” กับ hero ทุกตัวใน marvel list เราต้องพิมพ์ print()
ทั้งหมดสี่รอบ และเปลี่ยนค่า index ด้วยมือเอง การเขียนโปรแกรมแบบนี้มีโอกาสผิดสูง (error prone!)
## these are very copy & paste codes!
print("Hello " + marvel[0] + "!")
print("Hello " + marvel[1] + "!")
print("Hello " + marvel[2] + "!")
print("Hello " + marvel[3] + "!")
เวลาเจอสถานการณ์ที่ต้องเขียนโค้ดซ้ำแบบนี้ for
loop to the rescue! เปลี่ยนมาใช้ for
loop ด้วยโค้ดถัดไป เขียนโค้ดแค่สองบรรทัดได้ผลเหมือนด้านบน 100% ถูกต้องแม่นยำ มีโอกาสเขียนผิดน้อย
for hero in marvel:
print("Hello " + hero + "!")
มาลองเปลี่ยนชื่อ dummy จาก hero
เป็น character
บ้าง เราสามารถใช้ string method .upper()
กับ character เพื่อเปลี่ยนชื่อตัวละครเป็นตัวพิมพ์ใหญ่ทั้งหมด
for character in marvel:
print("Hello " + character.upper())
for
loop คือ finite loop แปลว่าเรารู้จำนวน item ที่อยู่ใน list สามารถบอกได้ว่า loop จะวิ่งทั้งหมดกี่รอบ
[Advanced] List Comprehension
Python มีเทคนิคที่เรียกว่า list comprehension ที่ใช้อัพเดทค่าของ item ใน list แบบไม่ต้องใช้ for
loop block เหมือนโค้ดที่เราเขียนในหัวข้อ docstring
วีดีโอนี้แอดสร้าง list ใหม่ด้วย list comprehension โดยเพิ่มคำว่า “Hello ” + hero + “!” จบในหนึ่งบรรทัด
ตัวอย่าง list comprehension (หนึ่งบรรทัด) แทนการเขียน for
loop
## original list
marvel = ['Iron Man', 'Thor', 'Captain America', 'Captain Marvel', 'Black Widow']
## new list using list comprehension
new_marvel = ["Hello " + hero + "!" for hero in marvel]
print(new_marvel)
ถ้าเราต้องสร้าง new_marvel
ด้วย for
loop โค้ดของเราจะมีอย่างน้อย 3 บรรทัด
new_marvel = []
for hero in marvel:
new_marvel.append("Hello " + hero + "!")
Control Flow – If Else
Control flow ตัวที่สองที่เราสอนในคอร์สนี้คือ if else
ใช้ในการเขียนเงื่อนไขทำ branching logic ง่ายๆ เช่น โปรแกรมตัดเกรดนักเรียน ถ้าคะแนน score >= 80 สอบผ่าน คะแนนอื่นๆ else คือสอบตก
เวลาเขียน if
จะตามด้วยเงื่อนไข ถ้าเงื่อนไขนี้เป็นจริง (evaluate to True
) python จะรันโค้ดใน if
block ถ้าเงื่อนไขไม่เป็นจริง (evaluate to False
) python จะรันโค้ดใน else
block แทน
## our first example
score = 87
if score >= 80:
print("Passed")
else:
print("Failed")
ถ้าเกรดของเรามีหลายช่วงคือ A B C D เราใช้ elif
keyword เพื่อเขียนหลายๆเงื่อนไขได้ (else + if = elif)
if
ถ้า score >= 90 ได้เกรด Aelif
ถ้า score >= 80 แต่ไม่ถึง 90 ได้เกรด Belif
ถ้า score >= 70 แต่ไม่ถึง 80 ได้เกรด Celse
อื่นๆ ได้เกรด D
## if we have many conditions
score = 87
if score >= 90:
print("A")
elif score >= 80:
print("B")
elif score >= 70:
print("C")
else:
print("D")
สังเกตวิธีการเขียน if
elif
และ else
block หลังเครื่องหมาย :
ให้เราขึ้นบรรทัดใหม่ และย่อหน้าอย่างน้อย 2 spaces ภาษา python ใช้ white space ในการกำหนด block ของโปรแกรมที่เรารัน
For + If in Program
เวลาเราเขียนโปรแกรม เรามีอิสระที่จะใช้ for
+ if
ในโปรแกรมของเรา the limit is only your imagination. ตัวอย่างด้านล่างเราเขียน for loop สำหรับ hero แต่ละตัวเพื่อเช็คว่าเค้าเป็นผู้ชายหรือผู้หญิง
โปรแกรมจะปริ้นท์ชื่อฮีโร่ ตามด้วยประโยค “is a male/ female character.” ตามเพศ สังเกตวิธีการย่อหน้า (white space) ที่เราเขียนในโปรแกรม
- if-else blocks ถูกเขียนใน for loop block
- print บรรทัดแรกถูกเขียนใน if block
- print บรรทัดที่สองถูกเขียนใน else block
marvel = ['Iron Man', 'Thor', 'Captain America', 'Captain Marvel', 'Black Widow']
for hero in marvel:
if hero == "Captain Marvel" or hero == "Black Widow":
print(hero + " is a female character.")
else:
print(hero + " is a male character.")
ผลลัพธ์ที่แสดงใน console Captain Marvel และ Black Widow คือ female character
Iron Man is a male character.
Thor is a male character.
Captain America is a male character.
Captain Marvel is a female character.
Black Widow is a female character.
White Space
Python ใช้ย่อหน้าหรือ indentation ในการกำหนด block ของโปรแกรมที่เรารัน เวลาเขียน for
loop, if else
และ def
ในหัวข้อถัดไป หลังเครื่องหมาย :
เคาะ enter หนึ่งครั้ง ต้องย่อหน้าอย่างน้อย 2 spaces เสมอ หรือกด TAB
บนคีย์บอร์ดได้เลย
## use white space to define program
if condition is True:
do something
ถ้าเราไม่ย่อหน้า (แนะนำอย่างน้อย 2 spaces) โปรแกรมเราจะรันไม่ออก error นี้เรียกว่า IndentationError
## this program will throw ERROR
if condition is True:
do something
ข้อดีของ white space คือโค้ดเราจะสะอาดมาก นี่คือจุดเด่นของภาษา python เลย แต่ถ้าเราย่อหน้าผิดนิดเดียว โปรแกรมของเราก็อาจจะรันไม่ออกเลย ฉะนั้นตอนเขียนโปรแกรมต้องคอยเช็ค whitespace ให้ดีเสมอ ถ้าคิดว่าจะใช้ 2 spaces ก็ให้ใช้ 2 spaces ต่อเนื่องตลอดทั้งโปรแกรม (consistency)
Note – ถ้าเราใช้โปรแกรม text editor สำหรับการเขียนโค้ดเช่น VS Code (ที่เราจะใช้ใน final project) ตัว text editor จะย่อหน้าให้เราอัตโนมัติเลย รวมถึงทำพวก syntax highlight ด้วย
Functions
Functions คือ reusable piece of code ที่เราเขียนขึ้นมาเพื่อนำไปใช้ซ้ำได้ โดยเฉพาะ task ที่เราทำเป็นประจำ เช่น การแสดงผลข้อความใน console เราใช้กันบ่อยมากจนเกิดเป็นฟังก์ชัน print()
ขึ้นมา
วิธีการเขียนฟังก์ชันใน python เราใช้ def
keyword (มาจากคำว่า define) และย่อหน้าเพื่อกำหนด block ของ function content ฟังก์ชันที่เราเขียนจะมีหรือไม่มี input (parameter/ argument) ก็ได้
greeting()
ไม่มี parameter ใดๆเลยgreeting2(name)
มีหนึ่ง parameter ชื่อว่า nameadd_two_num(a, b)
มีสอง parameters ชื่อว่า a และ b
## function with no parameter
def greeting():
print("Hello!")
## function with one parameter
def greeting2(name):
print("Hello! " + name)
## function with two parameters
def add_two_num(a, b):
return a + b
เราสามารถตั้งค่า default ให้กับ parameter ของเราได้ด้วย ฟังก์ชัน cube()
ด้านล่างมีสองพารามิเตอร์ชื่อว่า value และ power โดยเรากำหนด power = 3 ไว้เป็นค่าเริ่มต้น
cube(2)
จะเท่ากับการเรียกฟังก์ชัน 2**3 ใช้ค่า default power ได้คำตอบเท่ากับ 8cube(2, 4)
จะเท่ากับการเรียกฟังก์ชัน 2**4 ได้คำตอบเท่ากับ 16 เราเปลี่ยนค่า default power จาก 3 เป็น 4
## default argument
def cube(value, power=3):
return value ** power
## test function
cube(2) ## 8
cube(2, 4) ## 16
ภายใน function ที่เราเขียนจะมีกี่บรรทัดก็ได้ รวมถึงการใช้ control flow for
if else
เพื่อกำหนดการทำงานของฟังก์ชันนั้นๆ โค้ดบล๊อคถัดไปเราใช้ for loop เพื่อปริ้นท์คำว่า “Hello ” + hero + “!” กับ hero แต่ละตัวใน list
## using control flow in function
def greeting_hero(heros):
for hero in heros:
print("Hello " + hero + "!")
Get Input From Users
เราสามารถรับ string input จาก user ด้วยฟังก์ชันชื่อว่า input()
เมื่อกดรันฟังก์ชันนี้ python จะ prompt user เพื่อขอรับข้อมูล ตัวอย่างนี้เราถามชื่อของ user มาเก็บในตัวแปร your_name
your_name = input("What's your name? ")
print(your_name)
Use case ที่ต้องใช้ฟังก์ชัน input()
บ่อยๆคือการขอ username และ password และเขียน if
เพื่อตรวจสอบความถูกต้อง ถ้า username/ password ถูกต้อง โปรแกรมถึงจะรันต่อ ถ้าผิดให้ terminate ออกจากโปรแกรม
def get_access():
username = input("username: ")
password = input("password: ")
if username == "admin" and password == "12345":
print("Correct!")
else:
print("Your username/password is incorrect!")
Return vs. Print
ความแตกต่างของ return
และ print()
ในฟังก์ชันคือ return
ใช้สร้างตัวแปรใหม่ได้ (create new object) แต่ print()
จะไม่สามารถทำได้ ตัวอย่างด้านล่าง ในฟังก์ชัน cube()
เราใช้คำสั่ง print()
เพื่อแสดงผล value ** power พอเรา assign คำตอบไปที่ตัวแปร result ค่าของ result ที่ได้กลับมาคือ None
return
keyword ใช้สร้างตัวแปรใหม่ได้print()
แค่ปริ้นท์ผลลัพธ์ของฟังก์ชันใน console
## function using print
def cube(value, power=3):
print(value ** power)
## test function
result = cube(5, 3)
print(result) ## None
เวลาเราเขียนฟังก์ชัน เราจะใช้ return
keyword ถ้าเราต้องการให้ฟังก์ชันของเราส่งค่าไปฝากที่ตัวแปรหรือ object อื่นๆใช้งานต่อได้
## function using return keyword
def cube(value, power=3):
return value ** power
## test function
result = cube(5, 3)
print(result) ## 125
Docstring
เราสามารถเขียนคำอธิบายฟังก์ชันที่เรา def
ขึ้นมาได้ด้วย doctring วิธีเขียน docstring เราจะใช้เครื่องหมาย triple quote """
เพื่อเขียน string ยาวได้มากกว่าหนึ่งบรรทัด โดย docstring จะอยู่ที่บรรทัดต่อจาก def
def add_two_num(val1, val2):
"""add two numbers"""
return val1 + val2
ข้อมูลที่เราใส่ใน docstring มีสามอย่างคือ 1. ฟังก์ชันนี้ใช้ทำอะไร 2. input ของฟังก์ชันคืออะไร และ 3. output ออกมาหน้าตาเป็นอย่างไร ฟังก์ชัน grading_auto()
ใช้ตัดเกรดนักเรียนหลายๆคนพร้อมกัน input คือ list ของคะแนนสอบ และ output คือเกรดมีสองค่าคือ “Passed” หรือ “Failed”
ขั้นตอนการทำงานของฟังก์ชัน grading_auto()
มีดังนี้
- เราสร้าง empty list ชื่อว่า
result
ขึ้นมาก่อน เพื่อใช้เก็บ final grade ของนักเรียนแต่ละคน - เขียน
for
loop คู่กับif else
เพื่อตัดเกรดนักเรียนทีละคน - นำเกรดของนักเรียนแต่ละคน
.append()
ใส่เข้าไปที่ตัวแปรresult
return
ตัวแปรresult
ในบรรทัดสุดท้ายของฟังก์ชัน
def grading_auto(scores):
"""
grading auto will grade student scores
input: a list of numeric scores
output: list of grade (Passed or Failed)
"""
result = []
for score in scores:
if score >= 80:
result.append("Passed")
else:
result.append("Failed")
return result
## test function
scores = [89, 45, 70, 95, 99]
grades = grading_auto(scores)
print(grades) ## ['Passed', 'Failed', 'Failed', 'Passed', 'Passed']
เราสามารถเรียกดู docstring ของฟังก์ชันได้สองวิธี 1. ปริ้นท์ .__doc__
attribute ของ function หรือ 2. อ่าน help
document ของฟังก์ชันนั้นๆ
print(grading_auto.__doc__)
help(grading_auto)
Module
Module คือไฟล์นามสกุล .py ที่เราเขียนขึ้นมาและ save อยู่ใน working directory ของเรา ใน module อาจจะมีตัวแปร ฟังก์ชัน หรือ object อื่นๆที่เราสร้างไว้ และสามารถ import ไปใช้ในโปรแกรมอื่นๆของเราได้
วิธีการสร้าง module ให้เราเปิดโปรแกรม notepad ขึ้นมา สร้างไฟล์ใหม่ชื่อว่า fun.py ชื่อไฟล์นี้คือชื่อ module ที่ต้อง import ใน python หลังจากเขียนเสร็จแล้ว
notepad fun.py
ลองเขียนฟังก์ชันง่ายๆซักสองตัว save file และกลับสู่ command prompt
def greeting():
return "good morning!"
def add_two_num(a, b):
return a + b
พิมพ์ python
เพื่อเข้าสู่โหมด interactive และใช้ import
keyword เพื่อโหลด module เข้าสู่ python environment เราสามารถเขียน import module ได้สามวิธี
import
[module]from
[module]import
*from
[module]import
[function]
ถ้าเราเขียน import
แบบที่หนึ่ง เวลาเราเรียกใช้งานฟังก์ชันของ module นั้นต้องพิมพ์ชื่อ module.function()
## import python module (fun.py)
import fun
fun.greeting()
fun.add_two_num(34, 55)
ถ้าเราเขียน import
แบบที่สอง คือการ import ทุกอย่าง *
ในไฟล์ module เลย วิธีนี้ไม่ค่อยนิยมใช้กันเท่าไหร่ เพราะว่าส่วนใหญ่เราต้องการใช้งานแค่ไม่กี่ฟังก์ชันของ module นั้นๆ การ import * ทำให้ environment ของเราเต็มไปด้วยฟังก์ชันหรือตัวแปรที่ไม่ได้ใช้
## import everything from this file
from fun import *
greeting()
add_two_num(34, 55)
แบบที่สาม เป็นแบบที่เรานิยมใช้กันคือ import
เฉพาะฟังก์ชันที่เราต้องการใช้งานจาก module นั้น เวลาเรียกใช้งานฟังก์ชันก็พิมพ์ชื่อ function()
ตรงๆได้เลย
## import specific function from this file
from fun import greeting
greeting()
Note – ก่อนจะเขียนฟังก์ชันหรือ module ไว้ใช้งานเอง ลองศึกษาดูก่อน (หมายถึงค้น Google นั่นเอง 555+) ว่ามีคนอื่นเขียนสิ่งที่เราต้องการใช้ไว้แล้วหรือยัง ฝรั่งเรียกว่า “do not reinvent the wheel” ถ้ามีอยู่แล้ว ก็ดาวน์โหลดมาใช้งานได้เลย ไม่ต้องเขียนเองให้เสียเวลา
Package Management
มาลองดูวิธีการดาวน์โหลดและติดตั้ง module/ package จากอินเตอร์เน็ตกันบ้าง (ความแตกต่างระหว่าง package vs. module คือ package เป็น collection ของหลายๆ modules)
วิธีการดาวน์โหลดและติดตั้ง python module หรือ package (library) ต่างๆมาติดตั้งในคอมพิวเตอร์ของเราคือการใช้ package management หรือเรียกสั้นๆว่า pip
pip
คือโปรแกรมที่ถูกติดตั้งพร้อมกัน Python เวอร์ชัน 3.8 เราสามารถอ่าน pip document แค่พิมพ์คอมมานด์ pip
ใน command prompt
pip
พิมพ์ pip list
เพื่อดูรายชื่อ packages ที่ติดตั้งไว้แล้วในคอมพิวเตอร์ของเรา
pip list
วิธีการดาวน์โหลดหรือลบ package ให้พิมพ์ว่า pip install
หรือ pip uninstall
ตามด้วยชื่อ package
pip install [package]
pip install numpy
pip uninstall numpy
เราใช้คอมมานด์ pip freeze
เพื่อสร้างไฟล์ requirements.txt สำหรับส่งให้เพื่อนของเรา (หรือ python developers คนอื่นๆ) เพื่อบอกว่าโปรแกรมที่เราเขียนต้องใช้ packages อะไรบ้าง
pip freeze
pip freeze > requirements.txt
Note – สำหรับนักเรียนที่ใช้ macOS สามารถติดตั้ง pip ได้ด้วยคอมมานด์นี้ sudo
คือ super user ปกติเวลารันคอมมานด์นี้ terminal จะถาม password ของเราด้วย (ยืนยันสิทธิ์ admin ที่สามารถดาวน์โหลดและติดตั้งโปรแกรมเองได้)
sudo easy_install pip
How to Run Python Script
เวลาทำงานจริงเราจะเขียน python ด้วยโปรแกรม text editor เซฟเป็นไฟล์นามสกุล .py แล้วค่อยนำไปรันใน command prompt ทีเดียวเลย (ปกติโปรแกรมของเราอาจจะมีโค้ดยาวหลายร้อยบรรทัดก็ได้)
- interactive python เหมาะสำหรับทดสอบโค้ดเร็วๆ
- python script (text editor) เหมาะสำหรับทำงาน และสร้างโปรเจ็คจริง
มาลองสร้าง python script ด้วยกัน เปิด command prompt และ cd
ไปยังโฟลเดอร์ที่เราต้องการ เปิดโปรแกรม notepad ตั้งชื่อไฟล์ว่า hello.py (เราเรียกไฟล์ .py ว่า script)
notepad hello.py
เขียนฟังก์ชัน print()
สองบรรทัดนี้ในไฟล์ แล้วคลิก save file
print("hello world")
print("python is cool")
กลับไปที่ command prompt พิมพ์ python
ตามด้วยชื่อไฟล์ hello.py
เพื่อรันโปรแกรม เท่านี้ก็เสร็จเรียบร้อย
python hello.py
Another Package Management
ในสาย python โดยเฉพาะด้าน data science จะมี package management อีกหนึ่งตัวที่เป็นที่นิยมชื่อว่า conda/ anaconda ใช้ในการติดตั้ง จัดการและอัพเดท python packages นักเรียนสามารถดูรายละเอียดได้ที่เว็บไซต์ Anaconda

ข้อดีของ conda คือมันมาพร้อมกับ data science packages หลายๆตัว เช่น numpy, pandas, scikit-learn เราสามารถสร้าง environment แยกได้ด้วย ความหมายคือเราสามารถติดตั้ง python หลายๆเวอร์ชันในคอมพิวเตอร์ของเราได้ เช่น python 2 และ python 3 (different environments)
Optional Reading
สรุปในส่วนนี้เป็น optional นักเรียนสามารถข้ามได้ แอดจะรีวิวคร่าวๆคอนเซ็ปต์ของ data structure อีกสองตัวที่เราควรรู้จักใน python คือ tuple และ dictionary
Tuple
tuple อ่านว่า ทุปเปิ้ล หรือ ทัปเปิ้ล จะทำงานคล้ายกับ list เราสร้าง tuple ได้ด้วยเครื่องหมาย ()
สามารถเก็บข้อมูลได้หลายรูปแบบ และทำงานร่วมกับ for loop ได้เช่นกัน
## create tuple
fruits = ('apple', 'banana', 'orange', 'grape')
print(fruits)
## for loop with tuple
for fruit in fruits:
print(fruit)
tuple จะแตกต่างจาก list เรื่องการอัพเดทค่าของ item สำหรับ tuple เราจะไม่สามารถอัพเดทค่าใดๆได้เลย python เรียกคุณลักษณะนี้ว่า “immutable” ถ้าเรารันโค้ดด้านล่างจะเจอ error message
## try change value in tuple
fruits[0] = 'green apple' ## this will return ERROR message
Dictionary
Dictionary ใช้คอนเซ็ปต์เรื่อง key:value
pairs ในการเก็บข้อมูล ยกตัวอย่างง่ายๆ เช่น ชื่อนักเรียน: คะแนนสอบ เราสร้าง dict ด้วยเครื่องหมาย {}
ด้านล่างเราลองสร้าง dict ชื่อว่า student_gpa เก็บข้อมูลชื่อและคะแนน gpa ของนักเรียนสามคน นักเรียนแต่ละคนจะถูก split ด้วยเครื่องหมาย comma
## key value pair
student_gpa = {
"David": 3.56,
"Anna" : 3.98,
"John" : 2.67
}
วิธีการดึงค่าออกจาก dict เราจะใช้ key
หรือชื่อของนักเรียน dict จะไม่มี index เหมือนกับ list หรือ tuple แปลว่าเราไม่สามารถเขียน student_gpa[0] หรือ student_gpa[1] ได้ ภาษา python เรียก dict ว่า “unordered” structure
## use key to get value from dictionary
student_gpa["David"] ## 3.56
student_gpa["Anna"] ## 3.98
student_gpa["John"] ## 2.67
## this will not work
student_gpa[0] ## KeyError
student_gpa[1] ## KeyError
เราสามารถอัพเดทค่าที่อยู่ใน dictionary ได้ ตัวอย่างด้านล่างเราอัพเดท gpa ของ David จาก 3.56 เป็น 3.65 python เรียก object/ data structure ที่สามารถอัพเดทค่าได้ว่า “mutable”
## update David's gpa
student_gpa["David"] = 3.65
Compare Data Structures
สรุปเปรียบเทียบความแตกต่างของ 3 data structures ที่เราเรียนในคอร์สนี้
- List เป็น
mutable
,ordered
structure เราสร้าง list ด้วย[]
- Tuple เป็น
immutable
,ordered
structure เราสร้าง tuple ด้วย()
- Dictionary เป็น
mutable
,unordered
structure เราสร้าง dict ด้วย{}
โดยที่ mutable แปลว่าเราสามารถอัพเดทค่าใน structure นั้นได้ และ ordered แปลว่าเราสามารถทำ index/ slice เพื่อดึงข้อมูลได้ เช่น list[0], tuple[1] ส่วน dictionary เราใช้ key ในการดึงข้อมูลเลยเป็น unordered
Formative Quiz
🏆 ก่อนจะเริ่มทำ final prioject นักเรียนทุกคนต้องผ่านแบบสอบถาม 50 ข้อนี้ก่อนนะครับ สามารถทำซ้ำได้เรื่อยๆจนกว่าจะได้คะแนนมากกว่า 80% (ตอบถูกอย่างน้อย 40 ข้อ)
ทำควิซเสร็จแล้ว แอดรบกวนช่วยตอบแบบสอบถามความพอใจ module นี้ด้วยนะครับ ขอบคุณทุกคนมากๆครับ แล้วพบกันในบทต่อไปนะ
Awesome Work!
พรีวิวตัวอย่าง final project โปรแกรมที่เราจะเขียนด้วยกันใน module ต่อไป