Python Guideline เขียนพี่เหลือมไพธอนฉบับพื้นฐานเป็นในวันเดียว!!!

Programming Mar 13, 2018

จริงๆบล็อกนี้เขียนไว้นานมาก แต่ยังไม่เสร็จ มีแววจะปล่อยแต่ไม่ได้ปล่อย เลยกลับมาดูแล้วเรียบเรียงใหม่นิดๆหน่อย เพราะช่วงนี้ยุ่งมากจริงๆ

แต่ทั้งนี้ทั้งนั้นสำหรับคนที่ไม่เป็นภาษา python มาก่อน แต่เขียนภาษาอื่นได้อยู่แล้ว เรามีวิธีที่ทำให้มันง่ายขึ้น แบบวันเดียวจบ (เนื่องจาก workshop ที่ไปมา แล้วก็ที่เขาจัด ก็วันเดียวจบเหมือนกัน) แต่อ่านเองวันเดียวไม่จบแน่นอน ดังนั้นเลยสรุปเป็น Guideline ออกมาซะ ชีวิตจะได้ง่ายขึ้น และเอาไปทำแบบฝึกหัดมากขึ้นเนอะ

ก่อนอื่น python ตอนนี้ ที่นิยมใช้กับ คือ python 2.7 เนอะ ปัจจุบัน version 3.6 หล่ะ (ณ วันที่เขียนบล็อกนี้)

ข้อควรระวังอันน่าตกใจ คือ syntax บางอันของ 2.7 และ 3 ขึ้นไป มีไม่เหมือนกันด้วยอ่า
ถ้าจะแนะนำว่าจะใช้ version อะไรดี ตามหลักทั่วไปคือ version ใหม่สุดเนอะ แต่อาจจะแล้วแต่งานที่ทำว่า requirement เขาเอา version ไหนเนอะ

ปล สำหรับ mac os นั้น เขาลงมาให้ทั้งสองเวอร์ชั่นเลยจ้า เย้

มาเริ่มกันเลยดีกว่า

หัวข้อที่ 1 : แนะนำภาษา python

python เวอร์ชั่นปัจจุบัน คือ 3.6 (19 มิถุนายน 2560) run เป็น high-level language มีการแปลภาษาแบบ interpreter คือทำทีละบรรทัด เป็นภาษาที่เรียนรู้ได้ง่าย

ในชีวิตประจำวัน python ถูกนำมาใช้งานหลายอย่าง เช่นการทำ back-end ของ dynamic website, ใช้ในงาน data science, การเขียนโปรแกรมลงบน hardware สำหรับงาน embedded system เป็นต้น

สามารถดาวน์โหลด python มาใช้งานได้ที่

Download Python
The official home of the Python Programming Language
https://www.python.org/downloads/

และมี document วิธีการเขียนโปรแกรมด้วยภาษา python ที่

The Python Standard Library — Python 3.9.6 documentation
https://docs.python.org/3/library/

เราสามารถใช้ editor ในการเขียนโปรแกรมภาษา python ได้หลากหลายโปรแกรม เช่น notepad++, sublinetext, pyCharm เมื่อเราติดตั้งตัว python แล้ว ก็สามารถ run source code ภาษา python ได้

ความแตกต่างของ python 2.7 vs python 3.3 ถึงเวอร์ชั่นปัจจุบันจะเป็น python 3.x แต่มีบางโปรแกรมและบางหน่วยงานใช้ python 2.7 อยู่ ดังนั้นเราจะมาดูความแตกต่างกันระหว่าง 2 เวอร์ชั่นนี้



python 2.7
python 3.x
print
print “hello world”
print (“hello world”)
Integer Division
3/2 = 1
3/2 = 1.5
input value
raw_input()
input()
strip line in file
string.spilt(f.read(), “\n”)
f.read().strip().splitlines()
file mode
rb, wb, ab
r+, w+, a+

การเลือกใช้ python ขึ้นอยู่กับโปรแกรมที่รองรับ และปัจจัยอื่นๆ ที่นอกเหนือจากความใหม่ของเวอร์ชั่น

ปล. เวลาเริ่มเรียนควรเริ่มที่ python 3.x เลยจ้า เนื่องจาก python 2.x จะเลิก support แล้วนะจ๊ะ

หัวข้อที่ 2 : ติดตั้งโปรแกรม python ลงบน computer

