วันพุธที่ 23 พฤศจิกายน พ.ศ. 2559

Class

Class
ประเภทข้อมูล
·         จำนวน              ใช้        int หรือ float
·         ข้อความ             ใช้         str
·         จริง/เท็จ             ใช้           boolean
·         กลุ่มข้อมูล          ใช้           list, set, tuple, dict


คลาสเพื่อสร้างประเภทข้อมูลที่ต้องการ
·        
ใช้คลาสประกาศองค์ประกอบของข้อมูลประเภทใหม่ว่าประกอบด้วยข้อมูลย่อยๆ อะไรบ้าง


·         เมื่อประกาศคลาสแล้ว สามารถสร้างที่เก็บข้อมูลเรียกว่า อ็อบเจกต์(object) ด้วยการเรียกใช้ constructor




การสร้างอ็อบเจกต์

            คลาส คือประเภทข้อมูล  อ็อบเจกต์คือตัวข้อมูล




แต่ละอ็อบเจกต์มีตัวแปรประจำอ็อบเจ็กต์ของตนเอง




การใช้ / เปลี่ยนค่าของตัวแปรอ็อบเจกต์
           

b1.price  อ่านว่า ตัวแปร price ของอ็อบเจกต์ b1
ตัวอย่าง : class song


Function

Function

แบ่งโปรแกรมออกเป็นส่วนย่อยๆ
·         เรียกส่วนย่อยว่า subroutine, subprogram, function, method
·         แต่ละ function มีหน้าที่ในตัวเองอย่างเด่นชัด
·         โปรแกรมอ่านง่าย
·         function เรียกใช้ได้หลายครั้ง


โปรแกรมเริ่มต้น



โปรแกรม เมื่อมี function


องค์ประกอบของฟังก์ชัน




ต้องเยื้องคำสั่งทั้งหลายในฟังก์ชันให้ตรงกัน
ส่วนหัว : ชื่อฟังก์ชัน
·         ใช้กฎตั่งชื่อเหมือนกับตัวแปร
·         มักตั้งชื่อฟังก์ชันขึ้นต้นด้วยอักษรตัวเล็ก
·         มักตั้งชื่อฟังก์ชันให้เป็นกริยา
ส่วนหัว : รายการของพารามิเตอร์
·         parameter คือตัวแปรสำหรับข้อมูลจากผู้เรียก
·         รายการของ parameter อยู่ภายในวงเล็บ(ถ้าไม่รับ parameter ใดๆ ก็ไม้ต้องใส่อะไรในวงเล็บ)



ส่วนตัวของฟังก์ชัน
·         คำสั่งต่างๆที่ทำงานตามข้อกำหนด
·         ถ้าต้องการคืนผลการทำงานให้ผู้เรียกใช้คำสั่ง return คามด้วยค่าที่ต้องการคืนผลลัพธ์


·         ถ้าต้องการคืนหลายค่า ก็คืนเป็น tuple หรือ list



ส่วนตัว : Local Variables
·         พารามิเตอร์และตัวแปรในฟังก์ชันก์ใด เป็นตัวแปรที่ใช้ได้ในฟังก์ชันนั้น
ชื่อซ้ำกันได้ ถ้าอยู่คนละฟังก์ชัน
เรียกใช้ตัวแปร ที่อยู่คนละฟังก์ชันไม่ได้

ตัวแปรของผู้เรียกกับของฟังก์ชันเป็นคนละตัว
                ตัวแปรเก็บ int, float, bool ของฟังก์ชันเปลี่ยนแค่ของผู้เรียกไม่เปลี่ยน เพราะคนละตัว
กรณีเป็นตัวแปรแบบ list, tuple, set, dict ตัวแปรของผู้เรียกกับพารามอเตร์ของฟังก์ชันเป็นคนละตัว แต่อ้างอิงที่เก็บข้อมูลเดียวกัน


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

ข้อแนะนำการเชียนฟังก์ชัน
·         ควรตั้งชื่อสือความหมาย
·         ควรมีภาวะที่ต้องทำหนึ่งอย่างตามชื่อ
·         ควรสั้นกระทัดรัด อ่านเข้าใจง่าย
·         ควรพารามิเตอร์จำนวนไม่มาก







Recursive Function : ฟังก์ชันแบบเวียนเกิด

            ความสำพัน์เวียนเกิด (Recurrences)
·         การเขียนคสามสัมพัน์ของจำนวนเต็มในลำดับ






