Skip to main content

Python

ACS First meet Python class

            Python เป็นหนึ่งในภาษาที่ได้รับความนิยมสูงในช่วงหลายปีที่ผ่านมา ด้วยความสามารถที่หลากหลายและเหมาะสมกับการพัฒนาซอฟต์แวร์และการแก้ปัญหาทางด้านคอมพิวเตอร์ ในเนื้อหาที่จัดเตรียมนี้จะครอบคลุมทั้งพื้นฐานของภาษา Python รวมถึงเทคนิคเล็กๆ น้อยๆ ทั้งนี้หวังว่าผู้เรียนจะได้ความรู้เกี่ยวกับภาษา Python ที่มากขึ้น

Installation

การติดตั้ง Python และเลือกใช้ IDE (Integrated Development Environment) เป็นขั้นตอนแรกและสำคัญในการเริ่มต้นเขียนโปรแกรม Python โดยเราสามารถเลือกติดตั้ง python เวอร์ชันต่างๆ จาก https://www.python.org/downloads/ 

image.png

หลังจากติดตั้ง Python แล้วก็สามารถใช้งาน Python ได้เลยใน terminal เพียงแต่อาจทำให้การเริ่มต้นการเขียนโปรแกรมภาษา Python นั้นยากเกินไป จึงแนะนำให้ติดตั้ง IDE (Integrated Development Environment) เพิ่มเติม

image.png

IDE (Integrated Development Environment)

ถ้าต้องการติดตั้ง IDE ลงบนเครื่องหลังจาก ติดตั้ง Python เสร็จเรียบร้อยแล้วสามารถ เลือก IDE ที่ต้องได้ ที่แนะนำหลักๆก็จะมี 2 IDE ที่เป็นยอดนิยมสำหรับ ภาษา Python

1). Visual Studio Code (VSCode): เป็น Text Editor ที่แสดงความสามารถที่น่าประทับใจในการเขียนโปรแกรม Python ด้วยฟีเจอร์เช่น การเน้นโค้ด (syntax highlighting), ตัวช่วยในการแก้ไขข้อผิดพลาด (linter), การค้นหาและเยี่ยมชมโค้ด (code navigation), ฟังก์ชันและการเทมเพลตอัตโนมัติ (code snippets), การเชื่อมต่อกับระบบควบคุมเวอร์ชัน (version control integration) เป็นต้น

image.png

2). PyCharm: เป็น Integrated Development Environment (IDE) ที่เปิดตัวให้บริการสำหรับการพัฒนา Python โดยเฉพาะ มีความสามารถที่ช่วยให้นักพัฒนาเขียนและจัดการโค้ด Python ได้อย่างมีประสิทธิภาพ ซึ่งรวมถึงคุณสมบัติที่ช่วยในการระบุข้อผิดพลาด (code inspections), ตรวจสอบโค้ดเนื้อหานี้หน้าใส่โค้ด (code completion), การรันและเทสโค้ด, การจัดการเทมเพลต, และฟังก์ชันอื่นๆ ที่เกี่ยวข้อง

image.png

อีกหนึ่งทางเลือกหนึ่งคือการใช้ Online IDE ซึ่งสามารถเข้าไปเขียนโค๊ดในเว็บไซต์ออนไลน์ได้โดยที่ไม่จำเป็นต้องติดตั้งอะไรเพิ่มเติม Online IDE ที่เป็นที่นิยมสำหรับ Python ได้แก่ 

