ก่อนอื่นให้ตั้งเป้าหมายที่มือเอื้อมถึงก่อน พอทำสำเร็จไปทีละอย่างแล้ว แม้แต่เป้าหมายที่ตอนแรกเคยคิดว่าไม่อาจเอื้อมถึงในที่สุดก็จะเอื้อมถึงจนได้
(まず手の届く目標を立て、ひとつひとつクリアしていけば、最初は手が届かないと思っていた目標にもやがて手が届くようになるということですね。)
คำพูดโดย สึซึกิ อิจิโรว (鈴木 一朗) นักเบสบอลมืออาชีพชาวญี่ปุ่น (ที่มา)
ใน
บทแรกได้แนะนำเบื้องต้นเกี่ยวกับภาษาไพธอนไปแล้ว สำหรับบทนี้จะเริ่มแนะนำการเขียนโปรแกรม
โปรแกรมที่ใช้รันภาษาไพธอนนั้นมีอยู่หลากหลายแต่ในที่นี้จะยก anaconda มาเป็นตัวอย่าง แต่ใครที่ใช้โปรแกรมอื่นก็สามารถทำความเข้าใจตามได้ เพราะไม่ว่าจะใช้โปรแกรมอะไรในการเขียนก็จะมีลักษณะคล้ายๆกันคือมีส่วนของ
เชลโต้ตอบ และส่วน
อีดิเตอร์สำหรับเขียนไฟล์
การติดตั้งโปรแกรม *** เนื้อหาและรูปตรงส่วนนี้ปรับปรุงใหม่เมื่อ 6 ม.ค. 2019 เนื่องจาก anaconda มีการปรับปรุงใหม่ซึ่งเปลี่ยนแปลงไปพอสมควรการโหลด anaconda ให้เข้าไปที่
https://www.anaconda.com/download
จากนั้นให้เลือกไฟล์ให้ตรงกับ os ที่ตัวเองใช้อยู่
ในหน้านี้จะอธิบายการติดตั้งภายใน windows และ mac ส่วนใน linux จะยาวหน่อยจึงขอแยกไปเขียนในหน้านี้
https://phyblas.hinaboshi.com/20190106 สำหรับ windows ให้ดับเบิลคลิกเปิดไฟล์
.exe ที่โหลดได้มา เลือกโฟลเดอร์ที่ต้องการติดตั้ง แล้วการติดตั้งก็จะเริ่มขึ้น
รายละเอียดตัวเลือกที่จะขึ้นมาระหว่างติดตั้งนั้นอาจเปลี่ยนต่างไปตามรุ่นของโปรแกรมและการตั้งค่าในเครื่องขณะนั้น แต่โดยรวมแล้วกดตกลงไปเรื่อยๆจนถึงสุดท้ายได้ ไม่มีปัญหา
พอติดตั้งเสร็จก็เข้าผ่าน program file ได้ โดยมาที่โฟลเดอร์
Anaconda3 แล้วเลือก
Spyder 
โปรแกรมนี้อาจใช้เวลาในการเปิดนานหน่อย ถ้าไม่ขึ้นทันทีให้รอไปสักพัก
สำหรับ mac จะโหลดไฟล์ได้เป็น
.pkg ก็ให้เปิดแล้วติดตั้งให้เรียบร้อย
พอลงเสร็จให้เข้าไปที่ "แอพพลิเคชั่น"
แล้วเปิดไฟล์ Anaconda-Navigator.app หรือจะเข้าผ่าน Launchpad ก็ได้เช่นกัน

เมื่อเปิดขึ้นมาแล้ว ภายใน anaconda navigator จะมีไอเท็มขึ้นมาให้เลือก ให้กดเลือก
spyder เพื่อเปิด

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

