หัดเขียน Python เบื้องต้นฟรีด้วยโปรแกรม PyCharm Edu

Published on
Web Development
2015/10/learn-python-with-pycharm-edu
Discord

ช่วงนี้ผมสนใจที่จะหัดเขียน 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 เมื่อติดตั้งเรียบร้อยแล้ว ก็เปิดโปรแกรมขึ้นมาเลย

Video แนะนำ PyCharm Edu

หน้าจอนี้เป็นหน้าจอแรก เมื่อเราเปิดขึ้นมา

PyCharm

หน้าจอ PyCharm เมื่อเปิดขึ้นมาแล้ว จะมีดังนี้

PyCharm Window

  • หมายเลข 1 : ส่วนของบทเรียน โดยปกติจะเป็น Project Structure ของโปรเจ็คนั้นๆ
  • หมายเลข 2 : เป็นส่วนของโปรแกรมที่เราต้องเขียน (ไฟล์นามสกุล .py)
  • หมายเลข 3 : เป็นส่วนของ Task Description เอาไว้บอกว่าแต่ละแบบฝึกหัดต้องทำอะไรบ้าง
  • หมายเลข 4 : Course Progress เอาไว้บอก Progress ว่าเราผ่านไปเท่าไหร่แล้ว
  • หมายเลข 5 : Python Console เป็นส่วนของการรันคำสั่ง console หรือแสดงผลลัพธ์ต่างๆของโปรแกรม เราสามารถพิมพ์คำสั่งต่างๆบน Python Console ได้เลย

วิธีการทำแบบฝึกหัดคือ

  1. อ่าน Task Description
  2. ทำการแก้ไขโค๊ด จากนั้นกดปุ่ม Play เขียวๆ
  3. เมื่อแน่ใจว่ารันถูกต้อง กดเครื่องหมายถูก ใต้ Task Description หากผิดก็จะมี error เตือน
  4. เลื่อนไปข้อถัดไป หาก

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 operator
  • a = 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 ไว้ใช้หยุด loop
  • continue เอาไว้ใช้ข้ามโค๊ดส่วนอื่นๆภายใน 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

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 ต่างๆ ที่ผมรู้สึกว่าน่าสนใจ มีประโยชน์และถือเป็นแหล่งเรียนรู้ของผมด้วย กำลังพยายามนั่งศึกษา บางส่วนก็ยังไม่ได้อ่าน แต่ก็ลิสท์ไว้ก่อน (มีทั้งฟรีและเสียตัง) ก็จะมีดังนี้ครับ

Buy Me A Coffee
Authors
Discord