October 31, 2011

Python: เล่นกับข้อความขั้นพื้นฐาน

การอ้างตำแหน่ง string ใน Python จะเหมือนแนวคิดของ char array ในภาษาอื่นๆ ดังนั้น เราสามารถใช้ความรู้จากตอนที่แล้ว บวกกับการหาความยาว string ด้วย len() เพื่อวนเรียกตัวอักษรแต่ละตัวออกมาได้

หมายเหตุไว้ว่า string ของ Python เป็น immutable type คือเราจะไปเปลี่ยนค่า char บางตัวของ string ที่ถูกสร้างขึ้นมาแล้วไม่ได้ครับ (เพื่อป้องกัน segmentation fault) ครับ

อนึ่ง สำหรับการวน for ตามตัวอย่างข้างบน สามารถเขียนให้สั้นลงได้อีก เป็น

เราจะได้เห็นเทคนิคการวน for ในลักษณะนี้อีกเรื่อยๆ ครับ



แม้ว่า string จะเป็น immutable แต่ก็ไม่ต้องวิตกครับ เราสามารถสร้าง string ใหญ่จาก string เล็กๆ ได้อย่างนี้

ส่วนการแตก string ให้เล็กลงนั้น เราจะใช้เทคนิคการ slice ครับ แต่ก่อนอื่น ขอให้ดูแผนภาพนี้

การสไลด์ string ให้เล็กลงนั้น จะใช้ [begin:end] ตามหลัง string ครับ (จะได้ string ใหม่กลับมา) โดยที่ begin ต้องอยู่ก่อน end ถึงจะได้ผลลัพท์กลับมาครับ (แต่สามารถละ begin/end ได้)



ส่งท้ายนิดหน่อยด้วยการเล่นกับ print() เพื่อพิมพ์ข้อความออกมาครับ

หรือเราจะใช้ % (percent sign) ทำคล้ายๆ กับภาษา C ก็ได้

เพียงแต่ว่าวิธีนี้กำลังถูกเลิกสนับสนุน Python ครับ (อ้าว แล้วจะใช้วิธีไหนแทน? ขอยกยอดไปตอนหน้านะครับ)

October 30, 2011

Python: การควบคุมทางเลือก และการวนซ้ำ

ใน Python เมือจบการถาม if ต้องตามด้วยเครื่องหมาย : (colon) และขึ้นบรรทัดใหม่เสมอ ซึ่งบรรทัดใหม่ต้องเว้นด้านหน้าเพิ่มจากเดิม 1 indent level เท่านั้นด้วย มากกว่าน้อยกว่านี้ไม่ได้

นี่อาจฟังดูยุ่งยากเกินกว่าที่จะจำได้ ไม่ต้องจำครับ เพราะตอนใช้งานจริง จะพบว่ามันเป็นธรรมชาติมากๆ

อย่างไรก็ตาม มีเรื่องที่ผิดกันบ่อยๆ คือ หลังประกาศ if แล้ว ยังไม่รู้ว่าจะทำอะไรกับมันต่อ (แต่รู้แน่ๆ ว่าต้อง check if แบบนี้) ตรงนี้จะปล่อยว่างๆ ไว้ไม่ได้ครับ (เขียนคอมเมนท์ก็ไม่ช่วย) ต้องใช้คำสั่ง pass อย่างนี้

ข้อดี (หรือเสีย) ของ pass คือ กลับมาเขียน code ต่อไม่ต้องลบ pass ทิ้งก็ได้ (แต่ก็ควรจะลบทิ้ง)

การเข้า elif และ else สังเกตว่าตัว check statement จะอยู่ที่ความลึก indent เดียวกันกับ if นะครับ

อ๋อ... Python ไม่มี switch case ให้ใช้นะครับ



การวน for ใน Python จะประหลาดกว่าภาษาอื่นหน่อย ตรงที่ต้องอาศัย range() เข้าช่วย

การจบ loop ทันทีเมื่อเจอ condition หรือข้ามบาง condition ใช้ break และ continue เหมือนภาษาอื่นครับ

ส่วนการวน loop แบบ while ก็จะคล้ายๆ for ครับ
ลูกเล่นพิเศษของ Python คือ else สำหรับ loop ครับ มันจะทำงานก็ต่อเมื่อ loop จบลงธรรมดาๆ และจะไม่ทำงานถ้า loop จบด้วย break เช่น
อนึ่ง Python ไม่มี do ... while แบบภาษาอื่นให้ใช้ด้วยนะครับ (เพราะ while เฉยๆ ก็ครอบคลุมแล้ว)

Python: บูลีน ตรรกะ และการเปรียบเทียบ

บูลีนใน Python นั้นตรงไปตรงมามาก คือใช้ True กับ False ครับ

ตรระกะก็เช่นกัน ใช้คำภาษาอังกฤษอย่าง and or not ตรรงๆ เลย