(คลิกที่ภาพเพื่อดูภาพใหญ่)
อีดิเตอร์และเชลโต้ตอบ เมื่อเปิดโปรแกรมขึ้นมาจะเห็นแบ่งออกเป็นส่วนต่างๆ ทางมุมขวาล่างเป็นส่วนที่เรียกว่าเชลโต้ตอบ เป็นส่วนที่เอาไว้โต้ตอบกับโปรแกรมแบบทันที
ในเชลโต้ตอบนั้นเมื่อพิมพ์โค้ดเข้าไปแล้วโปรแกรมจะประมวลผลและให้ผลลัพธ์ออกมาทันที เช่นลองพิมพ์คณิตศาสตร์คำนวณง่ายๆลงไป
129.3 + 91
ก็จะมีการคำนวณแล้วให้ผลลัพธ์ออกมาทันที เป็น
220.3
ส่วนทางด้านซ้ายเป็นส่วนของอีดิเตอร์ คือส่วนสำหรับเขียนโค้ดเพื่อสร้างเป็นไฟล์โปรแกรมเพื่อรัน โดยทั่วไปเวลาเขียนโปรแกรมก็จะเขียนในส่วนนี้
ปกติเมื่อเปิดโปรแกรมขึ้นมาครั้งแรกหรือเมื่อกดสร้างหน้าใหม่ขึ้นมาจะมีข้อความติดมาด้วย ซึ่งไม่มีความสำคัญอะไรให้ลบทิ้งไปได้
ให้ลองพิมพ์
print('sawatdi chaolok')
แล้วก็ให้ไปที่เมนูด้านบน เลือก
File > Save หรือกด
ctrl+s เพื่อบันทึกไฟล์ ตั้งชื่อไฟล์เป็นอะไรก็ได้ตามที่ต้องการ
ไฟล์ภาษาไพธอนนั้นปกติจะใช้สกุลไฟล์เป็น .py แต่ในอีดิเตอร์ของไพธอนโดยทั่วไปเวลาบันทึกไฟล์จะถูกตั้งให้เป็น .py ให้โดยอัตโนมัติอยู่แล้ว
จากนั้นกดที่ปุ่มที่มีสามเหลี่ยมหันไปทางขวาจะเป็นการรันโค้ด หรือจะกด F5 เลยก็ได้ เป็นคีย์ลัด
จากนั้นที่เชลก็จะมีชื่อที่อยู่ของไฟล์ที่เรารันขึ้นโดยเขียนบอกว่ามีการสั่งให้รัน พร้อมทั้งมีข้อความที่เราพิมพ์ลงไปคือ
sawatdi chaolok
ถ้าใครเคยเรียนภาษาอื่นมา เช่นภาษาซี หรือจาวา ปกติแค่เวลาเริ่มต้นก็ต้องพิมพ์อะไรลงไปมากมาย คำพวกนั้นเป็นเหมือนตัวปูทางซึ่งโดยทั่วไปต้องใส่เพื่อให้โปรแกรมเริ่มได้ แต่ในภาษาไพธอนนั้นไม่จำเป็นต้องมีตัวปูทางเหล่านัน เริ่มมาถึงก็พิมพ์เฉพาะคำสั่งที่ต้องการได้ทันทีจึงสะดวกกว่ามาก
ในที่นี้ข้อความบรรทัดเดียวที่ได้เขียนลงไปนั้นก็คือการสั่งให้โปรแกรมใช้งานคำสั่ง print
คำสั่ง print เป็นคำสั่งที่พื้นฐานมากที่สุดอย่างหนึ่งของการเขียนโปรแกรมในหลายๆภาษา มีหน้าที่แสดงผลข้อความออกมาทางหน้าจอ ดังตัวอย่างที่ยกไป
ไม่เพียงแค่อักษรโรมัน (ภาษาอังกฤษ) เท่านั้น อักษรไทยหรืออักษรภาษาอื่นๆก็สามารถพิมพ์ได้เช่นกัน
ลองแทนที่ข้อความ print('sawatdi chaolok') ด้วยอักษรไทยแล้วรันแบบเดิม
print('สวัสดี ชาวโลก')
อนึ่ง ใน anaconda spyder นั้นเมื่อลองพิมพ์ภาษาไทยตามดูแล้วสำหรับใน windows บางคนอาจเจอปัญหาคือพบว่าออกมาเป็นอักษรประหลาด นั่นเกิดจากการที่โปรแกรมนี้ตั้งฟอนต์เริ่มต้นมาเป็นฟอนต์ที่ไม่รองรับภาษา ไทย
ให้ไปที่แถบเมนูด้านบน เลือก
Tools > Preferences หรือกด
ctrl+alt+shift+p
แล้วจะมีให้เลือกฟอนต์ ให้เลือกฟอนต์ที่รอบรับภาษาไทย เช่น Courier New นอกจากนี้ก็อาจปรับขนาดของตัวหนังสือด้วยหากรู้สึกว่าเล็กเกินไป
ไม่ว่าจะพิมพ์ในอีดิเตอร์หรือเชลโต้ตอบก็จะเห็นว่ามีการเปลี่ยนแปลงของสีให้ เห็นชัดเจน สีนี้เป็นตัวแยกให้อ่านง่ายขึ้น ซึ่งสีที่เห็นนี้ก็จะต่างกันไปแล้วแต่อีดิเตอร์หรือเชลที่ใช้
การสั่งในเชลกับการรันในอีดิเตอร์นั้นมีข้อแตกต่างคืออีดิเตอร์จะไม่แสดงผล ข้อความออกมาถ้าไม่ใช้คำสั่ง print ในขณะที่ในเชลจะแสดงผลลัพธ์ทันที
หากลองพิมพ์ในอีดิเตอร์แค่
129.3 + 91
แล้วรันไป ก็จะพบว่าไม่มีอะไรปรากฏขึ้น
แต่ถ้าลองพิมพ์
print(129.3 + 91)
จึงจะมีผลลัพธ์ปรากฏขึ้นมา
ที่เป็นแบบนี้ก็เพราะว่าการพิมพ์แค่ 129.3 + 91 เป็นแค่การสั่งให้คำนวณแล้วคืนค่าที่คำนวณได้ออกมา (เรียกว่าการ return) แต่ยังไม่ได้มีการแสดงผล ดังนั้นจึงต้องใช้คำสั่ง print เพื่อให้แสดงผลที่คำนวณออกมา (เรียกว่า output)
ส่วนในเชลนั้นหากป้อนคำสั่งที่มีการคืนค่ากลับมาก็จะมีการแสดงค่านั้นออกมาโดยอัตโนมัติ
รายละเอียดเกี่ยวกับคำสั่ง print นั้นจะกล่าวถึงใน
บทที่ ๔ โดยละเอียดสำหรับในบทนี้แค่จะยกมาเป็นตัวอย่างให้เห็นคร่าวๆถึงการทำงานของ โปรแกรม
และข้อแตกต่างอีกอย่างหนึ่งก็คือในเชลเราอาจพิมพ์คำสั่งอื่น นอกเหนือจากคำสั่งในภาษาไพธอนได้ เช่นคำสั่งรันไฟล์ (ซึ่งถูกป้อนโดยอัตโนมัติเวลาที่เราสั่งรัน)
เช่น สำหรับ anaconda spyder เวลาที่กดรันโปรแกรมในเชล ipython จะมีข้อความขึ้น runfile() ซึ่งคำสั่งนี้ไม่ใช่คำสั่งในไวยากรณ์ภาษาไพธอน ถ้าพิมพ์ในอีดิเตอร์หรือแม้แต่ในเชลชนิดอื่นจะเกิดข้อผิดพลาดขึ้น ดังนั้นต้องอย่านำมาปนกัน
ในส่วนของบทเรียนต่อจากนี้ไปหากมีตัวอย่างให้ดูจะไม่ระบุว่าควรรันด้วยอีดิเตอร์หรือด้วยเชล แต่ให้เป็นที่รู้กันว่าหากเป็นโค้ดหลายบรรทัดต้องรันในอีดิเตอร์เท่านั้น ส่วนถ้ามีบรรทัดเดียวสามารถรันได้ทั้งสองแบบ
ข้อความและการคำนวณ จะเห็นว่าเราสามารถให้โปรแกรมช่วยคำนวณตัวเลขได้อย่างง่ายดายเหมือนเป็นเครื่องคิดเลข
คอมพิวเตอร์เองวัตถุประสงค์เดิมที่ถูกคิดค้นขึ้นมาก็คือเพื่อใช้ช่วยในการคำนวณ และจะเห็นว่ามันสามารถคำนวณได้ในพริบตา ดังนั้นนี่คือประโยชน์อย่างแรกของคอมพิวเตอร์ที่เราจะเห็นได้
เพียงแต่ว่าในการใช้งานจริงเวลาที่แสดงผลออกมาให้ดูหากมีแค่ตัวเลขอย่างเดียวก็จะดูเข้าใจยาก จึงต้องมีการทำให้แสดงผลตัวหนังสือออกมาด้วย
เช่น
print('นายภากรมีเงิน 18000 บาท นำไปเล่นหุ้น 15000 บาท')
print("แต่ขาดทุน ขายคืนมาได้แค่ 3000 บาท นายภากรเหลือเงิน :")
print("18000 - 15000 + 3000")
print("=")
print(18000 - 15000 + 3000)
จะได้ผลเป็น
นายภากรมีเงิน 18000 บาท นำไปเล่นหุ้น 15000 บาท
แต่ขาดทุน ขายคืนมาได้แค่ 3000 บาท นายภากรเหลือเงิน :
18000 - 15000 + 3000
=
6000
จะเห็นว่าข้อความในส่วนที่มีเครื่องหมายคำพูดแบบเดีย่ว ' ' หรือแบบคู่ " " ครอบอยู่ จะแสดงผลเป็นข้อความมาตามที่พิมพ์ไป แม้ว่าจะเป็นตัวเลขก็ตาม แต่ส่วนที่ไม่ได้ครอบจะคำนวณออกมาเป็นตัวเลข
ซึ่งรูปแบบการคำนวณ สามารถเขียนได้หลากหลายรูปแบบ มีตั้งแต่พื้นฐานคือแค่บวกลบคูณหารง่ายๆ ไปจนถึงการคำนวณที่ซับซ้อนขึ้นไป โปรแกรมสามารถทำได้หมด
เนื้อหาเกี่ยวกับการคำนวณจะกล่าวถึงใน
บทที่ ๕ สำหรับตอนนี้แค่ต้องการให้เข้าใจคร่าวๆถึงหน้าที่ ๒ อย่างของโปรแกรมคอมพิวเตอร์ นั่นคือ "การคำนวณ" และ "การแสดงผล"
ในทางกลับกัน หากพิมพ์สิ่งที่ไม่ใช่ตัวเลขลงไปในวงเล็บโดยที่ไม่ได้ใส่เครื่องหมายคำพูดครอบ
print(นายภากรขาดทุนย่อยยับ)
จะขึ้นมาว่า
NameError: name 'นายภากรขาดทุนย่อยยับ' is not defined
ซึ่งเป็นการเตือนว่าโปรแกรมมีข้อผิดพลาด ในที่นี้เกิดขึ้นเนื่องจากการที่ไม่ได้ใส่เครื่องหมายคำพูดคร่อมข้อความซึ่ง ไม่ใช่ตัวเลขหรือตัวแปร
ข้อผิดพลาดในโปรแกรม โดยทั่วไป หากเขียนแล้วมี
ข้อผิดพลาดทางวากยสัมพันธ์ (syntax error) โปรแกรมก็จะตรวจพบและทำการเตือนทันที ซึ่งรูปแบบในการเตือนนั้นก็ขึ้นอยู่กับเชลหรือ IDE ที่ใช้
เช่นกรณีนี้ ลองพิมพ์
print('sawatdi'
จะขึ้นว่า
unexpected EOF while parsing
เนื่องจากคำสั่ง print ต้องตามด้วยวงเล็บเปิดและปิด ถ้าเปิดวงเล็บแล้วไม่ปิดก็จะเกิดข้อผิดพลาด
พอสั่งรันไปทั้งๆแบบนี้โปรแกรมก็จะฟ้องข้อผิดพลาดพร้อมชี้บอกจุดที่มีปัญหา
ข้อผิดพลาดของโปรแกรมเกิดขึ้นได้จากหลายสาเหตุมาก โดยทั่วไปหากเป็นข้อผิดพลาดทางวากยสัมพันธ์จะรู้ได้ทันทีก่อนรัน แต่หากเป็น
ข้อผิดพลาดขณะการทำงาน (runtime error) จะไม่รู้จนกว่าจะรันโปรแกรมไปแล้วโปรแกรม ฟ้องเตือน
เช่น ลองพิมพ์
3/0
จะขึ้นว่า
ZeroDivisionError: division by zero
นั่นเพราะการหารด้วยศูนย์จะทำให้เกิดค่าเป็นอนันต์ จึงเกิดข้อผิดพลาดขึ้น
นอกจากนี้แล้วยังมีข้อผิดพลาดอีกแบบคือ
ข้อผิดพลาดเชิงตรรกะ (logical error) ซึ่งคือข้อผิดพลาดที่เกิดจากการที่เราสั่งการด้วยตรรกะที่ผิด ซึ่งโปรแกรมจะไม่มีทางตรวจสอบเจอได้แต่เราจะรู้ว่าผิดต่อเมื่อเห็นว่าผลลัพธ์ออกมาไม่ตรงกับที่ควรจะเป็น
เช่นต้องการจะบวกเลข 3+2 แต่ไปพิมพ์ผิดเป็น 3-2 โปรแกรมไม่มีทางรู้ได้ว่าเราเขียนพลาด ก็จะคำนวณให้พลาดตามที่เราเขียน กว่าจะรู้ว่าผิดก็ต่อเมื่อเราเห็นว่าผลลัพธ์ออกมาเป็น 1 แทนที่จะเป็น 5 อย่างที่ควรจะเป็น
ข้อผิดพลาดทั้งหลายนั้น หากเขียนโปรแกรมต่อไปเรื่อยๆจะค่อยๆได้รู้จักคุ้นเคยกับมันเอง แม้ว่าจะไม่ได้อยากจะเจอเลยก็ตาม แต่ยิ่งเจอก็จะยิ่งได้ประสบการณ์และรู้วิธีรับมือได้มากขึ้น
การประมวลผลโค้ด และการคอมเมนต์ โดยปกติแล้วเวลาที่คอมไพเลอร์อ่านโค้ดที่เราเขียนจะอ่านจากบนไปล่างโดยไล่ ตั้งแต่บรรทัดแรกจนจบบรรทัดสุดท้าย ดังนั้นในตัวอย่างนี้จึงเห็นข้อความถูกพิมพ์ออกมาตามลำดับ
โค้ดที่เขียนลงไปจะถูกอ่านทั้งหมด แต่หากเจอเครื่องหมายชาฟต์ # โค้ดตรงหลังเครื่องหมายนี้จะกลายเป็น
คอมเมนต์ (comment) ซึ่งหมายถึงข้อความเขียนประกอบไว้เฉยๆเพื่อเป็นคำอธิบาย ข้อความที่เป็นคอมเมนต์มักจะมีสีต่างไปจากเดิม โดยจะกลายเป็นสีเดียวทั้งหมดไป
เช่น
print('บ้านกับที่ทำงานอยู่ห่างกัน 120 กิโลเมตร') #s
print('รถวิ่งเร็ว 60 กิโลเมตรต่อชั่วโมง') #v
print('ระยะเวลาที่รถต้องวิ่งคือ') #t
print(120/60) #s=vt ซึ่งก็คือ t = s/v
ผลลัพธ์ที่ได้
บ้านกับที่ทำงานอยู่ห่างกัน 120 กิโลเมตร
รถวิ่งเร็ว 60 กิโลเมตรต่อชั่วโมง
ระยะเวลาที่รถต้องวิ่งคือ
2.0
แต่บางครั้งคอมเมนต์ก็ถูกใช้เพื่อเก็บโค้ดที่ไม่ได้ใช้งานแล้วแต่ยังเก็บไว้ก่อนเผื่อใช้อ้างอิง หรืออาจนำกลับมาใช้อีกด้วย เช่น
print('บ้านกับที่ทำงานอยู่ห่างกัน 120 กิโลเมตร') #s
#print('รถวิ่งเร็ว 60 กิโลเมตรต่อชั่วโมง') #v
print('รถวิ่งเร็ว 10 กิโลเมตรต่อชั่วโมง') #รถติดตรงสุขุมวิท
print('ระยะเวลาที่รถต้องวิ่งคือ')
#print(120/60) #s=vt ซึ่งก็คือ t = s/v
print(120/10)
นอกจากการใช้ # แล้วยังมีการสร้างคอมเมนต์อีกวิธีก็คือใช้เครื่องหมายคำพูด ' ' หรือ " " ครอบคำพูดที่ไม่ต้องการให้ทำงาน
และหากต้องการที่จะคอมเมนต์หลายบรรทัดก็ทำได้ด้วยการใช้เครื่องหมายคำพูดครอบ ๓ อันซ้อน ''' ''' หรือ""" """ ซึ่งมีชื่อเรียกเฉพาะว่า
ทริเพิลโควเทชัน (triple quotation) ที่ใช้แบบนี้ได้เพราะปกติการใช้เครื่องหมายคำพูดจะใช้แสดงสายอักขระ (string) แต่ถ้าไม่มีการใส่ลงในฟังก์ชัน (เช่นใส่ใน print เพื่อให้พิมพ์ออกมา) ก็จะถูกอ่านผ่านไปเฉยๆไม่มีการแสดงผลอะไรที่สามารถเห็นได้ ดังนั้นเครื่องหมายคำพูดซ้อน ๓ จึงนิยมใช้แทน # ในกรณีที่ต้องการคอมเมนต์หลายบรรทัด
ตัวอย่าง โค้ด ใส่คอมเมนต์โค้ดที่เขียนในตัวอย่างที่แล้วทั้งหมดด้วยทริเพิลโควเทชัน
'''
print('บ้านกับที่ทำงานอยู่ห่างกัน 120 กิโลเมตร') #s
#print('รถวิ่งเร็ว 60 กิโลเมตรต่อชั่วโมง') #v
print('รถวิ่งเร็ว 10 กิโลเมตรต่อชั่วโมง') #รถติดตรงสุขุมวิท
print('ระยะเวลาที่รถต้องวิ่งคือ')
#print(120/60) #s=vt ซึ่งก็คือ t = s/v
print(120/10)
'''
print('รถติดแบบนี้นอนอยู่บ้านดีกว่า')
ผลลัพธ์ที่ได้
รถติดแบบนี้นอนอยู่บ้านดีกว่า
โดยปกติโค้ดแต่ละบรรทัดมักจะมีคำสั่งเพียงอย่างเดียว แต่หากต้องการให้บรรทัดหนึ่งมีหลายคำสั่ง เราสามารถเขียนคำสั่งรวมกันในบรรทัดเดียวได้โดยคั่นด้วยเซมิโคลอน ;
เช่น
print(" oo oo"); print(" o ø o"); print(" o o"); print(" o o"); print(" o");
จะได้ผลลัพธ์เป็น
oo oo
o ø o
o o
o o
o
ในทางกลับกัน หากคำสั่งหนึ่งยาวมาก อยากจะขึ้นบรรทัดใหม่ ก็สามารถทำได้โดยใช้แบ็กสแลช \
เช่น
print('คนเราแค่ตายไปน่ะไม่หายไปจากโลกหรอก \
คนเราจะตายไปจริงๆก็ต่อเมื่อ\
ถูกลืมเลือนหายไปจากความทรงจำของผู้คนที่ยังมีชีวิตอยู่')
จะได้ผลเป็น
คนเราแค่ตายไปน่ะไม่หายไปจากโลกหรอก คนเราจะตายไปจริงๆก็ต่อเมื่อถูกลืมเลือนหายไปจากความทรงจำของผู้คนที่ยังมีชีวิตอยู่
(
ที่มาของประโยค)
สรุปเนื้อหา ในบทนี้เราได้เริ่มทำความเข้าใจกับวิธีการเริ่มต้นทำงานกับภาษาไพธอน อีกทั้งยังเริ่มยกตัวอย่างการเขียนเบื้องต้น
นี่เป็นพื้นฐานสำหรับเนื้อหาต่อๆไป
อ้างอิง