เปิดเมนูหลัก

คิดอย่างไพธอน

แปลจาก Think Python โดย Allen Downey, 2nd Edition, Ver 2.2.20 (https://greenteapress.com/wp/think-python/)

เนื้อหา

คำนำแก้ไข

วิถีของโปรแกรม (The way of the program)แก้ไข

จุดประสงค์ของตำรานี้ คือ สอนให้คุณคิดอย่างนักวิทยาศาสตร์คอมพิวเตอร์ หรือวิศวกรคอมพิวเตอร์. วิธีคิดนี้ รวมเอาส่วนของแง่มุมที่ดีที่สุดของคณิตศาสตร์ วิศวกรรม และวิทยาศาสตร์ธรรมชาติ. ในลักษณะเดียวกับนักคณิตศาสตร์ วิศวกรคอมพิวเตอร์ใช้ ภาษารูปนัย (formal language) เพื่อสื่อถึงความคิด (โดยเฉพาะ การคำนวณ การประมวณข้อมูล). ในลักษณะเดียวกับวิศวกรอื่นๆ วิศวกรคอมพิวเตอร์ออกแบบสิ่งต่างๆ ประกอบส่วนประกอบต่างๆเข้าด้วยกันเป็นระบบที่ใหญ่ขึ้น และประเมินข้อดี-ข้อเสีย (tradeoffs) ของทางเลือกต่างๆ. ในลักษณะเดียวกับนักวิทยาศาสตร์ วิศวกรคอมพิวเตอร์สังเกตุพฤติกรรมของระบบที่ซับซ้อน ตั้งสมมติฐาน และทดสอบสมมติฐาน.

ทักษะที่สำคัญที่สุดของวิศวกรคอมพิวเตอร์ คือ ทักษะการแก้ปัญหา (problem solving). ทักษะการแก้ปัญหา หมายถึง ความสามารถในการอ่าน-ตีความปัญหา (formulate problems) คิดอย่างสร้างสรรค์เกี่ยวกับวิธีการแก้ปัญหา (think creatively about solutions) และ การนำเสนอวิธีแก้ปัญหาได้อย่างกระจ่างและตรงประเด็น (express a solution clearly and accurately). นั่นเท่ากับว่า กระบวนการเรียนการเขียนโปรแกรม เป็น โอกาสที่ดีในการฝึกฝนทักษะการแก้ปัญหา. นั่นเป็นเหตุผลว่า บทนี้เรียกว่า วิถีของโปรแกรม

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

อะไรคือโปรแกรม (What is a program?)แก้ไข

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

รายละเอียดของโปรแกรม แตกต่างกันไปบ้างตามแต่ละภาษา แต่คำสั่งพื้นฐานต่างๆ ก็มีอยู่ในทุกๆภาษา ได้แก่

  • อินพุต (input) รับข้อมูลเข้าจากแป้นพิมพ์ ไฟล์ เครือข่าย หรือ อุปกรณ์อื่นๆ.
  • เอาต์พุต (output) แสดงข้อมูลออกหน้าจอ บันทึกข้อมูลลงไฟล์ ส่งข้อมูลผ่านเครือข่าย หรือ ส่งข้อมูลไปอุปกรณ์อื่นๆ.
  • คณิตศาสตร์ (math) ทำการคิดคณิตศาสตร์พื้นฐาน เช่น การบวก และการคูณ.
  • การทำเงื่อนไข (conditional execution) ตรวจสอบเงื่อนไขที่ระบุ และเลือกทำคำสั่งที่เหมาะสม.
  • การทำซ้ำ (repetition) ทำคำสั่งซ้ำๆ โดยแต่ละรอบของการทำซ้ำอาจมีความต่างบ้าง.

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

การรันโปรแกรมไพธอน (Running Python)แก้ไข

เรื่องหนึ่งที่ยากที่สุดของการเริ่มใช้ไพธอน (Python) คือ คุณอาจจะต้องติดตั้งไพธอน รวมถึงซอฟต์แวร์ที่เกี่ยวข้อง. ถ้าคุณคุ้นเคยกับระบบปฏิบัติการ โดยเฉพาะถ้าคุณสะดวกที่จะใช้คอมมานไลน์ (command-line interface) คุณไม่น่ามีปัญหาในการติดตั้งไพธอน. แต่สำหรับมือใหม่ มันก็อาจจะลำบากบ้างที่จะต้องเรียนการจัดการระบบไปพร้อมๆกับการเรียนเขียนโปรแกรม.

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

โปรแกรมแรก (The first program)แก้ไข

ตัวดำเนินการพีชคณิต (Arithmetric operators)แก้ไข

ค่าและชนิด (Values and types)แก้ไข

ภาษารูปนัย และ ภาษาธรรมชาติ (Formal and natural languages)แก้ไข

การดีบัก (Debugging)แก้ไข

คำศัพท์ (Glossary)แก้ไข

(Exercises)แก้ไข

ตัวแปร นิพจน์ และข้อความสั่ง (Variables, expressions and statements)แก้ไข

ฟังชั่น (Functions)แก้ไข

กรณีศึกษา การออกแบบการเชื่อมต่อ (Case study: interface design)แก้ไข

(Conditionals and recursion)แก้ไข

(Fruitful functions)แก้ไข

(Iteration)แก้ไข

(Strings)แก้ไข

(Case study: word play)แก้ไข

(Lists)แก้ไข

(Dictionaries)แก้ไข

(Tuples)แก้ไข

(Case study: data structure selection)แก้ไข

(Files)แก้ไข

คลาสและวัตถุ (Classes and objects)แก้ไข

ณ จุดนี้เรารู้แล้วว่าจะใช้ฟังก์ชันเพื่อจัดระเบียบคำสั่งได้อย่างไรและรู้วิธีใช้ชนิดข้อมูลภายในเพื่อการจัดการข้อมูล ในขั้นถัดไปเป็นการเรียนรู้ "การโปรแกรมเชิงวัตถุ" (Object-oriented programming) ซึ่งใช้ชนิดข้อมูลที่ผู้เขียนกำหนดเองเพื่อจัดการทั้งข้อมูลและคำสั่งในตัว การโปรแกรมเชิงวัตถุมีเนื้อหากว้าง เพื่อให้ครอบคลุมเนื้อหาทั้งหมดจะต้องศึกษาอีกสองถึงสามบทถัดไป

สามารถดูตัวอย่างโปรแกรมของบทนี้ได้ที่ http://thinkpython2.com/code/Point1.py และมีเฉลยอยู่ที่ http://thinkpython2.com/code/Point1_soln.py

ชนิดข้อมูลผู้เขียนกำหนดเอง (User-defined types)แก้ไข

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

ในทางคณิตศาสตร์ใช้สัญลักษณ์แทนพิกัดด้วยวงเล็บคร่อมตำแหน่งที่คั่นด้วยจุลภาค ตัวอย่างเช่น (0,0) ใช้แทนจุดกำเนิดและใช้สัญกรณ์ ​(x,y) หมายถึงจุดที่อยู่ห่างจากจุดกำเนิดไปทางขวา x และอยู่เหนือจากจุดกำเนิดเท่ากับ y

มีหลายวิธีที่สามารถใช้ในการแทนค่าพิกัดในภาษาไพธอน ตัวอย่างเช่น

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

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

ชนิดข้อมูลที่ผู้เขียนสร้างขึ้นจะมีชื่อเรียกอีกอย่างว่า คลาส (class) การนิยามคลาสมีลักษณะดังต่อไปนี้

class Point:

    """Represents a point in 2-D space."""

ส่วนหัวบอกถึงการประกาศคลาสใหม่ที่ชื่อว่า Point ส่วนเนื้อหาเป็นข้อความบรรยายถึงวัตถุประสงค์ของคลาสนี้ นอกจากนี้คุณยังสามารถกำหนดให้มีตัวแปรและเมธอด (method) ไว้ภายในคลาสได้ แต่จะได้กล่าวถึงในภายหลัง

การประกาศคลาสเป็นการสร้างวัตถุคลาส (class object)

>>> Point

<class '__main__.Point'>

เนื่องจากคลาสถูกประกาศไว้ระดับบนสุด ดังนั้นชื่อเต็มของคลาสจึงเป็นดังนี้ __main__.Point

คุณลักษณะ (Attributes)แก้ไข

รูปสี่เหลี่ยม (Rectangles)แก้ไข

ส่งค่ากลับเป็นอินสแตนซ์ (Instances as return values)แก้ไข

วัตถุสามารถแก้ไขได้ (Objects are mutable )แก้ไข

การคัดลอกวัตถุ (Copying)แก้ไข

การดีบัก (Debugging)แก้ไข

อภิธานศัพท์ (Glossary)แก้ไข

แบบฝึกหัด (Exercises)แก้ไข

(Classes and functions)แก้ไข

(Classes and methods)แก้ไข

(Inheritance)แก้ไข

(The Goodies)แก้ไข

(Debugging)แก้ไข

(Analysis of algorithms)แก้ไข