download จากหน้าเว็บ เลือก version ได้ตามชอบใจ จากนั้นลงโปรแกรมปกติเลย และส่วนสำคัญ คือ การ set path ที่ system environment

กดคลิกขวาที่ไอคอนคอมพิวเตอร์ของท่าน เลือก properties และเลือก Advances system setting

จากนั้นกดปุ่ม Environment Variables ไปที่ system variable เลือกตัวแปรชื่อ PATH

  • กรณีไม่มีตัวแปร PATH ให้เพิ่มโดยการกดปุ่ม NEW และใส่ชื่อ variable เป็น PATH และ value เป็น path ของเจ้า python เช่น C:/python3
  • กรณีที่มีตัวแปร PATH แล้ว ให้กดปุ่ม EDIT แล้วใส่ ; ก่อนที่ใส่ path ของเจ้า python

หรือจะทำที่ command line ก็ได้นะ แต่วิธีนี้ชัวร์และอุ่นใจกว่า

ตัวโปรแกรม python มีสองแบบ คือแบบ command line กับแบบ GUI

ข้อดีข้อเสียอย่างย่อๆ คือ แบบ command line เวลาเราพิมพ์ผิด เราจะต้องพิมพ์ใหม่ ส่วนแบบ GUI เราพิมพ์ผิดแล้วก็อปแก้พิมพ์ใหม่ได้ มีแค่นี้แหละ

หัวข้อที่ 3 การพิมพ์คำสั่งขั้นต้น

การพิมพ์ Hello world ออกมาสู่หน้าจอ เวลาเราเรียนคำสั่งใหม่ๆ มักจะเป็นคำนี้เสมอเลยเนอะ คำสั่งใช้ง่ายมากๆเลย

print "Hello world" #ง่ายๆเลย แต่อันนี้ของ python 2.7
print ("Hello world") #อันนี้ของ python 3.0 ขึ้นไป

นี่คือสิ่งที่เราบอกว่า syntax ต่างกันไงหล่ะ

และใช้ # เพื่อ comment code นะจ๊ะ

ข้อควรระวัง ในภาษา python ไม่ได้ใช้ ; ในการสิ้นสุดคำสั่งนะ และใช้ 2space แทน tab

หัวข้อที่ 4 Data type และการประกาศตัวแปร

Data type ใน python ไม่ได้มียุ่บยับหรือภาษาอื่น หลักๆมีสามตัวคือ

Number

ตัวเลขทั้งหลาย เราจะบวกลบคูณหารผ่าน python ก็ทำได้ง่าย สบายๆเลย เช่น

บวก ลบ คูณ หาร : +, -, *, /          =>    7/2
การหารเอาเศษ  : mod %               =>    7/2
เลขยกกำลัง     : power **            =>    7**2
การหารแบบปัดลง : floor division //   =>    7//2
การหารแบบปัดขึ้น : round()             =>    round(7/2)

ตัวอย่าง

2^n - 1 จะได้เป็น (2**n)-1
pi r^2 จะได้เป็น pi*(r**2)

ตัวแปรประเภท Number ประกาศ data type เป็น เลขจำนวนเต็ม int() และ จำนวนทศนิยม float()

หรือประกาศเป็นเลขฐานต่างๆก็ได้ด้วยนะ เช่น เลขฐานสอง bin() เลขฐานสิบหก` hex()` ตัวอย่าง

int(‘11001100’,2) #204 แปลงเลขฐานสองเป็นฐานสิบ
int(‘0x20’,16) #32 แปลงเลขฐานสิบหกเป็นฐานสิบ
bin(int(‘0xDEC’,16)) #แปลงเลขฐานสิบหกเป็นฐานสิบ และแปลงเป็นเลขฐานสอง
hex(int(‘101010101010’,2)) #0xAAA แปลงเลขฐานสองเป็นฐานสิบ และแปลงเป็นเลขฐานสิบหก

การทำ Fixed point number

from decimal import Decimal
interest = Decimal(“6.4200”)

String

ตัวอักษร พี่เหลือมสามารถเล่นได้เยอะแยะเลย ทั้งการเลือกตัวอักษร ตัดทิ้ง บวกสตริง เซ็คความยาว

  • การสร้างตัวแปร string ใหม่ : hello = str()
  • การตรวจสอบความยาวของ string : len(hello)ถ้าความยาวเป็น 0 นั่นคือเป็นตัวแปร string เปล่าๆ นั่นเอง
  • ค้นหาคำที่เราต้องการในตัวแปร string : find()
  • การนำ space หัวท้ายออกจากกัน : strip()
  • การตัดคำออกตามที่เราต้องการ : split()
  • การแทนค่าคำ : replace()