อย่างไรก็ดี แม่ว่า Python จะเป็น strong type แต่เราก็ยังใช้ 0, 1 แทนบูลีนได้อยู่ (แค่ 2 ตัวเท่านั้น)



การเปรียบเทียบเท่ากับ/ไม่เท่ากับ สามารถใช้ได้กับทั้งตัวเลข, string, บูลีน ฯลฯ โดยมันจะส่งผลลัพท์ออกมาเป็นบูลีน

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

October 29, 2011

Python: ตัวดำเนินการคณิตศาสตร์พื้นฐาน

การแปลงชนิดข้อมูลตัวเลข int <|> float นั้น ใช้

สำหรับ complex นั้น จะถูกแปลงไปจาก int, float ได้อย่างเดียว

การดึงส่วนจริง/จินตภาพให้ใส่ชื่อส่วนตามท้าย ผลลัพท์จะออกมาเป็น float เสมอ



การบวก ลบ คูณ จะให้ผลลัพท์ data กลับมาเป็น int |> float |> complex ตามอันที่ใหญ่ที่สุด

ส่วนการหารด้วยเครื่องหมาย / จะให้ผลลัพท์แค่ float |> complex เท่านั้น

ถ้าต้องการผลลัพท์เป็น int ให้ใช้เครื่องหมาย // แต่มันจะรับตัวแปร complex ไม่ได้



มอดูโล ใช้เครื่องหมาย % ซึ่งมันใช้ได้กับ int, float เท่านั้น
ทั้งนี้ เครื่องหมายของผลลัพท์ จะเป็นบวก/ลบตามตัวหาร ไม่ต้องมานั่งเผื่อเอง

ที่เจ๋งอีกอย่างคือ Python มียกกำลังเป็นเครื่องหมายให้ใช้เลย ไม่ต้องเรียกผ่านฟังก์ชัน



สำหรับการดำเนินการทางคณิตศาสตร์แล้ว assign ค่าให้ตัวแปรเดิม ก็ทำได้ทั่วไปเช่นภาษาอื่น

แต่ทั้งนี้ ใน Python ไม่มีกลุ่ม i++ ให้ใช้นะครับ

October 28, 2011

Python: ตัวเลขและข้อความ

ตัวเลขใน Python ที่ใช้บ่อยๆ มีแค่ 2 แบบ คือ int (จำนวนเต็ม) กับ float (ทศนิยม) ด้วยความเรียบง่ายนี้ ทำให้ int ของ Python ต่างจาก C ตรงที่มันไม่มี overflow ครับ

การประกาศตัวแปร float ต่างจาก int นิดเดียวที่ต้องใส่จุดทศนิยมเข้าไปเท่านั้นแหละครับ ดังตัวอย่าง:

นอกจากนี้ การประกาศตัวแปรใน Python ยังสามารถทำพร้อมกันหลายๆ ตัวได้ แบบนี้

ตัวเลขอีกแบบที่อาจจะไม่ค่อยได้เห็นกันซักเท่าไหร่ (ถ้าไม่ได้ทำงานสายคณิต/วิศวะ) คือจำนวณเชิงซ้อนครับ

การประกาศตัวแปรก็ง่ายเหมือนกับการเขียนจำนวนเชิงซ้อนในกระดาษเลย คือเขียนส่วนจริงบวก/ลบส่วนจินตภาพ ทั้งนี้ หน่วยจินตภาพใช้จะตัว j และต้องมีตัวเลขนำหน้า นะครับ



สำหรับอักษรใน Python มีเพียง string ให้ใช้เพียงอย่างเดียวเท่านั้น (ไม่มี char ครับ)

การประกาศ string ใน Python สามารถใช้เครื่องหมายได้ทั้ง ' (single quote) และ " (double quote) เลย ซึ่งมันไม่มีความแตกต่างด้าน performance เหมือน PHP ครับ

และยังมีท่าประหลาดๆ ในการประกาศ string แบบนี้ด้วย

