ก่อนอื่นให้ตั้งเป้าหมายที่มือเอื้อมถึงก่อน พอทำสำเร็จไปทีละอย่างแล้ว แม้แต่เป้าหมายที่ตอนแรกเคยคิดว่าไม่อาจเอื้อมถึงในที่สุดก็จะเอื้อมถึงจนได้
(まず手の届く目標を立て、ひとつひとつクリアしていけば、最初は手が届かないと思っていた目標にもやがて手が届くようになるということですね。)
คำพูดโดย สึซึกิ อิจิโรว (鈴木 一朗) นักเบสบอลมืออาชีพชาวญี่ปุ่น (ที่มา)
ใน
บทแรกได้แนะนำเบื้องต้นเกี่ยวกับภาษาไพธอนไปแล้ว สำหรับบทนี้จะเริ่มแนะนำการเขียนโปรแกรม
วิธีการเขียนและรันโปรแกรมภาษาไพธอนนั้นมีอยู่หลากหลาย แต่สำหรับผู้ที่เพิ่งเริ่มฝึก เพื่อที่จะมุ่งเน้นในส่วนของตัวภาษาโดยไม่ต้องไปกังวลกับเรื่องที่เป็นระดับสูงขึ้นไปมากนัก จึงขอแนะนำให้ใช้โปรแกรมที่เรียกว่า
สิ่งแวดล้อมสำหรับการพัฒนาแบบเบ็ดเสร็จ (Integrated Development Environment) หรือเรียกย่อๆว่า
IDE IDE เป็นโปรแกรมสำเร็จรูปสำหรับพัฒนาการเขียนโปรแกรมซึ่งประกอบไปด้วยส่วนประกอบต่างๆที่จำเป็น เช่นคอมไพเลอร์, อีดิเตอร์, ฯลฯ
สำหรับภาษาไพธอนนั้นมี IDE อยู่หลากหลายตัว ในที่นี้จะขอแนะนำตัวที่ใช้ง่ายและได้รับความนิยมที่สุดนั่นคือ spyder แต่ใครที่ใช้โปรแกรมอื่นก็สามารถทำความเข้าใจตามได้ เพราะไม่ว่าจะใช้โปรแกรมอะไรในการเขียนก็จะมีลักษณะคล้ายๆกันคือมีส่วนของ
เชลโต้ตอบ และส่วน
อีดิเตอร์สำหรับเขียนไฟล์
การติดตั้งโปรแกรม การติดตั้ง spyder นั้นมีอยู่หลายวิธี แต่วิธีที่แนะนำสำหรับผู้ฝึกหัดที่สุดก็คือลงผ่านแพ็กเกจที่เรียกว่า anaconda
ให้เริ่มโดยการดาวน์โหลด anaconda โดยให้เข้าไปที่
https://www.anaconda.com/download จากนั้นให้เลือกไฟล์ให้ตรงกับ OS ที่ตัวเองใช้อยู่
เช่นสำหรับวินโดวส์ให้ทำการเปิดไฟล์
.exe ที่โหลดได้มา เลือกโฟลเดอร์ที่ต้องการติดตั้ง แล้วการติดตั้งก็จะเริ่มขึ้น
เมื่อติดตั้งเสร็จเรียบร้อยแล้วก็สามารถเข้าได้โดยอาจค้นว่า spyder ใน program file กดเปิด spyder ขึ้นมา
ส่วนใน mac นั้นเมื่อกดโหลดจะได้ไฟล์
.pkg มา ทำการติดตั้งเสร็จให้เปิด anaconda-navigator ผ่าน launchpad แล้วก็กดเลือก spyder
หรือไม่งั้นก็ง่ายกว่านั้นคือเปิดเทอร์มินัลแล้วพิมพ์ว่า spyder ก็จะเป็นการเปิดแค่ spyder ขึ้นมาได้เลย
ไม่ว่าจะเปิดด้วยวินโดวส์หรือแมคพอเปิด spyder ก็จะขึ้นหน้าจอในลักษณะนี้ขึ้นมา ซึ่งประกอบไปด้วยส่วนต่างๆ ที่สำคัญได้แก่อีดิเตอร์และเชลโต้ตอบ เช่นในภาพนี้ด้านซ้ายคือส่วนอีดิเตอร์ ส่วนด้านล่างขวาคือเชลโต้ตอบ
อีดิเตอร์และเชลโต้ตอบ เมื่อเปิดโปรแกรมขึ้นมาจะเห็นแบ่งออกเป็นส่วนต่างๆ ทางมุมขวาล่างเป็นส่วนที่เรียกว่าเชลโต้ตอบ เป็นส่วนที่เอาไว้โต้ตอบกับโปรแกรมแบบทันที
เชลโต้ตอบของไพธอนนั้นก็มีหลากหลายแบบ แต่เชลโต้ตอบที่ใช้ใน spyder นั้นเป็นเชลแบบที่เรียกว่า
IPython ในเชลโต้ตอบนั้นเมื่อพิมพ์โค้ดเข้าไปแล้วโปรแกรมจะประมวลผลและให้ผลลัพธ์ออกมาทันที เช่นลองพิมพ์คณิตศาสตร์คำนวณง่ายๆลงไป
129.3 + 91
ก็จะมีการคำนวณแล้วให้ผลลัพธ์ออกมาทันที เป็น
220.3
ส่วนทางด้านซ้ายเป็นส่วนของอีดิเตอร์ คือส่วนสำหรับเขียนโค้ดเพื่อสร้างเป็นไฟล์โปรแกรมเพื่อรัน โดยทั่วไปเวลาเขียนโปรแกรมก็จะเขียนในส่วนนี้
ใน IDE ดังเช่น spyder นั้นปกติเมื่อเปิดโปรแกรมขึ้นมาครั้งแรกหรือเมื่อกดสร้างหน้าใหม่ขึ้นมาอาจจะมีข้อความติดมาด้วย ซึ่งไม่มีความสำคัญอะไรให้ลบทิ้งไปได้
ให้ลองพิมพ์แค่
print('sawatdi chaolok')
แล้วก็ให้ไปที่เมนูด้านบน เลือก
File > Save หรือกด
ctrl+s เพื่อบันทึกไฟล์ ตั้งชื่อไฟล์เป็นอะไรก็ได้ตามที่ต้องการ
ไฟล์ภาษาไพธอนนั้นปกติจะใช้สกุลไฟล์เป็น
.py แต่ในอีดิเตอร์ของไพธอนโดยทั่วไปเวลาบันทึกไฟล์จะถูกตั้งให้เป็น
.py ให้โดยอัตโนมัติอยู่แล้ว
จากนั้นกดที่ปุ่มที่มีสามเหลี่ยมหันไปทางขวาจะเป็นการรันโค้ด หรือจะกด F5 เลยก็ได้ เป็นคีย์ลัด
จากนั้นที่เชลก็จะมีชื่อที่อยู่ของไฟล์ที่เรารันขึ้นโดยเขียนบอกว่ามีการสั่งให้รัน พร้อมทั้งมีข้อความที่เราพิมพ์ลงไปคือ
sawatdi chaolok
ถ้าใครเคยเรียนภาษาอื่นมา เช่นภาษาซี หรือจาวา ปกติแค่เวลาเริ่มต้นก็ต้องพิมพ์อะไรลงไปมากมาย คำพวกนั้นเป็นเหมือนตัวปูทางซึ่งโดยทั่วไปต้องใส่เพื่อให้โปรแกรมเริ่มได้ แต่ในภาษาไพธอนนั้นไม่จำเป็นต้องมีตัวปูทางเหล่านัน เริ่มมาถึงก็พิมพ์เฉพาะคำสั่งที่ต้องการได้ทันทีจึงสะดวกกว่ามาก
ในที่นี้ข้อความบรรทัดเดียวที่ได้เขียนลงไปนั้นก็คือการสั่งให้โปรแกรมใช้งานคำสั่ง
print
คำสั่ง
print
เป็นคำสั่งที่พื้นฐานมากที่สุดอย่างหนึ่งของการเขียนโปรแกรมในหลายๆภาษา มีหน้าที่แสดงผลข้อความออกมาทางหน้าจอ ดังตัวอย่างที่ยกไป
ไม่เพียงแค่อักษรโรมัน (ภาษาอังกฤษ) เท่านั้น อักษรไทยหรืออักษรภาษาอื่นๆก็สามารถพิมพ์ได้เช่นกัน
ลองแทนที่ข้อความ
print('sawatdi chaolok')
ด้วยอักษรไทยแล้วรันแบบเดิม
print('สวัสดี ชาวโลก')
ไม่ว่าจะพิมพ์ในอีดิเตอร์หรือเชลโต้ตอบก็จะเห็นว่ามีการเปลี่ยนแปลงของสีให้เห็นชัดเจน สีนี้เป็นตัวแยกให้อ่านง่ายขึ้น ซึ่งสีที่เห็นนี้ก็จะต่างกันไปแล้วแต่อีดิเตอร์หรือเชลที่ใช้
การสั่งในเชลกับการรันในอีดิเตอร์นั้นมีข้อแตกต่างคืออีดิเตอร์จะไม่แสดงผลข้อความออกมาถ้าไม่ใช้คำสั่ง
print
ในขณะที่ในเชลจะแสดงผลลัพธ์ทันที
หากลองพิมพ์ในอีดิเตอร์แค่
129.3 + 91
แล้วรันไป ก็จะพบว่าไม่มีอะไรปรากฏขึ้น
แต่ถ้าลองพิมพ์
print(129.3 + 91)
จึงจะมีผลลัพธ์ปรากฏขึ้นมา
ที่เป็นแบบนี้ก็เพราะว่าการพิมพ์แค่
129.3 + 91
เป็นแค่การสั่งให้คำนวณแล้วคืนค่าที่คำนวณได้ออกมา (เรียกว่าการ return) แต่ยังไม่ได้มีการแสดงผล ดังนั้นจึงต้องใช้คำสั่ง
print
เพื่อให้แสดงผลที่คำนวณออกมา (เรียกว่า output)
ส่วนในเชลนั้นหากป้อนคำสั่งที่มีการคืนค่ากลับมาก็จะมีการแสดงค่านั้นออกมาโดยอัตโนมัติ
รายละเอียดเกี่ยวกับคำสั่ง
print
นั้นจะกล่าวถึงใน
บทที่ ๔ โดยละเอียดสำหรับในบทนี้แค่จะยกมาเป็นตัวอย่างให้เห็นคร่าวๆถึงการทำงานของโปรแกรม
และข้อแตกต่างอีกอย่างหนึ่งก็คือในเชลเราอาจพิมพ์คำสั่งอื่น นอกเหนือจากคำสั่งในภาษาไพธอนได้ เช่นคำสั่งรันไฟล์ (ซึ่งถูกป้อนโดยอัตโนมัติเวลาที่เราสั่งรัน)
เช่น สำหรับ 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'
จะขึ้นว่า
SyntaxError: '(' was never closed
เนื่องจากคำสั่ง
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('คนเราแค่ตายไปน่ะไม่หายไปจากโลกหรอก \
คนเราจะตายไปจริงๆก็ต่อเมื่อ\
ถูกลืมเลือนหายไปจากความทรงจำของผู้คนที่ยังมีชีวิตอยู่')
จะได้ผลเป็น
คนเราแค่ตายไปน่ะไม่หายไปจากโลกหรอก คนเราจะตายไปจริงๆก็ต่อเมื่อถูกลืมเลือนหายไปจากความทรงจำของผู้คนที่ยังมีชีวิตอยู่
(
ที่มาของประโยค)
สรุปเนื้อหา ในบทนี้เราได้เริ่มทำความเข้าใจกับวิธีการเริ่มต้นทำงานกับภาษาไพธอน อีกทั้งยังเริ่มยกตัวอย่างการเขียนเบื้องต้น นี่เป็นพื้นฐานสำหรับเนื้อหาต่อๆไป
อ้างอิง