ช่วงลองทำดู

เนื่องจากมันเล่นได้หนุกหนาน เลยมีอะไรให้ลองทำนิดหน่อย

  1. ให้ตัวแปร string ชื่อว่า hello แล้วกัน มีค่า Hello, it's me. I was wondering if after all these years
  2. ตรวจสอบความยาวของ hello
  3. หาคำว่า me ใน hello
  4. ตัดคำจาก space ออกเป็นคำๆ
  5. แทนค่าคำว่า me ว่า you

คำเฉลย

hello = "Hello, it's me. I was wondering if after all these years"
len(hello)
hello.find("me")
hello.split(" ")
hello.replace("me","you")

เราสามารถใช้ escaped with backslashes (\n \r\n \t \0 \x) ใน python ได้ด้วยนะ

List

อันนี้อาจจะต่างจากพวกภาษา C แต่ภาษาอื่นๆก็มี มันคล้ายๆ array แต่ไม่ใช่ซะทีเดียว

list = [1, 2, ,3, ...]

การใส่ค่าใน list ไม่จำเป็นต้องใส่ค่าประเทภเดียวกัน เช่น

member = [“brown”, 94, True]

การเพิ่มสมาชิกใหม่ มี 2 แบบ คือ

  • append : ใส่เป็นคำ หรือตัวเลขก็ได้ => list.append()
  • extend  : ใส่เป็น string character => list.extend([])

อื่นๆ

  • การลบสมาชิกออก ใช้ list.remove() ข้างในใส่สมาชิกตัวที่เราต้องการจะลบ
  • ถ้าล้างไส้ในทั้งหมด ใช้ list.clear()
  • การตรวจสอบความยาวของ list ใช้คำสั่ง len(list)

ตัวอย่างการใช้งาน

fav_stock = ["ADVANC", "BEM", "CPALL", "CPF", "AU"]
  1. เพิ่ม "BAY"
  2. ลบ "AU"
  3. เปลี่ยน "ADVANC" เป็น "INTOUCH"
  4. หาจำนวนชื่อหุ้นใน fav_stock

คำเฉลย

fav_stock.append("BAY")
fav_stock.remove("AU")
fav_stock[0] = "INTOUCH"
len(fav_stock)

Boolean

อันนี้เหมือนภาษาอื่นๆ มีค่าสองแบบเท่านั้น คือ True กับ False

สรุป python ไม่ต้องประกาศตัวแปรให้วุ่นวาย เช่น uint8 i = 0; งี้ แค่ใส่ค่าไปเลย เช่น i = 0 จบ

หัวข้อที่ 5 comparison

การเปรียบเทียบค่าในภาษา python แบ่งเป็น 4 แบบ ดังนี้

  • logical : and, or, not, and not เช่น (len(list) >= 0) and (boo != False)
  • identity : is, is not, not เช่น not (boo)
  • arithmetic : >, >=, <, <=, ==, != เช่น len(list) >= 0, boo != False
  • Null : None เช่น list != Noneซึ่งเรื่องนี้นำไปใช้ใน condition statement

หัวข้อที่ 6 condition statement

ใน python มี if-else ในการเลือกการตัดสินใจ มี syntax ดังนี้

  • แบบทางเดียว
if (consition):
  <statement>
  • แบบสองทาง
if (consition):
  <statement>
else:    
  <statement>
  • แบบหลายทาง
if (condition):
  <statement>
elif (condition):   
  <statement>
else:    
  <statement>

มาลองทำดูดีกว่า

เขียนโปรแกรมตัดเกรดกันเถอะ ...

การตัดเกรดของวิชาการเรียน python พื้นฐาน มีเกณฑ์ ดังนี้

100 = A+, >=80 = A, >=70 = B, >=60 = C, >=50 = D, other = F

มาลงโค้ดดิ้งกัน

ให้ input มีชื่อตัวแปรว่า score และ output ชื่อว่า grade

# input student score
score = 78

if (score == 100):
  grade = "A+"
elif ((score >= 80) and (score < 100)):
  grade = "A"
elif ((score >= 70) and (score < 80)):
  grade = "B"