1).Repl.it (https://replit.com/)

2). Google colab (https://colab.research.google.com/)

image.pngimage.png

Text Editor

ในเนื้อหานี้จะสอนวิธีการใช้ VScode พร้อมกับ UI การใช้งานเบื้องต้น ซึ่งเมื่อเปิดโปรแกรมเข้ามาก็จะได้หน้าต่าง VScode แบบตัวอย่างด้านล่าง

image.png

ก่อนที่จะไปทำความรู้ตัว vscode ให้ลองกดเข้าไปที่ extension จากนั้น search คำว่า python และทำการติดตั้งเสียก่อน

image.pngimage.png

เมื่อติดตั้งเสร็จหลังจากนี้ให้กด Open Folder จากนั้นให้เลือก Folder ที่ต้องการ และกด Yes, I trust the authors. 

image.png

จากนั้นให้กดสร้างไฟล์ใหม่ขึ้นมา และตั้งชื่อตามที่ต้องการแต่ต้องลงท้ายด้วย .py ( .py เป็นนามสกุลของไฟล์ python )

image.png

แล้วเราก็จะได้ หน้าต่างโค๊ดมาให้เขียน ซึ่งสามารถกดรันผ่าน ปุ่มรันบนขวามือได้

image.png

เมื่อกดรันหน้าต่าง terminal ก็จะปรากฏขึ้นมา

image.png

Functions & Variables

Built-in functions


function หรือคำสั่งที่พื้นฐานที่สุดในการเขียนโปรแกรม คือ การแสดงผลลงบนหน้า terminal

โดยใน python นั้นจะมีคำสั่ง print ซึ่งสามารถใช้ได้ดังนี้ 

print("Hello, world")

ผลลัพธ์:

Hello, world

คำสั่ง print นั้นจะรับค่า (argument) เข้าไป และแสดงผลออกมาบนหน้า terminal  โดยในที่นี้ที่มี "Hello, world" เป็น argument

คำสั่ง print รวมถึงบางคำสั่ง สามารถเรียกใช้โดยไม่ใส่ค่า argument ลงไปได้ ตัวอย่างเช่น

print()

โดยผลลัพธ์จะเป็นการเว้นบรรทัดเพียงอย่างเดียว

เนื่องจากโปรแกรมนั้นจะทำงานตามโค้ดจากบนลงล่าง ทำให้คำสั่งที่เราเอาไว้ข้างบนจะทำงานก่อนคำสั่งที่อยู่ด้านล่าง เช่น

print("Hey! I'm in the first line.")
print("But I'm in the second line.")

ผลลัพธ์:

Hey! I'm in the first line.
But I'm in the second line.

Bugs

ในการเขียนโปรแกรม บัคเป็นสิ่งที่เราไม่สามารถเลี่ยงได้  โดยบัคนั้น คือ การที่โปรแกรมไม่ได้ทำงานตามที่คาดหวังไว้ ซึ่งความผิดนั้นก็มักเกิดจากตัวผู้เขียนเอง ตัวอย่างเช่น

print("Hello, world"

ผลลัพธ์:

  File "c:\Users\name\Desktop\filename\hello.py", line 1
    print("Hello, world"
         ^
SyntaxError: '(' was never closed

จะเห็นว่าโค้ดข้างต้นขาดวงเล็บปิด ซึ่งทำให้ compiler จะแสดง error ออกมา  โดยส่วนใหญ่แล้วข้อความ error นั้นจะบอกว่าข้อผิดพลาดนั้นเกิดที่ไหน และให้คำแนะนำในการแก้ปัญหา

ดังนั้นความสามารถในการทำความเข้าใจข้อความ error ก็เป็นสิ่งที่จำเป็นกับการเขียนโปรแกรม ถึงแม้ว่าจะไม่มีใครต้องการให้มันเกิดก็ตาม

Variables


variable หรือตัวแปร เป็นตัวที่ใช้ในการเก็บข้อมูล  คล้ายกับในทางคณิตศาสตร์ที่จะมีตัวแปรซึ่งแทนค่าตัวเลขต่างๆ

ก่อนจะใช้ตัวแปรนั้น ต้องมีการประกาศตัวแปรขึ้นมาก่อน โดยการเขียนในรูปแบบดังนี้

x = 2

สังเกตว่าจะมีเครื่องหมายเท่ากับ = อยู่ตรงกลาง  โดยในทางโปรแกรมมิ่ง เครื่องหมายเท่ากับทำหน้าที่ assign ค่าทางด้านขวาให้กับตัวแปลทางด้านซ้าย

หลังจากนั้นเราสามารถนำค่าที่เก็บในตัวแปรมาใช้ได้ โดยการเขียนชื่อตัวแปรนั้นใส่ลงใน function ดังนี้

x = 2
print(x)

ผลลัพธ์:

2

ตัวแปรนั้นสามารถเก็บค่าได้หลายประเภท โดยในที่นี้เราจะกล่าวถึงแค่ตัวเลข และข้อความ

Improving Our Python Program


เราสามารถพัฒนาโปรแกรมของเราต่อได้ โดยการถามชื่อกับ user และพิมพ์มันออกมาเพื่อทักทาย

โดยใน python ก็มีคำสั่งสำหรับการรับค่ามาจาก user นั่นคือคำสั่ง input

input()
print("Hello, world")

เมื่อรันแล้วหน้า terminal จะทำการหยุดเพื่อรอให้ user ใส่ input ลงไป แล้วโค้ดจึงจะทำงานต่อ

แต่ด้วยโค้ดเพียงเท่านี้ยังไม่มีอะไรเกิดขึ้น แต่เมื่อเราได้ input มาจาก user แล้ว เราก็สามารถนำข้อมูลนั้นมาเก็บลงในตัวแปรต่อไปได้ 

Input Value


โดยการเขียนคล้าย ๆ กับรูปแบบที่เราเคยพูดถึงในหัวข้อ variable เราสามารถนำค่าที่ได้มาเก็บลงในตัวแปรได้ ดังนี้

print("What's your name?")
name = input()
print("Hello")
print(name)

ผลลัพธ์:

What's your name?
David
Hello
David

เมื่อพิมพ์คำว่า David ลงไป โปรแกรมก็จะแสดงผล David ออกมาเช่นกัน

คำสั่ง input นั้นยังสามารถรับ argument ได้ โดยจะรับ prompt เป็น argument (prompt คือ สิ่งที่โปรแกรมแสดงออกมาเมื่อรอให้เราพิมพ์ข้อความ) ทำให้เราสามารถเขียนโค้ดได้ดังนี้

name = input("What's your name? ")
print("Hello")
print(name)

ผลลัพธ์:

What's your name? Fig
Hello
Fig

คำสั่ง print สามารถแสดงผลหลายค่าในบรรทัดเดียวได้ โดยการใช้เครื่องหมาย , ซึ่งจะแสดงค่าทั้งสองออกมาใน terminal ซึ่งคั่นด้วยเว้นวรรค

 name = input("What's your name? ")
 print("Hello,", name)

ผลลัพธ์:

What's your name? Steve
Hello, Steve

ในโค้ดเบื้องต้นนี้ เราได้ตั้งชื่อตัวแปรว่า name  โดยใน python นั้นเราสามารถตั้งชื่อตัวแปรได้เอง แต่ก็จะมีข้อจำกัดบางอย่าง ซึ่งเราจะพูดถึงในเรื่องถัดไป

Naming


การตั้งชื่อตัวแปรนั้นก็ถือเป็นสิ่งสำคัญในการเขียนโปรแกรม เพราะการตั้งชื่อที่ดีนั้นจะทำให้โค้ดนั้นอ่านง่ายขึ้น

ก่อนที่เราจะพูดเรื่องแนวทางการตั้งชื่อตัวแปร เราต้องมาดูถึงข้อจำกัดในการตั้งชื่อก่อน โดยจะมีข้อจำกัดอยู่ดังนี้

  • ชื่อนั้นสามารถมีได้แค่ ตัวอักษร ตัวเลข และ _

user_score1

  • สามารถ้ตัวใหญ่ได้ แต่ตัวอักษรแรกนั้นควรจะเริ่มต้นด้วยตัวเล็ก

itemList

  • ตัวอักษรแรกไม่สามารถเป็นตัวเลขได้

1username

  • ห้ามใช้คำที่อยู่ใน Reserved words

continue

  • ตัวอย่างชื่อที่ไม่สามารถใช้งานได้

var-name

input number

เมื่อชื่อตัวแปรที่เราตั้งนั้นประกอบไปด้วยคำหลายคำ จะมีรูปแบบการเขียนที่เป็นที่นิยมดังนี้

Snake Case

first_name     last_name     create_time

Camel Case

firstName     lastName     createTime

การใช้นั้นจะขึ้นอยู่กับความนิยมของผู้เขียนในแต่ละโปรแกรม และ อาจขึ้นอยู่กับทีมที่ทำงานที่จะตกลงกันเพื่อให้การตั้งชื่อมีความสอดคล้องกันในการทำงาน

Comments


เราสามารถเขียน note ไว้ได้ว่าโค้ดส่วนนั้นทำงานอย่างไรภายในโปรแกรม เพื่อที่จะทำให้ผู้อื่นนั้นสามารถอ่านโค้ดได้ง่ายขึ้น หรือแม้แต่ตัวเราเองที่กลับมาอ่านด้วยเช่นกัน

โดยการใช้เครื่องหมาย # นำหน้าข้อความในบรรทัดนั้น ๆ จะทำให้ข้อความไม่ถูกนำไปทำงานในโปรแกรม เช่น

# get name from user
name = input("What's your name? ")
# print Hello to the user
print("Hello,", name)

เราสามารถ comment หลายบรรทัดได้โดยการพิมพ์เครื่องหมาย ' หรือ " สามครั้งทั้งเปิดและปิด ดังนี้

'''
this
is
comment
'''

"""
and
this's
too
"""


Data Types


ค่าที่เก็บภายในตัวแปรนั้นมีอยู่หลายประเภท โดยที่แต่ละประเภทก็จะมีความสามารถ และลักษณะการใช้งานที่แตกต่างกันไป

โดยเราจะเริ่มจากตัวที่เราคุ้นชินกันมากที่สุด

String


string หรือ str เป็นลำดับของตัวอักษรหลายตัวเรียงต่อกัน ซึ่งในการประกาศตัวแปรนั้นค่าของมันจะต้องอยู่ภายในเครื่องหมาย Double quote " หรือ Single quote ' เช่น

name = 'David Malan'
str1 = "This is a string"

string นั้นสามารถนำมารวมกันได้โดยการใช้เครื่องหมาย + ดังนี้

str1 = "I love"
str2 = "banana"
str3 = str1 + " " + str2
print(str3)

ผลลัพธ์:

I love banana

string ใน python นั้นยังมีความพิเศษอีกอย่างนั่นก็คือ string สามารถนำมาคูณกับเลขได้ ซึ่งจะทำให้ string บวกกับตัวมันเองเป็นจำนวน n ครั้ง

print("lol" * 5)

ผลลัพธ์:

lollollollollol

string ยังสามารถเรียกใช้คำสั่งอื่น ๆ เพิ่มได้อีก ถ้าใครสนใจก็สามารถไปดูเพิ่มเติมได้ Python string method

Integer


integer หรือ int คือเลขจำนวนเต็ม

เรานั้นคงคุ้นเคยกันดีกับเครื่องหมายทางคณิตศาสตร์ +, -, *, / แต่เราจะมีอีกเครื่องหมายหนึ่งเพิ่มขึ้นมา คือ modulo % คือการหาเศษที่เหลือจากการหาร  เราสามารถเขียนสมการได้ง่าย ๆ ดังนี้

x = 1
y = 2
z = x + y
print(z)
print(z - x)
print(y * 4)
print(z / 3)
print(4 % z)

ผลลัพธ์:

3
2
8
1
1

เราสามารถนำมารวมกับเรื่องที่เราเรียนผ่านมาได้โดยการสร้างเครื่องคิดเลขง่าย ๆ

x = input("Enter first value: ")
y = input("Enter second value: ")
z = x + y
print("result =", z)

ผลลัพธ์:

Enter first value: 1
Enter second value: 2
result = 12

จะเห็นว่าเมื่อเราใส่ 1 และ 2 ลงไป ผลลัพธ์ที่ได้กลับเป็น 12 แทนที่จะเป็น 3

ผลลัพธ์แบบนี้นั้นเกิดจากการที่เมื่อเรารับค่าด้วยคำสั่ง input แล้วค่าที่ได้มานั้นจะเป็น string ทำให้เมื่อนำ "1" และ "2" มาบวกกัน จึงกลายเป็นการบวก string แทน

เราสามารถตรวจสอบได้โดยการใช้คำสั่ง type()

x = input("Enter first value: ")
print(type(x))

ผลลัพธ์:

Enter first value: 1
<class 'str'>

เราสามารถแก้ไขโดยการแปลงตัวแปรให้เป็น integer ก่อนนำมาคำนวน  โดยใช้คำสั่ง int(x) เรียกว่า casting ซึ่งเป็นการที่ค่านั้นถูกเปลี่ยนประเภทชั่วคราว โดยสามารถใช้ได้ดังนี้

x = input("Enter first value: ")
y = input("Enter second value: ")
z = int(x) + int(y)
print("result =", z)

ผลลัพธ์:

Enter first value: 2
Enter second value: 3
result = 5

เราสามารถเขียนโค้ดให้สั้นลงได้โดยการทำเช่นนี้

x = int(input("Enter first value: "))
y = int(input("Enter second value: "))
print("result =", x + y)

โดยเป็นการนำ int() มาครอบคำสั่ง input  โดยเมื่อทำงานโปรแกรมจะทำตำสั่ง input ที่อยู่ในลงเล็บก่อน แล้วจึงค่อยแปลงค่าที่ได้ให้กลายเป็น int แล้วเก็บไว้ในตัวแปร

Readability Wins


การเขียนโปรแกรมในการทำงานอย่างหนึ่งนั้นสามารถทำได้หลายวิธี แต่สิ่งที่สำคัญที่สุดอาจไม่ใช่ความสั้นของโค้ดเสมอไป

ยกตัวอย่างถ้าเรานำโปรแกรมล่าสุดมาย่อให้เหลือเพียงบรรทัดเดียว จะได้ว่า

print(int(input("Enter first value: ")) + int(input("Enter second value: ")))

ถึงแม้จะสั้นลง แต่ก็อ่านได้ยากขึ้นด้วย ดังนั้นเราจึงควรให้ความสำคัญกับความอ่ายง่ายด้วยเช่นกัน

Float


float คือเลขที่มีจุดทศนิยม ซึ่งทำให้เราสามารถคำนวนค่าที่มีความละเอียดได้ โดยวิธีในการประกาศตัวแปรนั้นจะเหมือนกับ int และมี operator เหมือนกัน

x = 1.5
y = 3.42
print(x + y)

ผลลัพธ์:

4.92

เราสามารถทำให้โปรแกรมเครื่องคิดเลขของเราคิดเลขทศนิยมได้โดยการเปลี่ยนจาก int เป็น float

x = float(input("Enter first value: "))
y = float(input("Enter second value: "))
z = x / y
print("result =", z)

เมื่อใส่ค่าลงไปเป็น 2 และ 3 จะทำให้ได้ผลลัพธ์เป็น 0.666666666 ไปเรื่อยๆ

แต่เราสามารถแก้ปัญหาได้ด้วยการปัดเลขขึ้นโดยใช้คำสั่ง round

x = float(input("Enter first value: "))
y = float(input("Enter second value: "))
z = round(x / y, 2)
print("result =", z)

โดยที่จะมี 2 arguments โดยที่ตัวแรกคื่อค่าที่เราต้องการจะปัด และเลขหลังคือจำนวนเลขทศนิยมที่เราต้องการเหลือไว้

ทำให้จะได้ผลลัพธ์:

Enter first value: 2
Enter second value: 3
result = 0.67

แต่เราก็ยังสามารถแก้ได้อีกวิธีโดยการใช้ fstring

x = float(input("Enter first value: "))
y = float(input("Enter second value: "))
z = x / y
print(f"result = {z:.2f}")

โดยการที่เราเพิ่ม f ลงไปหน้า string นั้นทำให้ python นั้นรู้ว่านี้เป็น string พิเศษ

fstring นั้นทำให้เราสามารถใส่ตัวแปรลงไปใน string ได้เลย โดยการใส่ไว้ในวงเล็บปีกกา {}  และทำให้อยู่ในรูปแบบต่าง ๆ ได้

อย่างเช่นในตัวอย่างนี้ก็จะทำให้ float นั้นมีเลขหลังทศนิยม 2 เลข 

Boolean


boolean หรือ bool นั้นใช้แสดงค่าจริง และเท็จ  ซึ่งเป็นค่าที่ได้จากการเปรียบเทียบค่า

print(1 > 2)
print(0.5 <= 5)
print(True == False)
print(1 != 0)
print("text" == "text")

ผลลัพธ์:

False
True
Flase
True
True

สัญลักษณ์ที่ใช้ในการเปรียบเทียบมีดังนี้ < น้อยกว่า<= น้อยกว่าหรือเท่ากับ > มากกว่า >= มากกว่าหรือเท่ากับ == เท่ากับ != ไม่เท่ากับ

List


list เป็นหนึ่งในประเภทข้อมูล ที่ใช้ในการเก็บค่าหลายค่าในตัวเอง

เมื่อประกาศตัวแปร จะใช้วงเล็บ [] ครอบชุดของข้อมูลไว้ เช่น

list1 = [1, 2.2, "string", True]

โดยที่ list นั้นสามารถเก็บตัวแปรได้หลายประเภท แม้กระทั่ง list ก็ยังเก็บใน list ได้

mainList = [[1, 2, 3], [3, 2, 1]]

โดยลำดับใน list นั้นจะมีความสำคัญ เพราะเมื่อเราต้องการที่จะดึงค่าที่อยู่ใน list ออกมานั้น เราจะต้องระบุถึงตำแหน่ง (index) ของมัน

โดย index ของสมาชิกใน list นั้น จะเริ่มที่ 0 จากนั้นก็ 1, 2, 3 ไปเรื่อย ๆ

numList = ["John", "Smith", 1969, 61]
print(numList[0])
print(numList[1])
print(numList[2])
print(numList[3])

ผลลัพธ์:

John
Smith
1969
61

list นั้นยังสามารถเพิ่มค่าเข้าไปได้โดยการใช้คำสั่ง append

listId = [65, 9, 5, 4]
listId.append(61)
print(listId)

ผลลัพธ์:

[65, 9, 5, 4, 61]

ยังมีคำสั่งอื่น ๆ อีก ถ้าใครสนใจสามารถไปดูเพิ่มเติมได้ในนี้ more on lists

User-defined Function


เราได้ใช้ function ของ python กันมาซักพักแล้ว แต่จริง ๆ แล้ว เราก็สามารถกำหนด function ขึ้นมาเองได้นะ

การกำหนด function ขึ้นมาเอง จะช่วยให้เราไม่จำเป็นที่จะต้องก็อปโค้ดชุดเดิม ถ้าเราต้องการที่จะใช้ซ้ำ

โดย def คือคำสั่งที่ใช้ในการสร้าง function

def hello():
	print("Hello")

myFunction คือชื่อของ function ที่เราสามารถกำหนดเองได้  () วงเล็บที่ว่างเปล่านั้นหมายถึง function นี้จะไม่มีการรับค่า input หรือก็คือ argument ใด ๆ และ : เป็นการแสดงว่าย่อหน้าหลังจากนี้คือส่วนหนึ่งของ function

แต่การสร้าง function นั้นยังไม่ทำให้เกิดอะไรขึ้น เราต้องทำการเรียกใช้ก่อน

def hello():
	print("Hello")
    
hello()

เมื่อรันแล้วก็จะได้ Hello ออกมา

เราสามารถพัฒนาโค้ดนี้ต่อได้โดยการทำให้ function ของเรารับค่า argument แล้ว print ออกมาเป็นประโยค

def hello(name):
	print("Hello,", name)

username = input("What's your name? ")
hello(username)

จาก def myFunction(name):  name ในวงเล็บนั้นคือ parameter ซึ่งคือตัวแปรที่กำหนดขึ้นมาใช้ภายใน function โดยค่าของตัวแปรนั้นจะได้มาจากการใส่ argument ตอนเรียกใช้ function

และในส่วนของ hello(username) ก็คือการเรียก function ที่เราสร้างโดยใส่ username เป็น argument

แต่เมื่อเรากำหนด parameter แล้ว เราก็ไม่สามารถที่จะเรียก function เปล่า ๆ ได้

วิธีการแก้ปัญหาก็คือ ตั้งค่าเริ่มต้นให้กับ parameter ซึ่งจะทำให้เมื่อไม่มี argument ตัวแปรจะมีค่าเท่ากับค่าเริ่มต้นแทน ดังนี้

def hello(name = "world"):
	print("Hello,", name)

hello()
username = input("What's your name? ")
hello(username)

ผลลัพธ์:

Hello, world
What's your name? Steve
Hello, Steve

Main()


เราไม่จำเป็นที่จะต้องเอา function ไปไว้บนสุดของโค้ดก็ แต่เนื่องจาก function นั้นต้องมีการประกาศก่อนถึงจะสามารถเรียกใช้ได้ เราจึงต้องมีการสร้าง main function เพื่อทำให้โค้ดหลักของเรายังไม่ทำงานจนกว่าจะมีการประกาศ function จนครบ 

def main():
  	hello()
  	username = input("What's your name? ")
  	hello(username)

def hello(name = "world"):
	print("Hello,", name)

แต่ด้วยโค้ดเท่านี้โปรแกรมยังไม่ทำงาน เราต้องมีการเรียก main ในตอนสุดท้ายของโปรแกรมด้วย

def main():
  	hello()
  	username = input("What's your name? ")
  	hello(username)

def hello(name = "world"):
	print("Hello,", name)
    
main()

Returning Values


จากที่ผ่านมาเราได้สร้าง function เพื่อให้มันใช้คำสังเพียงอย่างเดียว 

แต่เราก็ยังสามารถทำให้ function นั้นส่งค่าคืนกลับมาให้ตอนเรียกได้ด้วยเช่นกัน เหมือนกับการใช้ int() ที่ใส่ string เข้าไป แล้วได้ int กลับมา การส่งข้อมูลกลับมานี้เราเรียกว่า return value

def square(n):
	return n * n

x = int(input("Enter x value: "))
print("x value is", square(x))

หลักการทำงานคือ x ได้ถูกส่งไปยัง square จากนั้นก็คำนวน x * x แล้วถูกส่งกลับมาที่ print

แถม:

การคำนวนเลขยกกำลังใน python นั้นสามารถทำได้หลายวิธี วิธีแรกคือในตัวอย่างข้างต้น แต่เรายังสามารถหาได้อีกด้วยวิธีดังนี้

x ** 2
pow(x, 2)

การใช้ * สองตัวทำให้ python นับตัวตามหลังว่าเป็นเลขชี้กำลัง หรือการใช้คำสั่ง pow() ซึ่งจะรับ argument เป็น ฐานของเลขยกกำลัง และเลขชี้กำลังตามลำดับ

Conditionals


การสร้างเงื่อนไขจะช่วยให้โปรแกรมของเราทำงานตามที่เรากำหนดโดยอิงจากเงื่อนไขที่เรากำหนดให้

ใน python นั้นก็มีตัวเปรียบเทียบไว้ให้ใช้อยู้แล้ว จากที่เราเคยพูดถึงกันไปในหัวข้อ boolean ซึ่งประกอบไปด้วย

< <= > >= == !=

if-else Statements


เราสามารถนำเงื่อนไขเหล่านี้มาใช้ได้โดยใช้ if

text = input("Enter password")
if text == "password1234": 
	print("Welcome back.")

หลักการทำงานก็คือ เมื่อพิมพ์ password1234 ลงไป โปรแกรมจะเก็บลงไปใน text แล้วจะทำการเปรียบเทียบว่า text เท่ากับ "password1234" หรือไม่ ซึ่งจะได้ผลลัพธ์ว่าเป็นจริง จากนั้นจึงแสดงผล Welcome back ออกมา

ถ้าเราต้องการบอกว่ารหัสนั้นผิดเราสามารถทำได้โดยการใช้ else

text = input("Enter password: ")
if text == "password1234": 
	print("Welcome back.")
else:
	print("Password incorrect")

else จะทำให้เมื่อกรณีข้างบนเป็นเท็จ จะทำงานคำสั่งใน else แต่ถ้าข้างมีกรณีที่เป็นจริง else จะไม่ทำงาน

Control Flow, Elif


เราลองมาเขียนโปรแกรมที่เปรียบเทียบระหว่างสองค่ากัน

x = int(input("What's x? "))
y = int(input("What's y? "))

if x < y:
	print("x is less than y")
if x > y:
	print("x is greater than y")
if x == y:
	print("x is equal to y")

จากโค้ดข้องต้นจะเห็นว่ามีการสร้างเงื่อนไขหลายตัวเรียงกัน โดยขั้นตอนแรกจะตรวจสอบ if ตัวแรก จากนั้นก็ if ตัวที่สอง และไปถึง if ตัวสุดท้ายในที่สุด การเขียนแบบนี้เรียกว่า control flow

สามารถแสดงเป็นกราฟได้ดังนี้

ถึงแม้ว่าโปรแกรมจะทำงานได้ แต่การที่เราต้องตวรจสอบสามเงื่อนไขทุกครั้งถึงแม้ว่าจะถูกตั้งแต่เงื่อนไขแรก ก็คงไม่ใช่เรื่องที่ดี

เราสามารแก้ได้ด้วยการใช้ keyword ใหม่ นั่นคือ elif

x = int(input("What's x? "))
y = int(input("What's y? "))

if x < y:
	print("x is less than y")
elif x > y:
	print("x is greater than y")
elif x == y:
	print("x is equal to y")

elif นั้นย่อมาจาก else-if ซึ่งจะทำหน้าที่เป็นเหมือนกรณีรอง แปลว่าเมื่อกรณีก่อนหน้าไม่เป็นจริงจึงจะทำการตรวจสอบเงื่อนไข แต่ถ้ามีกรณีก่อนหน้าที่เป็นจริงจะทำการข้ามไป (เหมือนกับ else)

สามารถแสดงเป็นกราฟได้ดังนี้

แต่เราก็ยังสามารถพัฒนาต่อได้เพราะเงื่อไขสุดท้าบนั้นไม่จำเป็นต้องตรวจสอบก็เป็นจริงกรณีเดียว เพราะฉะนั้นเราสามารถแทนด้วย else ได้ ดังนี้

x = int(input("What's x? "))
y = int(input("What's y? "))

if x < y:
	print("x is less than y")
elif x > y:
	print("x is greater than y")
else:
	print("x is equal to y")

จะเห็นว่าโปรแกรมมีความซับซ้อนน้อยลง

สามารถแสดงเป็นกราฟได้ดังนี้

or


or ทำให้เราสามารถตั้งเงื่อนไขหลายข้อได้ โดยเหมือนกับตรรกศาสตร์ที่ถ้าเงื่อนไขเป็นจริงหนึ่งข้อก็จะถือว่า นิพจน์นั้นเป็นจริง

โดยเราจะลองใช้ในโปรแกรมเปรียบเทียบว่าค่า x กับ y นั้นเท่ากันหรือไม่

x = int(input("What's x? "))
y = int(input("What's y? "))

if x < y or x > y:
	print("x is not equal to y")
else:
	print("x is equal to y")

ตอนนี้โปรแกรมใช้งานได้แล้ว แต่มันถือว่าดีแล้วหรือยัง

x = int(input("What's x? "))
y = int(input("What's y? "))

if x != y:
	print("x is not equal to y")
else:
	print("x is equal to y")

แทนที่เราจะใช้ or แล้วถามสองคำถาม เราสามารถใช้เครื่องหมายไม่เท่ากับเพื่อถามเลยว่า "x ไม่ท่ากับ y ใช่หรือไม่"

and


คล้ายกับ or แต่ and นั้นทำให้เราสามารถรวมเงื่อนไขหลายข้อให้กลายเป็นเงื่อนไขเดียวได้ดังนี้

score = int(input("Score: "))

if score >= 90 and score <= 100:
    print("Grade: A")
elif score >= 80 and score < 90:
    print("Grade: B")
elif score >= 70 and score < 80:
   print("Grade: C")
elif score >= 60 and score < 70:
    print("Grade: D")
else:
    print("Grade: F")

แต่ถ้าเราลองกลับด้านสมการดังนี้

score = int(input("Score: "))

if 90 <= score and score <= 100:
    print("Grade: A")
elif 80 <= score and score < 90:
    print("Grade: B")
elif 70 <= score and score < 80:
    print("Grade: C")
elif 60 <= score and score < 70:
    print("Grade: D")
else:
    print("Grade: F")

ใน python เราสามารถรวมให้กลายเป็นเงื่อนไขเดียวได้ดังนี้

score = int(input("Score: "))

if 90 <= score <= 100:
    print("Grade: A")
elif 80 <= score < 90:
    print("Grade: B")
elif 70 <= score < 80:
    print("Grade: C")
elif 60 <= score < 70:
    print("Grade: D")
else:
	print("Grade: F")

ถึงแม้ว่าโค้ดจะทำงานได้ดีอยู่แล้ว แต่เราก็ยังสามารถทำให้สั้นลงด้วยการเทียบเฉพาะขั้นต่ำ

score = int(input("Score: "))

if score >= 90:
	print("Grade: A")
elif score >= 80:
	print("Grade: B")
elif score >= 70:
	print("Grade: C")
elif score >= 60:
	print("Grade: D")
else:
	print("Grade: F")

เพราะเมื่อเงื่อนไขก่อนหน้าไม่เป็นจริงแล้ว แปลว่าตัวแปรนั้นมีค่าน้อยกว่าขั้นต่ำของเงื่อนไขก่อนหน้าแน่นอน

สังเกตว่าโปรแกรมสามารถพัฒนาให้ดีขึ้นได้โดยการถามคำถามให้น้อยลง ทำให้โค้ดนั้นอ่านได้ง่ายขึ้น

Modulo


ก่อนหน้านี้เราได้พูดถึงเครื่องหมาย % กันไปแล้ว การนำมาใช้สามารถทำได้หลายแบบ แต่แบบที่ง่ายที่สุดคือใช้หาเลขคู่และเลขคี่

โดยที่เลขที่หาร 2 แล้วไม่เหลือเศษนั้นก็คือเลขคู่ ส่วนเลขที่หาร 2 แล้วเหลือเศษก็คือเลขคี่ ซึ่งสามารถนำมาเขียนโค้ดได้ดังนี้

x = int(input("What's x? "))

if x % 2 == 0:
	print("x is even number")
else:
	print("x is odd number")

Parity Function


ก่อนหน้านี้เราได้พูดถึงเรื่องการสร้าง function ไปแล้ว

เราสามารถสร้าง function มาเพื่อเช็คเลขคู่เลขคี่ได้ แล้วนำมาปรับใช้ได้ดังนี้

def isEven(n):
    if n % 2 == 0:
        return True
    else:
        return False

x = int(input("What's x? "))
if isEven(x):
    print("Even")
else:
    print("Odd")

สังเกตว่าตรง if นั้นไม่มีเครื่องหมายเปรียบเทียบเลย เหตุผลที่ทำงานได้นั้นเกิดจากการที่ function นั้น return ค่ากลับมาเป็น bool (True, False) ดังนั้น if จึงขึ้นอยู่กับว่า isEven เป็น True หรือ False

ใน python นั้น if สามารถเขียนย่อให้อยู่ในบรรทัดเดียวให้เหมือนอยู่ในรูปประโยคได้ดังนี้

def isEven(n):
	return True if n % 2 == 0 else False

x = int(input("What's x? "))
if isEven(x):
	print("Even")
else:
	print("Odd")

บรรทัดที่ 2 จะมีความหมายว่า return ค่าเป็น True ถ้า n % 2 มีค่าเท่ากับ 0 นอกเหนือจากนั้น return ค่าเป็น False

แต่ในเมื่อผลลัพธ์ของสมการ n % 2 == 0 มีค่าเป็นจริง หรือเท็จอยู่แล้ว เราก็สามารถส่งค่านั้นกลับคืนไปได้เลย

def isEven(n):
	return n % 2 == 0

x = int(input("What's x? "))
if isEven(x):
	print("Even")
else:
	print("Odd")

Loops


ใน python หรือ programming language อื่นๆนั้น มีความสามารถในการทำบางอย่างซ้ำไปซ้ำมาได้ ดังนั้นเราจะมาดูกันว่าเรามีสิ่งเหล่านี้ไว้ทำไม แล้วเราสามารถนำมันไปใช้อะไรได้บ้าง

โดยก่อนอื่นเราจะลองสร้างโปรแกรม count.py โดยมีฟังก์ชันการทำงานคือการนับเลข 1 2 และ 3

print(1)
print(2)
print(3)

ถ้าเราต้องการนับถึงแค่ 3 โปรแกรมนี้ก็ยังถือว่าใช้การได้ แต่ถ้าเราต้องนับไปถึง 100 หรือ 1,000 การนั่งพิมพ์ไปเรื่อย ๆ ก็คงไม่ใช่ทางที่ดี

While Loops


เราสามารถแก้ปัญหานี้ได้โดยการใช้ keyword ใหม่ นั้นคือ while

โดยเราจะเริ่มจากการสร้างโปรแกรม cat.py ที่ทำให้พิมพ์ "meow" กี่ครั้งก็ได้

i = 0
while i < 3:
	print("meow")
    i = i + 1

หลักการทำงานนั้นเหมือนกับการเรานำมือขึ้นมานับว่าเราพิมพ์ไปกี่ครั้งแล้ว

โดยเริ่มจาก "meow" ครั้งแรกแล้วเราจึงชูนิ้วขึ้นมาหนึ่งนิ้วเพื่อบอกว่า "นับไป 1 ครั้งแล้วนะ" จากนั้นก็ "meow" ครั้งที่สองแล้วจึงชูนิ้วเพิ่มอีกหนึ่งนิ้วเพื่อบอกว่า "นับไป 2 ครั้งแล้วนะ" และเมื่อเรา "meow" รอบที่สามเราก็ชูนิ้วเพิ่มอีกนิ้ว เมื่อชูนิ้วครบ 3 นิ้ว นั่นก็แปลว่าเราทำครบสามครั้งแล้ว จึงหยุด

หลัง while นั้นก็คือเงื่อนไขโดยเมื่อเงื่อนไขเป็นจริงก็จะทำการรันโค้ดที่อยู่ด้านล่าง (คล้าย ๆ กับ if) เมื่อเสร็จแล้วก็จะกลับมาตรวจสอบเงื่อนไขอีกรอบ ถ้ายังเป็นจริงอยู่ก็จะทำงานต่อ เป็นแบบนี้ไปเรื่อย ๆ จนกว่าเงื่อนไขจะเป็นเท็จ

โดยที่ i มีค่าเท่ากับจำนวนครั้งที่ทำ แล้วทุกครั้งที่โค้ดทำงานค่า i ก็จะเพิ่มขึ้นทีละ 1 ไปเรื่อย ๆ จนกว่า i จะเท่ากับ 3 ซึ่งทำให้เงื่อนไขเป็นเท็จ แปลว่าโค้ดได้ทำงานไปครบ 3 ครั้งแล้วจึงหยุด

สามารถแสดงเป็นกราฟได้ดังนี้

For Loops


ใน python ยังมี loop อีกประเภทซึ่งมีความแตกต่างจาก while 

for ทำให้เราสามารถเข้าถึงสมาชิกแต่ละตัวใน list (iterable) ได้ เราลองมาเริ่มโดยการสร้างโปรแกรมเดิมแต่เปลี่ยนมาใช้ for แทน

for i in [0, 1, 2]:
	print("meow")

ขั้นตอนการทำงานคือ i มีค่าเท่ากับ 0, print("meow")`, i มีค่าเป็น 1, print("meow"), i มีค่าเป็น 2, print("meow") และจบ

สังเกตว่าโค้ดนั้นสั้นลงและดูได้ง่ายขึ้น แต่ก็ยังคงมีปัญหาอยู่  ลองนึกภาพว่าเราต้องพิมพ์เป็นร้อยครั้งดูสิ การเขียนโค้ดที่รองรับกรณีที่ extream ได้เป็นสิ่งที่ดีกว่า เราสามารถแก้ปัญหาได้ดังนี้ 

for i in range(3):
	print("meow")

range(3) ให้ผลลัพธ์เหมือนกับการใช้ [0, 1, 2] แต่

for i in range(1, 6):
  print(i)