นอกจากนี้ การประการ string ด้วย ''' (3 single quote) และ """ (3 double quote) จะทำให้เราเขียน string หลายบรรทัดง่ายขึ้น เพราะมันจะแปลงเครื่องหมายขึ้นบรรทัดใหม่ให้เป็น \n โดยอัตโนมัติ

อย่างหนึ่งที่ต้องตระหนักคือ string ของ Python เป็น immutable คือสร้างแล้วไม่สามารถแก้ไขมันได้ครับ (แล้วเราจะมาดูเรื่องนี้กันอีกที)

October 27, 2011

Python: ตกลงกันก่อน

คอมเมนท์ใน Python ใช้เครื่องหมาย # นำหน้าข้อความที่จะคอมเมนท์จนจบบรรทัด (ไม่มีคอมเมนท์หลายบรรทัด)

อย่างไรก็ตาม เครื่องหมาย # ที่ปรากฏอยู่ภายใต้เครื่องหมาย quote นั้น ไม่นับเป็นการคอมเมนท์ครับ



การ indent ใน Python ถือเป็นหัวใจสำคัญอันหนึ่ง (เพราะไม่มีระบบปีกกาเพื่อจบชุดคำสั่ง) แต่เนื่องจาก Windows และ Linux กำหนดขนาดของ tab กว้างไม่เท่ากัน เราจะใช้ 1 level indent = 4 space ครับ (ตั้งค่าใน editor เอา)

อย่างไรก็ตาม ถ้าคุณทำงานคนเดียวหรือไม่ซีเรียสตรงนี้มาก จะใช้เครื่องหมาย tab เพื่อความสะดวกก็ได้ครับ แต่พึงระลึกไว้ว่า การใช้ space และ tab ปนกันเพื่อ indent จะทำให้ code ชุดนั้นเกิด error ได้ครับ



แม้ว่า Python จะมี interpreter แถมมาให้ แต่การพิมพ์คำสั่งหลายๆ บรรทัดใน Python shell คงไม่เหมาะสมเท่าไหร่ (กลับไปแก้ไขบรรทัดก่อนๆ ไม่ได้) ดังนั้นเราจึงควรพิมพ์ script เก็บไว้ในไฟล์ แล้วเรียกทดลอง script ผ่าน terminal แบบนี้ครับ

Python: ที่มาและเตรียมตัวใช้งาน

ถึงแม้เราอยากจะทำตัว geek สนใจแต่ code แค่ไหน อย่างน้อยๆ เราก็ควรรู้ประวัติของมันบ้างนะครับ

1956 กำเนิด Guido van Rossum
1991 Guido ให้กำเนิด Python
2000 Python เดินทางมาถึงเวอร์ชัน 2
2005 Guido เข้าทำงานที่ Google
2008 Python เดินทางมาถึงเวอร์ชัน 3

ที่มาของชื่อ Python นั้นมาจากรายการโทรทัศน์ Monty Python’s Flying Circus ครับ และถึงแม้ว่าทางผู้สร้างจะออกมายืนยันว่าชื่อนี้ไม่ได้มาจากงูอย่างแน่นอน แต่โลโก้ของมันดันเป็นรูปงู 2 ตัวซะหนิ!!



ตัวภาษานั้นถึงจะเป็น OOP แต่ก็แฝงความเป็น functional ไว้ด้วย ระบบตัวแปรเป็นแบบ dynamic และการทำงานของมันเป็นแบบ interpreter ซึ่งแม้จะช้าไปบ้าง แต่จุดแข็งในเรื่อง readability และความเร็วในการพัฒนาโปรแกรมต้นแบบ ก็เข้ามาชดเชยข้อด้อยต่างๆ ไปจนหมดครับ

ผู้ใช้ Windows สามารถดาวน์โหลดโปรแกรมได้จากเว็บ Python เลย หลังจากติดตั้งโปรแกรมเสร็จเรียบร้อยอย่าลืม set path=%path%;C:\python32 ด้วยนะครับ

ส่วนผู้ใช้ Linux ฝั่ง Debian (Ubuntu, Mint) สามารถลงโปรแกรมผ่าน apt-get ได้เลย หรือจะดาวน์โหลด .tar.gz มา build เองก็ย่อมได้ (ผมไม่เคยใช้ Unix/Linux สายอื่น เลยขอละวิธีการลงโปรแกรม)

ทั้งนี้ทั้งนั้น ที่ Tutor0x เราจะใช้ Python 3 กันนะครับ



เรียบร้อยแล้ว? งั้นก็ต้องลองเรียกโปรแกรมมาทักทายกันซักหน่อย

เรียกโปรแกรม python3 ผ่านทาง Terminal กันเลย (ฝั่ง Windows ไม่ต้องใส่เลข 3 นะครับ) หลังจากเจอข้อความต้อนรับประมาณนี้

ลองพิมพ์คำสั่ง

แล้วกด Enter ครับ เท่านี้คุณก็จะได้เข้าร่วมเป็นส่วนหนึ่งกับ Python แล้ว หุหุหุ (ออกโปรแกรมโดยคำสั่ง exit() หรือจะป้อน EOF ก็ได้)

October 26, 2011

ปัดผุ่น

นับตั้งแต่เปิดเว็บมา ผมไม่ได้แวะเข้ามาเขียนอะไรเท่าที่ควร เพราะติดภารกิจโน่นนี่นั่นเต็มไปหมด

ไหนๆ ช่วงนี้ก็ปิดเทอมแล้ว ผมไม่อยากหาข้ออ้างอะไรให้ตัวเองอีก ก็ถือฤกษ์ลุยใหม่หมดตั้งแต่ต้นนับจากวันนี้เป็นต้นไปเลยละกันครับ