elif ((score >= 60) and (score < 70)):
  grade = "C"
elif ((score >= 50) and (score < 60)):
  grade = "D"
else:
  grade = "F"

print (grade)

หัวข้อที่ 7 loop statement

ใน python มี for และ while ในการใช้วนลูป

มาลองทำดูดีกว่า พิมพ์ค่าสมาชิกแต่ละตัวใน array_listซึ่งในภาษา python จะต่างจากภาษาอื่นๆ สามารถวนลูปค่าใน list ได้เลย ภาษาอื่นๆจะวนจากตัวเลข เช่น

array_list = [‘apple’, ‘papaya’, ’banana’, ’orange’]
for i in array_list:
   print (i)

ให้พิมพ์เลข 1-10 ออกมาสู่หน้าจอ สามารถเขียนได้ดังนี้

#print 1-10
i=1
while i <= 10:
    print(i)
    i += 1

function range เป็น function ที่สร้าง range ค่าในช่วงที่เราต้องการ เช่น range(10) สร้างค่าเริ่มจาก 0 ไป 10 ตัว ดังนั้นจะได้ค่า 0-9 เราไม่สามารถเขียนเป็นเลขโดดๆใน for ได้

#print 1-10
for i in range(1,11):
   print (i)

loop comprehensions

คือการเขียน loop statement แบบลดรูป พร้อมการเปรียบเทียบค่า ตัวอย่าง เช่น หาเลขระหว่าง 0-30 ที่หารด้วย 2 ลงตัว

ถ้าเราจะเขียนแบบเต็มๆ จะได้แบบนี้ ข้อดี คือ สามารถตรวจสอบได้เวลาที่โค้ดเรามีปัญหา

evens = []
for i in range(31):
   if i % 2 == 0:
      evens.append(i)

และการเขียนแบบลดรูปแบบ loop comprehensions

evens = [i for i in range(31) if i % 2 == 0]

หัวข้อที่ 8 การใช้ break, continue และ pass ใน statement

break คือ การให้โค้ดของเราหยุดทำงาน เมื่อเข้าสู่ statement ที่เรากำหนด

continue คือหลังจากเจอ statement ที่เรากำหนด ก็ให้ตรวจที่ statement ถัดไป

pass ใส่เมื่อเราไม่ให้มีการทำงานใดๆเมื่อเข้า statement ที่เรากำหนด

ตัวอย่าง

# check order
if (order == 0):
  break
elsif (order == 1):
  continue
elif (order % 3 == 0):
  pass
else:
  print (order)

หัวข้อที่ 9  Function

มี syntax การเขียนดังนี้

def fn_name(input):
   …

   return output

เรามีวิธีง่ายๆ นั่นคือ การนำโปรแกรมตัดเกรดของเรามาใส่ในฟังก์ชั่น โดยมี input คือ คะแนนของนักเรียนในวิชาการเรียน python พื้นฐาน และ คืนค่าเป็นเกรดของนักเรียน

def python_grade(score)
  # ใส่โปรแกรมตัดเกรดของเราลงไป
  if (score == 100):
    grade = "A+"
  elif ((score >= 80) and (score < 100)):
    grade = "A"
  elif ((score >= 70) and (score < 80)):
    grade = "B"
  elif ((score >= 60) and (score < 70)):
    grade = "C"
  elif ((score >= 50) and (score < 60)):
    grade = "D"
  else:
    grade = "F"
  return grade

การเรียกใช้งาน เป็นดังนี้ python_grade(78)

ถ้าต้องการแสดงผล สามารถใส่ print ครอบไว้ได้ print(python_grade(78))

หัวข้อที่ 10 Data structure

tuple

เราสามารถเก็บข้อมูล data type ใดก็ได้ ในตัวแปร tuple

t = 12345, 54321, 'hello!'

การ update ค่าใน tuple : t[0] = 0

เราสามารถนำ tuple นำมาบวกกันได้ด้วยนะ : t3 = t1 + t2

การลบค่าทั้งหมดใน tuple : del t

set

  • union => a | b
  • intersection => a & b
  • difference => a-b, b-a
  • symmetric difference => a ^ b

dictionary

การแสดงผลค่า key และ value ของสมาชิกแต่ละตัวใน dict

for key, val in num.items():
 print (key, val)

การเรียงค่า key ของ dict โดย output จะเป็น list sorted(num)

