วันจันทร์ที่ 14 พฤศจิกายน พ.ศ. 2559

บันทึกเรียนรู้ python: พื้นฐานโปรแกรม

การเขียนโปรแกรมบน Raspberry Pi หนีไม่พ้นที่จะต้องเรียนรู้การเขียนโปรแกรมด้วย Python ซึ่งถือว่าเป็นภาษาสคริปส์ที่ทำงานได้หลากหลาย แต่วิธีการเขียนก็เปลี่ยนไปพอสมควร โดยเฉพาะ การย่อหน้าที่ค่อนข้างเคร่งครัด และให้เลือกอย่างใดอย่างหนึ่ง คือ เลือกระหว่างเว้นวรรค หรือแท็บ

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

โปรแกรมแรก Hello world!

Code: สร้างไฟล์ ex01.py แล้วเขียนโปรแกรมดังนี้

#!/usr/bin/python

print "Hello world!"

Run: พิมพ์ที่หน้าจอ Terminal

$ python ex01.py

ผลที่ได้:

Hello world!


ไม่มีเครื่องหมาย { } กำหนดบล็อค

ในภาษาซี หรือ PHP จะใช้วงเล็บปีกกาเป็นตัวกำหนดขอบเขตของเงื่อนไขหรือส่วนต่างๆ แต่สำหรับ Python แล้วไม่มีเครื่องหมายวงเล็บกำหนดขอบเขต แต่จะใช้การย่อหน้า (line indentation) โดยย่อหน้าเดียวกันจะเป็นขอบเขตเดียวกัน และข้อควรระวัง การย่อหน้าจะต้องเลือกระหว่าง การเว้นวรรค หรือ แท็บ และต้องกำหนดย่อหน้าให้เท่ากัน เช่น เคาะเว้นวรรค 2 เคาะ ก็ต้องใช้ 2 เคาะเหมือกัน ถ้ามีเพิ่มเป็นอย่างอื่นก็จะถือว่าเป็นขอบเขตใหม่

ตัวอย่าง


#!/usr/bin/python
n = 1
if n == 1:
  print "True"
  print "n = 1"
else:
  print "False"
  print "n <> 1"

ตัวอย่างนี้จะพิมพ์ผลลัพธ์หน้าจอเป้ฯ

True
n = 1

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

#!/usr/bin/python
n = 1
if n == 1:
  print "True"
  print "n = 1"
else:
  print "False"

print "n <> 1"

ผลลัพธ์ที่ได้ 

True
n=1
n<>1

วิธีสั่งรันไฟล์ python

การสั่งรันไฟล์โปรแกรม python มีสองแบบ คือ 

1. เรียกโปรแกรม python ตามด้วยไฟล์ Script เช่น
python ex01.py
2. กำหนดสิทธิ์ไฟล์ให้เป็น execute เช่น
chmod +x ex01.py
เวลาเรียกใช้โปรแกรมจะเรียกคำสั่งได้ทันทีคือ  ./ex01.py (ต้องมี ./ หรือ กำหนด path ของโปรแกรมด้วย)
วิธีที่สองนี้อย่าลืมบรรทัดแรกสุดให้ใส่ #!/usr/bin/python เพื่อบอกให้ระบบรู้ว่าจะเรียกใช้โปรแกรมอะไรมารันไฟล์ที่เรียก

 การเขียนคำสั่งในบรรทัดเดียวกัน

วิธีการเขียนคำสั่งให้อยู่บรรทัดเดียวกัน (multiple statements on a single line) วิธีนี้จะทำให้การเขียนคำสั่งสั้นลง แต่ก็เหมาะกับคำสั่งง่ายๆ ในฟังค์ชันเพื่อให้โปรแกรมสั้นไม่เยิ่นเย้อ

import sys; x='foo'; sys.stdout.write(x+'\n')

คำสั่งนี้เมื่อรันใน python จะได้ผลลัพธ์ foo ออกทางหน้าจอภาพ

Parameter และ Argument

ก่อนที่จะเขียนโปรแกรมต่างๆ เราควรทำความรู้จักเสียก่อนว่า Parameter และ Argument ต่างกันอย่างไร โดยยกเอาข้อความของ MSDN ที่เปรียบเทียบไว้ให้ทราบอย่างชัดเจนว่า
the procedure defines a parameter, and the calling code passes an argument to that parameter. You can think of the parameter as a parking space and the argument as an automobile
paramter เปรียบเหมือนช่องจอดรถ argument เหมือนกับรถยนต์ที่เข้าจอดในช่องนั้น
 จากข้อเปรียบเทียบดังกล่าวสรุป คือ parameter เป็นตัวรับค่าที่กำหนดไว้ในฟังค์ชันหรือ procedure ส่วน argument นั้นเป็นตัวแปรที่กำหนดเพื่อส่งไปให้กับ parameter, parameter เป็นตัวแปรที่ใช้รับค่า argument เป็นตัวแปรหรือค่าที่ส่งให้กับฟังค์ชันโดยรับผ่าน parameter

Single หรือ Double Quote

การอ้างอิงชุดตัวอักษรหรือ String นั้นในภาษา C มักจะมีข้อแตกต่าง กรณี Single Quote ใช้สำหรับ Character ถ้าต้องการชุดตัวอักษรต้องใช้ Double Quote

แต่ใน python จะไม่มีความแตกต่าง จะใช้แบบไหนก็ได้ เพียงแต่ใช้อย่างใดอย่างหนึ่ง เช่น

str1 = "Hello World"
str2 = 'Hello World'

