หัดเขียน Python เบื้องต้นฟรีด้วยโปรแกรม PyCharm Edu
ช่วงนี้ผมสนใจที่จะหัดเขียน Python ซึ่งจริงๆแล้ว ก็เคยลองอ่านและหัดเขียนบ้าง แต่ว่าไม่ได้จริงๆจังๆ พอซักพักก็ลืมไปหมดแล้ว มาถึงช่วงนี้ก็รู้สึกสนใจอีกครั้ง และได้อ่านหนังสือ Ebooks, Blog รวมถึง Video Tutorials ต่างๆเยอะมาก วันนี้จึงขอเอาส่วนหนึ่งที่ได้อ่านและเรียนมา ซึ่งคิดว่าน่าจะเหมาะสำหรับมือใหม่มากๆ เพราะว่ามัน ฟรี นั่นก็คือ การเรียน Python ผ่านโปรแปรม PyCharm Education
สำหรับผู้ที่เคยเขียนโปรแกรมมาก่อน อาจจะคุ้นหู JetBrains หรือว่าพวกโปรดัค Intelij IDEA, Webstorm, RubyMine หรือ PHPStorm เป็นต้น ตัว PyCharm ก็เป็นหนึ่งในโปรดัคของ JetBrains แต่ว่าตัวเวอร์ชั่น Education จะเป็นตัวใช้งานฟรี ซึ่งจะไม่รองรับในส่วนของ Web Development เช่น Django Framework เป็นต้น แต่แค่นี้ก็เพียงพอแล้ว สำหรับการเรียนรู้ Python เบื้องต้น เมื่อเรียนจบแล้ว สามารถนำความรู้ที่ได้ไปต่อยอด ก็โอเคแล้ว
ดาวน์โหลดและติดตั้ง PyCharm
ไม่รอช้า เข้าเว็บไซต์ PyCharm Education และทำการดาวน์โหลด ติดตั้งลงในเครื่องเลยครับ ลงได้ทั้ง Windows, Mac OS X และ Linux เมื่อติดตั้งเรียบร้อยแล้ว ก็เปิดโปรแกรมขึ้นมาเลย
หน้าจอนี้เป็นหน้าจอแรก เมื่อเราเปิดขึ้นมา
หน้าจอ PyCharm เมื่อเปิดขึ้นมาแล้ว จะมีดังนี้
- หมายเลข 1 : ส่วนของบทเรียน โดยปกติจะเป็น Project Structure ของโปรเจ็คนั้นๆ
- หมายเลข 2 : เป็นส่วนของโปรแกรมที่เราต้องเขียน (ไฟล์นามสกุล .py)
- หมายเลข 3 : เป็นส่วนของ Task Description เอาไว้บอกว่าแต่ละแบบฝึกหัดต้องทำอะไรบ้าง
- หมายเลข 4 : Course Progress เอาไว้บอก Progress ว่าเราผ่านไปเท่าไหร่แล้ว
- หมายเลข 5 : Python Console เป็นส่วนของการรันคำสั่ง console หรือแสดงผลลัพธ์ต่างๆของโปรแกรม เราสามารถพิมพ์คำสั่งต่างๆบน Python Console ได้เลย
วิธีการทำแบบฝึกหัดคือ
- อ่าน Task Description
- ทำการแก้ไขโค๊ด จากนั้นกดปุ่ม Play เขียวๆ
- เมื่อแน่ใจว่ารันถูกต้อง กดเครื่องหมายถูก ใต้ Task Description หากผิดก็จะมี error เตือน
- เลื่อนไปข้อถัดไป หาก
Course 1 : Introduction to Python
เริ่มต้นที่คอร์สแรก ส่วนนี้ก็เป็น Note ที่ผมจดไว้ ส่วนมากก็เอามาจาก Task Description, Comment จากโค๊ดของตัวโปรแกรม และก็มีเพิ่มเติมบ้างเล็กน้อย ตามความเข้าใจส่วนตัว :)
Introduction
- ให้ทำการเขียนโปรแกรม Python ครั้งแรก และคำสุดคลาสสิคสำหรับการเรียนเขียนโปรแกรมก็คือ Hello World! ด้วยคำสั่ง
print("Hello World!")
โดย Task แรกเค้าให้แนะนำตัว ไม่มีอะไรมาก
สำหรับใครที่ใช้ Python 2 สามารถเปลี่ยน Interpreter ได้โดยเลือก Edit => Settings => Project Interpreter
- คอมเม้นของ Python เริ่มต้นด้วย hash (#) ไปจนสิ้นสุดบรรทัดนั้นๆ
Variables
variables
หรือตัวแปร เอาไว้สำหรับเก็บข้อมูล หรือก็เปรียบเสมือนการตั้งชื่อ เพื่อให้เราไว้กำหนด หรือระบุตัวได้ถูกต้อง การประกาศตัวแปร จะใช้เครื่องหมายเท่ากับ (=) เรียกว่า assignment operatora = b = 2
คือ chained assignment เป็นการกำหนดค่า 2 ให้กับ a และ b- ตัวแปร (variable) สามารถตั้งชื่อได้เฉพาะ ตัวอักษร ตัวเลข และ underscore(_) ไม่สามารถขึ้นต้นด้วยตัวเลขได้
- ตัวเลขจะมี Type อยู่ 2 ประเภทคือ
integers
และfloats
โดยintegers
คือตัวเลขธรรมดา ส่วนfloats
คือตัวเลขที่มีจุดทศนิยม
การตั้งชื่อตัวแปร นิยมใช้การตั้งชื่อแบบ
snake_case
ก็คือใช้ตัวพิมพ์เล็กทั้งหมดและแบ่งคำด้วยunderscore(_)
เช่นawesome_name = "John Doe"
เป็นต้น
- เช็ค Type ของตัวแปรต่างๆ ได้โดยฟังชั่น
type()
เช่นtype(999)
- เราสามารถ convert จาก integer ไป float หรือ float ไป integer ได้ โดยใช้ built-in functions เช่น
float_number = float(10) # แปลงค่า integer เป็น float
number = int(35.321) # แปลงค่า float เป็น integer
word = str(number) # แปลงค่า integer เป็น string
- operator หรือตัวดำเนินการต่างๆ ก็สามารถใช้งานได้เหมือนกับ programming language ภาษาอื่นๆเลย ไม่ว่าจะเป็น
+ - * / % **
เช่น
a = 20 + 20 # บวก
b = 20 - 10 # ลบ
c = 2 * 2 # คูณ
d = 10 / 2 # หาร
e = 2 ** 4 # ยกกำลัง (2 ยกกำลัง 4)
f = 10 % 2 # modulo
- augmented assignment คือการรวม operation และ assignment 2 คำสั่ง ด้วยการใช้เพียง statement เดียว เช่น
result = 10
result += 5 # result = 15
เป็นการ เพิ่มค่า result เท่ากับ 5 และอัพเดทค่า รวมกลายเป็น result จะเท่ากับ 15
- Boolean มีค่าได้เพียงแค่ 2 ชนิดคือ ไม่
True
ก็False
โดยใช้เครื่องหมาย==
เรียกว่า equality operator ในการเช็คหรือเปรียบเทียบตัวแปรสองตัว ว่ามีค่าเหมือนกันหรือไม่ เช่น
one = 1
two = 2
print(one == two) # False
- นอกจากการเปรียบเทียบด้วย
==
แล้ว เรายังสามารถเปรียบเทียบด้วย>=
(มากกว่าหรือเท่ากับ)<=
(น้อยกว่าหรือเท่ากับ)>
(มากกว่า) และ<
(น้อยกว่า)
Strings
- การรวม String 2 ตัวเข้าด้วยกัน (combine) จะใช้เครื่องหมาย
+
เช่น
name = "Chai"
hello = "Hello " + name
print(hello) # Hello Chai
- Python สามารถใช้ String คูณด้วย integer ได้ด้วย เช่น
"Hello" * 10
- String ใน Python เก็บค่าแต่ละ characters เป็น index โดยเริ่มต้นจาก index = 0 ตัวอย่าง คำว่า
DevAhoy
- สามารถใช้ค่าติดลบ ในการเข้าถึง index ของ String ได้ โดยจะเริ่มทำการนับจากด้านหลังมาด้านหน้า
result = "DevAhoy"
# D e v A h o y
# [0] [1] [2] [3] [4] [5] [6] # นับจาก หน้าไปหลัง
# [-7] [-6] [-5] [-4] [-3] [-2] [-1] # นับจาก หลังไปหน้า
print(result[3]) # A
print(result[6]) # y
print(result[-2]) # o
- Slice หรือ substring คือการตัดคำ syntax คือ
str[index1:index2]
เช่น
name = "DevAhoy"
print(name[:3]) # Dev (มีค่าเท่ากับ `name[0:3]`)
print(name[3:7]) # Ahoy
print(name[3:]) # Ahoy (มีค่าเท่ากับ `name[3:7]`)
- สามารถเช็คว่าใน String มีคำหรือตัวอักษรอยู่ใน String หรือไม่ผลลัพธ์จะเป็น boolean
True
หรือFalse
ด้วยการใช้in
keyword เช่น
has_a = "A" in "DevAhoy"
has_ahoy = "Ahoy" in "DevAhoy"
print(has_a) # True
print(has_ahoy) # True
len()
เป็นฟังค์ชันที่เอาไว้นับจำนวนความยาวของ String"""
(triple-quoted) เอาไว้สำหรับประกาศ String แบบหลายๆบรรทัด
phrase = """
It is a really long string
triple-quoted strings are used
to define multi-line strings
"""
length = len(phrase)
print(length) # 88
- Backslash (
\
) เอาไว้ใช้สำหรับ escape character กรณีต้องการพิมพ์"
หรือ'
ลงใน String ซึ่งโดยปกติ String จะมี"
ที่เริ่มต้นและสุดของ String หากแทรก"
ใน String โปรแกรมจะมอง"
ใน String กลายเป็นจุดสิ้นสุดของ String กลายเป็น error ไป วิธีแก้ ก็คือต้องใช้\
เช่น
print("You said \"You loved me\"") # You said "You loved me"
print('My name\'s John Doe') # My name's John Doe
lower()
เป็นเมธอดสำหรับทำให้ String กลายเป็นตัวพิมพ์เล็ก ขณะที่upper()
เอาไว้สำหรับเปลี่ยน String เป็นตัวพิมพ์ใหญ่ การใช้งานเมธอดเราจะใช้.
(dot) ตามด้วยชื่อเมธอด เช่น
"JohnDoe".upper() # JOHNDOE
"JohnDoe".lower() # johndoe
- string format ใช้
%
ตามหลัง String ร่วมกับตัวแปร เพื่อกำหนด format ของ String ที่เราต้องการ หลักการคือ จะเปลี่ยนค่า%s
ใน String กลายเป็นตัวแปรที่เรากำหนดไว้ เช่น
name = "Chai"
age = 15
print("Hello, My name is %s" % name) # Hello, My name is Chai
print("I'm %d years old" % age) # I'm 15 years old
%s
เป็น symbol สำหรับ String ส่วน%d
เป็น symbol สำหรับใช้แทนตัวเลข
Data structures
- list คือ data structure ที่เอาไว้เก็บข้อมูลหลายๆข้อมูล ค่าที่เก็บใน list ต้องเป็นชนิดเดียวกัน เช่น
students = ["John Doe", "Jane Doe", "Chuck Norris"]
squares = [1, 4, 9, 16, 25, 36, 49, 64]
- การเพิ่มข้อมูลลงไปใน list ใช้เมธอด
append()
และ list เป็น mutable เราสามารถเปลี่ยนข้อมูลใน list ได้ เช่น
animals = ['elephant', 'lion', 'tiger', "giraffe"]
print(animals) # ['elephant', 'lion', 'tiger', 'giraffe']
animals.append("dino")
print(animals) # ['elephant', 'lion', 'tiger', 'giraffe', 'dino']
animals[0] = "cat"
print(animals) # ['cat', 'lion', 'tiger', 'giraffe', 'dino']
- Tuples คือ list ที่ไม่สามารถเปลี่ยนแปลงข้อมูลได้ ไม่สามารถเพิ่ม ลบ หรือแก้ไขข้อมูลเหมือน list ได้ มี syntax ง่ายๆคือ ขึ้นต้นและปิดด้วย
(
และ)
ขั้นข้อมูลด้วย comma เช่น
this_is_tuple = ('t', 'u', 'p', 'l', 'e')
- Dictionary คล้ายคลึงกับ list แต่ต่างกันที่ Dictionary สามารถเข้าถึงข้อมูลได้ด้วยการใช้
key
แทนที่จะเป็น index แบบ list (คล้ายคลึงกับ Ruby Hash, Java HashMap หรือ JSON ท่าเทียบกับภาษาอื่นๆ)
phone_book = {"John": 123, "Jane": 234, "Jerard": 345}
print(phone_book["John"]) # 123
in
นอกจากเช็คตัวอักษรใน String ได้แล้ว ก็ยังสามารถเช็คว่ามี item ที่ต้องการใน list หรือ dictionary ได้อีกด้วย
Condition expressions
- Boolean operators ใช้เปรียบเทียบ statement ผลลัพธ์เป็น
True
หรือFalse
and
จะเป็นTrue
ก็ต่อเมื่อ 2 กรณีเป็นจริงทั้งคู่นอกนั้นเป็นFalse
or
จะเป็นจริงTrue
ก็ต่อเมื่อ กรณีใดเป็นจริง จะเป็นFalse
เมื่อทั้ง 2 กรณีเป็นเท็จnot
เอาไว้กลับค่าให้ตรงข้าม เช่น จากTrue
หากมีnot
ก็จะกลายเป็นFalse
- ลำดับความสำคัญ ไม่ได้เริ่มจากซ้ายไปขวา แต่นับจาก
not
and
และor
ตามลำดับ if
statement เอาไว้เช็คเงื่อนไขว่าเป็นจริงหรือไม่ ถ้าจริงก็จะทำงานในส่วนของ statement (Python จะใช้ indentation ด้วย 4 spaces)
if condition:
print("")
ตัวอย่างเช่น
name = "Chai"
if name == "Chai":
print("Hello Chai")
ผลลัพธ์จะได้เป็น Hello Chai
- กรณี
if/else
หากเช็คเงื่อนไขเป็นจริง จะทำในif
แต่ถ้าไม่ใช่ก็จะทำในelse
เช่น
name = "John Doe"
if name == "Chai":
print("Hello Chai")
else:
print("Hello John Doe")
else if
กรณีที่ต้องการเอาไว้เช็คหลายๆเงื่อนไข โดยใช้คีเวิร์ดelif
เช่น
point = 82
if point >= 80:
print("Grade A")
elif point < 80 and point >= 70:
print("Grade B")
elif point < 70 and point >= 60:
print("Grade C")
elif point < 60 and point >= 50:
print("Grade D")
else:
print("FFFFFFF")
กรณี เงื่อนไขเกี่ยวกับ มากกว่าน้อยกว่า เราสามารถยุบเงื่อนไข เขียนสั้นๆแบบนี้ก็ได้ (อันนี้ผมเพิ่งรู้จากที่ตัว IDE มันแนะนำ Simplify chained comparison เช่น
point = 82
if point >= 80:
print("Grade A")
elif 70 <= point < 80:
print("Grade B")
elif 60 <= point < 70:
print("Grade C")
elif 50 <= point < 60:
print("Grade D")
else:
print("FFFFFFF")
แต่จริงๆแล้ว if/else เรามีแค่เงื่อนไขเดียวก็ได้
point = 82
if point >= 80:
print("Grade A")
elif 70 <= point:
print("Grade B")
elif 60 <= point:
print("Grade C")
elif 50 <= point:
print("Grade D")
else:
print("FFFFFFF")
Loops
- For Loop มีรูปแบบ
for i in range:
เช่น วนลูปปริ้น 0-4
for i in range(5):
print(i)
- วนลูปปริ้นข้อมูลในลิสท์
[2, 3, 5, 7]
primes = [2, 3, 5, 7]
for prime in primes:
print(prime)
- loop กับ String
for ch in "Hello World":
print(ch)
- while loop จะ execute เมื่อ condition เป็น true
square = 0
number = 1
while number < 10:
square = number ** 2
print(square)
number += 1
break
ไว้ใช้หยุด loopcontinue
เอาไว้ใช้ข้ามโค๊ดส่วนอื่นๆภายใน loop
Functions
- ฟังค์ชันใน Python ประกาศด้วย keyword
def
เป็นส่วนของ code block
def say_hi():
print("Hello")
- ฟังค์ชันสามารถรับ parameter ก็ได้เช่นกัน โดยกำหนด parameters ภายใน
()
def sum(a, b):
print(a + b)
- ฟังค์ชันสามารถเซต default parameter ได้ในกรณีที่เราไม่ได้ส่ง parameter ให้กับฟังค์ชัน เช่น
def say_hi(name='John Doe'):
print("Hello %s" % name)
say_hi() # Hello John Doe
Classes and objects
- object คือส่วนที่รวมตัวแปร (variables) และฟังค์ชัน (function) โดย object ถูกสร้างมาจาก class
- class ก็คือรูปแบบ หรือ template ที่เอาไว้สร้าง object
หากใครไม่รู้จัก Class หรือ Object แนะนำให้อ่านเรื่อง OOP ประกอบครับ concept เดียวกัน เหมือนกันทุกภาษา
- การสร้างคลาสใน Python
class MyClass:
name = "John Doe"
def greeting(self):
print("Hello! %s" % self.name)
- การสร้าง object จาก class
MyClass
my_object = MyClass()
my_object.greeting() # Hello! John Doe
my_object.name = "Jane Doe"
my_object.greeting() # Hello! Jane Doe
- ใช้
self
เป็น parameter แรกของ method และเข้าถึงตัวแปรname
ในคลาสด้วยself.name
เพราะself
จะ refer ไปที่ object ที่สร้างขึ้น __init__
เป็นฟังค์ชันที่เอาไว้สำหรับกำหนดค่าเริ่มต้นให้กับ object (มักจะมี parameter แรกเป็นself
) จะถูกเรียกเมื่อ object ถูกสร้างขึ้น
Modules and packages
- module คือไฟล์ Python ที่มีนามสกุล
.py
- module สามารถ import จาก module อื่นๆ ได้ด้วย keyword
import
- สามารถ เลือก import เฉพาะฟังค์ชันก็ได้ เช่น
from my_module import hello_world
- Standard Library ของ Python สามารถดูเพิ่มเติมได้ที่ The Python Standard Library
File input/output
- ฟังค์ชัน
open
เอาไว้สำหรับเปิดไฟล์ โดยรับ parameter เป็น ชื่อไฟล์ และ ออปชั่น เช่น
open("README.md", "w") # (write) เขียนไฟล์ชื่อ README.d
open("README.md", "r") # (read) อ่านไฟล์ชื่อ README.md
- ตัวอย่างการอ่านไฟล์ใน Python
f = open("input.txt", "r")
for line in f.readlines(): # read lines
print(line)
print(f.readline()) # ปริ้นเฉพาะบรรทัดแรก
f.close() # ควรจะ close() ทุกครั้ง
- ใช้คีย์เวิร์ด
"a"
เพื่อเขียนไฟล์ต่อจากข้อมูลเดิม ถ้าใช้"r"
จะลบข้อมูลเก่าแล้วเขียนทับ
file = open("content.txt", "a")
# code goes here
file.close()
จบ :)
Additional Resources
สำหรับคอร์ส หรือ Tutorials ต่างๆ ที่ผมรู้สึกว่าน่าสนใจ มีประโยชน์และถือเป็นแหล่งเรียนรู้ของผมด้วย กำลังพยายามนั่งศึกษา บางส่วนก็ยังไม่ได้อ่าน แต่ก็ลิสท์ไว้ก่อน (มีทั้งฟรีและเสียตัง) ก็จะมีดังนี้ครับ
- Authors
- Name
- Chai Phonbopit
- Website
- @Phonbopit