การเรียงค่า key และ value ของ dict โดย output จะเป็น list เช่นกัน sorted(num.value)

สำหรับการ sort by key และแสดง member ทั้งหมดใน dict ออกมา จะได้ output เป็น tuples นะ sorted(num.items(), key=lambda x:x[1])

หัวข้อที่ 11 การทำงานร่วมกันกับไฟล์

การอ่านไฟล์ มี syntax หลักๆ ดังนี้

f = open(filename, mode)

parameter ตัวแรก คือ ชื่อไฟล์ และตัวที่สอง คือโหมดการอ่านเขียนไฟล์

โหมดการเขียนอ่านไฟล์ มีดังนี้

  • r : read อ่าน
  • w : overwrite เขียนทับ
  • a : write at end of the file เขียนต่อ
  • mode++ : reading & writing => r+, w+ a+

มาดูการเขียนโค้ดกันดีกว่า

# open file
f = open(‘text.txt’, ‘a’)

# read file 
code = f.read()

หลังจากอ่านไฟล์แล้ว สามารถส่วนนี้ไปใช้งานได้ แต่ประเภทของตัวแปรจะเป็นแบบ binary ดังนั้นอาจจะต้องแปลงเป็น string โดยใช้ decode("utf-8") เช่น

# find word in line of file
if (code.find(b"file") >= 0):
  print (code)

elif (code.decode("utf-8").find(b"line") >= 0):
  print (code)

# spilt line
lines = code.strip().splitlines()

# read single line of a file
f.readline()

# write file
f.write(“blah blah blah”)

#close file
f.close()

หัวข้อที่ 12 Exception handling

syntax error

คือ การที่ compiler แจ้งในส่วนที่เราเขียนโค้ดผิด syntax ที่เราพบเห็นกัน มีดังนี้

  • SyntaxError : invalid syntax
  • IndexError: string index out of range
  • NameError: name 'n' is not defined

exception

คือ การที่ compiler แจ้งเราว่า code error ไม่สามารถทำงานต่อได้ มี Error defect ดังนี้

  • ZeroDivisionError: division by zero
  • NameError: name 'test2' is not defined
  • TypeError: unsupported operand type(s) for -: 'str' and 'int'

handling exception

การจัดการเมื่อโค้ดของเรามีปัญหา มี syntax การเขียน ดังนี้

try:
   // Protected code
except:
   // Catch block
else:
   // The finally block always executes.

การทำงาน ทำในส่วนของ try ก่อน ถ้าทำงานในส่วนนี้สำเร็จ ก็คือจบ ถ้าไม่สำเร็จ จะไปในส่วนของ except ต่อ

raising Exceptions

ถ้าเปรียบเทียบกับ JAVA เหมือน throw

raise ValueError('A very specific bad thing happened')

ตัวอย่างการใช้งาน เช่น การหารด้วยศูนย์

try:
   result = input1 / input2
except ZeroDivisionError:
   print (“cannot divide by 0”)

ปล. บล็อกนี้ยังไม่ได้อธิบายเรื่อง OOP นะ เพราะจะยากกว่านี้อีก step นึง


ในบล็อกนี้คิดว่า น่าจะครอบคลุมการเขียน python ขั้นต้นแล้วนะ และเนื้อหาในนี้ เราเอามาลองใช้กับ ovlwegrammo ไม่แน่ใจว่าคนอ่านจะชอบอ่านแบบยาวๆ หรือสั้นๆมีละตอนมากกว่า

Owlvegrammo
https://owlvegrammo.web.app

สุดท้าย แปะลิ้งที่จำเป็นต่อการเรียน python เอาแล้วกันเนอะ

3.9.6 Documentation
https://docs.python.org/3/index.html

https://www.fordantitrust.com/files/python.pdf

Python Courses & Tutorials | Codecademy
Python is a general-purpose, versatile, and powerful programming language. It’s a great first language because it’s concise and easy to read. Whatever you want to do, Python can do it. From web development to machine learning to data science, Python is the language for you.
https://www.codecademy.com/catalog/language/python

และบล็อก python ทั้งหมดจะอยู่ในนี้น้า

python - MikkiPastel Studio
เมื่อก่อนก็เคยเขียนน้องงูมาก่อนน้าาา

Tags

Minseo Chayabanjonglerd

I am a full-time Android Developer and part-time contributor with developer community and web3 world, who believe people have hard skills and soft skills to up-skill to da moon.