ทั้งสองตัวแปรมีค่าเท่ากัน ไม่แตกต่าง แต่ถ้าเป็นภาษา C การกำหนดค่า str2 จะ error

เปรียบเทียบกับภาษา C

โปรแกรม Python: hello.py

#!/usr/bin/python
print "Hello World"

กำหนดให้เป็นไฟล์ที่รันได้

chmod +x  hello.py

โปรแกรม C: hello.c

#include <stdio.h>
main(){
  printf("Hello world\n");
}

คอมไพล์และสร้างไฟล์ที่สามารถเรียกใช้งานได้

gcc -o hello hello.c

เวลาที่ใช้รันไฟล์

pi@raspia ~/Desktop/python-dev $ time ./ex03.py
Hello World

real    0m0.230s
user    0m0.160s
sys     0m0.050s
pi@raspia ~/Desktop/python-dev $ time ./ex03
Hello World

real    0m0.027s
user    0m0.000s
sys     0m0.000s

การกำหนดตัวแปร

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

str = "Hello World"number = 1name, cnt, total = "Yothin", 0, 0a=b=c=1
มาตรฐานตัวแปรในไพธ่อน

  • Numbers
  • String
  • List
  • Tuple
  • Dictionary

ดูจากรายการตัวแปรในไพธ่อนแล้วจะเห็นแปลกกว่า 3 รายการ คือ List, Tuple และ Dictionary จะว่าไปแล้วทั้ง 3 ก็คือ ตัวแปร Array ดีๆ นี่แหละ เพียงแต่แยกการใช้งาน

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

ส่วน Tuple จะคล้าย List เพียงแต่เป็นชุดข้อมูลแบบอ่านได้เพียงอย่างเดียวไม่สามารถเปลี่ยนแปลงได้

ตัวอย่าง tuple กับ list

mylist = ["Yothin", 100]
mytuple = ("Yothin", 100)
mylist[1] = 500
mytuple[1] = 500
ตัวอย่างข้างบนจะ error ในบรรทัดสุดท้าย ที่สั่งให้เปลี่ยนค่าจาก 100 เป็น 500

Traceback (most recent call last):
  File "list_array.py", line 15, in <module>
    mytuple[1] = 500
TypeError: 'tuple' object does not support item assignment

ข้อควรระวังของ list

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

list1 = [0, 1, 2, 3, 4]list2 = list1list2[0] = 1

จากคำสั่งแก้ไข list2[0] = 1 แทนที่จะแก้ไขเฉพาะ list2 เท่านั้น แต่ list1[0] จะถูกแก้ไขไปด้วย วิธีการแก้ไขปัญหาคือ ทำการสำเนา list ดังนี้

list1 = [0, 1, 2, 3, 4]
list2 = [:]list2[0] = 1

วิธีการหลังนี้ list1 จะยังคงเหมือนเดิมไม่มีการเปลี่ยนแปลง

Dictionary นั้นก็เป็นรายการที่เกี่ยวกับข้อมูลหรือชุดข้อมูลจะมีลักษณะคล้ายๆ กับข้อมูลแบบ json แต่ไม่เหมือนกัน เพราะ json นั้นเป็น ชุดข้อมูลแบบ String แต่ Dict เป็นชุดข้อมูลแบบ Structure

ชุดข้อมูลแบบ Dictionary ในไพธ่อนจะเปรียบเหมือน object ของ json

การแสดงผลข้อความ


ในไพธ่อนกับภาษาซีสามารถใช้ % เพื่อแสดงข้อความได้เหมือนกัน แต่ในอนาคตมีข่าวว่าจะยกเลิกการใช้งานแบบ % แล้ว โดยใช้ .format แทน ตัวอย่างเช่น

list1 = [0, 1, 2, 3, 4]
print "list1 = {0}".format(list1)

ผลลัพธ์ที่ได้

list1 = [0, 1, 2, 3, 4]

การแปลงชนิดข้อมูลใน Python

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

FunctionDescription
int(x [,base])
Converts x to an integer. base specifies the base if x is a string.
long(x [,base] )
Converts x to a long integer. base specifies the base if x is a string.
float(x)
Converts x to a floating-point number.
complex(real [,imag])
Creates a complex number.
str(x)
Converts object x to a string representation.
repr(x)
Converts object x to an expression string.
eval(str)
Evaluates a string and returns an object.
tuple(s)
Converts s to a tuple.
list(s)
Converts s to a list.
set(s)
Converts s to a set.
dict(d)
Creates a dictionary. d must be a sequence of (key,value) tuples.
frozenset(s)
Converts s to a frozen set.
chr(x)
Converts an integer to a character.
unichr(x)
Converts an integer to a Unicode character.
ord(x)
Converts a single character to its integer value.
hex(x)
Converts an integer to a hexadecimal string.
oct(x)
Converts an integer to an octal string.
ที่มา: https://www.tutorialspoint.com/python/python_variable_types.htm


ทั้งหมดนี้คือส่วนหนึ่งของพื้นฐานในการเรียนรู้การเขียนโปรแกรม Python ซึ่งยังมีอีกมากจึงขอแยกเพื่อไม่ให้บทความยาวเกินไปนัก ขอบคุณที่ติดตามอ่าน หากพบส่วนใดบกพร่องโปรดชี้แนะเพื่อแก้ไขให้ถูกต้องด้วยครับ...

ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Gtk4 ตอนที่ 6 Defining a Child object

Defining a Child object A Very Simple Editor ในบทความที่ผ่านมาเราสร้างโปรแกรมอ่านไฟล์ชนิดข้อความ และในบทความนี้ก็จะมาปรับแต่งโปรแกรมกันสักหน...