ข้อดี-ข้อด้อย
การเขียนแบบ recursive มีทั่งข้อดีและข้อด้อย
ข้อดี
·         สั้นกระทัดรัด
·         ในบางกรณี มุมมองแบบ recursive จะทำให้เห็น วิธีแก้ปัณหาได้ง่ายขึ้น
·         ถ้าจำนวนชั้นของ loop ไม่ คงที่ การใช้ recursive จะง่ายกว่ามาก
ข้อด้อย
·         บางครั้งการทำงายช้ากว่าแบบ loop
·         ใช้หน่วยความจำมากกว่า

การคำนวณ 




ตัวอย่าง flatten_list






List

List

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




 List คือ รายการของข้อมูล
            [2,3,5,7,12,15,19,28]
            [“SUN”,”MON” ,”TUE” ,”WED” ,”THU” ,”FRI” ,”SAT”]
            [23587,”Sometime”,[“A” ,”B”,”C”]]
            []  ß empty list


การใช้และการเปลี่ยนแปลงค่าแต่ละข้อมูลใน list




เราสามารเปลี่ยนข้อมูลใน list ได้ ซึ่ง ใน string เปลี่ยนไม่ได้


 

len(list) : ความยาวของ list (จำนวนข้อมูลใน list)



จาก  print(len(x[1])) เกิด error เพราะ len จะไม่รับค่าที่เป็น int จะรับค่าที่เป็น string list …

การใช้และการเปลี่ยนแปลงรายการย่อยใน list

การใช้



            การเปลี่ยนแปลงค่าใน list



การเพิ่มและลบข้อมูลใน list




ตำแหน่งของข้อมูลใน list
·         ต้องเป็น int หรือเป็นช่วง int:int               x[3]      x[3:5]
·         เป็นตัวแปรที่เก็บข้อมูลแบบ int                  x[i]
·         เป็นexpression ที่ให้ผลเป็น int                  x[2*i+1]


การค้นข้อมูลใน list (c in x)






List กับ วงวน for

 
         

for e in x กับ for i in range




บริการของสตริงเพิ่มเติม : split และ join
·         เมื่อนำ             string ไป split จะได้ list

list ไป join จะได้ string



ตัวอย่าง : การหาค่าเฉลี่ยของชุดข้อมูล



ตัวอย่าง การแยก วัน/เดือน/ปี




String

String

สตริง คือ ลำดับของตัวอักษร
“HELLO WORLD”
0
1
2
3
4
5
6
7
8
9
10
H
E
L
L
O

W
O
R
L
D


สตริงขนาด N ตัวอักษร มี index ตั่งแต่ 0 ถึง N-1




String Methods





ตำแหน่งของอักษรในสตริง
·         ต้องเป็น int หรือเป็นช่วง int:int              s[5]           s[3:7]
·         เป็นตัวแปรที่เก็บข้อมู,แบบ int             s[k]
·        
เป็น expression ที่ได้ผลเป็น int s[i+j-4]



ข้อควรระวัง
·         ห้ามเปลี่ยนค่าภายในสตริง
                s[2] = “a”
                s[3:7] = “-^o^-”
·         String methods ไม่เปลี่ยนตัวสตริง
s = “Hello”
s.lower() ได้  ‘hello’ แต่ s เก็บค่าเดิม ‘Hello’
·         แต่เราเปลี่ยนค่าที่เก็บในตัวแปรได้
s = “Hello”
s = s.lower() แบบนี้ s เก็บค่าใหม่ “hello”









Method chaings
      


input
·         strip
·         upper
·         และสามารถ  ใช้     strip          ต่อจาก     input
      ใช้     upper         ต่อจาก     strip

      ใช้     find           ต่อจาก    upper



ตัวอย่าง แปลงชื่อเดือนเป็น เลขเดือน




รูปแบบการประมวลผลแต่ละตัวอักษรในตริง



 ซึ่ง for c in s : อ่านว่า สำหรับแต่ละตัวอักษร c ในสตริง s
      If   c in s : อ่านว่า ถ้ามีสตริง c ปรากฎอยู่ในสตริง s

ตัวอย่าง แปลงเลขอารบิกเป็นเลขไทย



                ตัวอย่าง rot-13





การอ่านสตริงจากแฟ้มข้อความ



ใช้คำสั่ง open ในการอ่านสตริง ตามด้วย ที่อยู่ของไฟล์ , แล้วตามด้วย “r/w”
                r = เปิดแฟ้มเพื่ออ่าน , w = เปิดแฟ้มเพื่อเขียน
readline = อ่านหนึ่งบรรทัดเข้ามาเป็นสตริง

ตัวอย่าง นับจำนวนอักษรและจำนวนบรรทัด



รหัสพิเศษ Escape Characters
            \n         =          newline
            \\          =          \
            \t          =          tab
            \”         =          “


การเขียนสตริงลงแฟ้มข้อความ



การ
copy แฟ้มข้อมูล