Python
ACS First meet Python class
Python เป็นหนึ่งในภาษาที่ได้รับความนิยมสูงในช่วงหลายปีที่ผ่านมา ด้วยความสามารถที่หลากหลายและเหมาะสมกับการพัฒนาซอฟต์แวร์และการแก้ปัญหาทางด้านคอมพิวเตอร์ ในเนื้อหาที่จัดเตรียมนี้จะครอบคลุมทั้งพื้นฐานของภาษา Python รวมถึงเทคนิคเล็กๆ น้อยๆ ทั้งนี้หวังว่าผู้เรียนจะได้ความรู้เกี่ยวกับภาษา Python ที่มากขึ้น
Installation
การติดตั้ง Python และเลือกใช้ IDE (Integrated Development Environment) เป็นขั้นตอนแรกและสำคัญในการเริ่มต้นเขียนโปรแกรม Python โดยเราสามารถเลือกติดตั้ง python เวอร์ชันต่างๆ จาก https://www.python.org/downloads/
หลังจากติดตั้ง Python แล้วก็สามารถใช้งาน Python ได้เลยใน terminal เพียงแต่อาจทำให้การเริ่มต้นการเขียนโปรแกรมภาษา Python นั้นยากเกินไป จึงแนะนำให้ติดตั้ง IDE (Integrated Development Environment) เพิ่มเติม
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) เป็นต้น
2). PyCharm: เป็น Integrated Development Environment (IDE) ที่เปิดตัวให้บริการสำหรับการพัฒนา Python โดยเฉพาะ มีความสามารถที่ช่วยให้นักพัฒนาเขียนและจัดการโค้ด Python ได้อย่างมีประสิทธิภาพ ซึ่งรวมถึงคุณสมบัติที่ช่วยในการระบุข้อผิดพลาด (code inspections), ตรวจสอบโค้ดเนื้อหานี้หน้าใส่โค้ด (code completion), การรันและเทสโค้ด, การจัดการเทมเพลต, และฟังก์ชันอื่นๆ ที่เกี่ยวข้อง
อีกหนึ่งทางเลือกหนึ่งคือการใช้ Online IDE ซึ่งสามารถเข้าไปเขียนโค๊ดในเว็บไซต์ออนไลน์ได้โดยที่ไม่จำเป็นต้องติดตั้งอะไรเพิ่มเติม Online IDE ที่เป็นที่นิยมสำหรับ Python ได้แก่
1).Repl.it (https://replit.com/)
2). Google colab (https://colab.research.google.com/)
Text Editor
ในเนื้อหานี้จะสอนวิธีการใช้ VScode พร้อมกับ UI การใช้งานเบื้องต้น ซึ่งเมื่อเปิดโปรแกรมเข้ามาก็จะได้หน้าต่าง VScode แบบตัวอย่างด้านล่าง
ก่อนที่จะไปทำความรู้ตัว vscode ให้ลองกดเข้าไปที่ extension จากนั้น search คำว่า python และทำการติดตั้งเสียก่อน
เมื่อติดตั้งเสร็จหลังจากนี้ให้กด Open Folder จากนั้นให้เลือก Folder ที่ต้องการ และกด Yes, I trust the authors.
จากนั้นให้กดสร้างไฟล์ใหม่ขึ้นมา และตั้งชื่อตามที่ต้องการแต่ต้องลงท้ายด้วย .py ( .py เป็นนามสกุลของไฟล์ python )
แล้วเราก็จะได้ หน้าต่างโค๊ดมาให้เขียน ซึ่งสามารถกดรันผ่าน ปุ่มรันบนขวามือได้
เมื่อกดรันหน้าต่าง terminal ก็จะปรากฏขึ้นมา
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
ได้ เราลองมาเริ่มโดยการสร้างโปรแกรมเดิมแต่เปลี่ยนมาใช้ 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")