หน่วยการเรียนรู้ที่ 2 การออกแบบและการเขียนโปรแกรมเบื้องต้น

อ้างอิงจาก : หนังสือเรียนรายวิชาพื้นฐานวิทยาศาสตร์ เทคโนโลยี (วิทยาการคำนวณ) ของ สสวท.
ประกอบด้วยเนื้อหา ดังนี้
1.  ตัวอย่างระบบคำนวณค่าโดยสารรถประจำทาง
2. ตัวดำเนินการบูลีน
3.  การวนซ้ำด้วยคำสั่ง while
4.  เงื่อนไขทางเลือก
5.  ฟังก์ชัน

จุดประสงค์ของบทเรียน
1. เขียนโปรแกรมไพหอนที่มีการใช้งานฟังก์ชันที่สร้างขึ้นเองได้
2. เขียนโปรแกรมไพหอนที่มีการใช้ตัวดำเนินการบูลีนได้


รู้จักภาษาไพทอน ( Python )
    ไพทอน (Python) เป็นภาษาเขียนโปรแกรมระดับสูงที่ใช้กันอย่างกว้างขวางในการเขียนโปรแกรมสำหรับวัตถุประสงค์ทั่วไป ภาษา Python นั้นสร้างโดย Guido van Rossum และถูกเผยแพร่ครั้งแรกในปี 1991 Python นั้นเป็นภาษาแบบ interprete ที่ถูกออกแบบโดยมีปรัญชาที่จะทำให้โค้ดอ่านได้ง่ายขึ้น และโครงสร้างของภาษานั้นจะทำให้โปรแกรมเมอร์สามารถเข้าใจแนวคิดการเขียนโค้ดโดยใช้บรรทัดที่น้อยลงกว่าภาษาอย่าง C++ และ Java ซึ่งภาษานั้นถูกกำหนดให้มีโครงสร้างที่ตั้งใจให้การเขียนโค้ดเข้าใจง่ายทั้งในโปรแกรมเล็กไปจนถึงโปรแกรมขนาดใหญ่ 
    ตัวแปรในภาษา Python นั้นมีให้ใช้ในหลายระบบปฏิบัติการ ทำให้โค้ดของภาษา Python สามารถรันในระบบต่างๆ ได้อย่างกว้างขวาง CPython นั้นเป็นการพัฒนาในตอนตั้นของ Python ซึ่งเป็นโปรแกรมแบบ open source และมีชุมชนสำหรับเป็นต้นแบบในการพัฒนา เนื่องจากมันได้มีการนำไปพัฒนากระจายไปอย่างหลากหลาย CPython นั้นจึงถูกจัดการโดยองค์กรไม่แสวงหาผลกำไรอย่าง Python Software Foundation

ประวัติของภาษา Python
    ภาษา Python นั้นกำเนิดขึ้นในปลายปี 1980 และการพัฒนาของมันนั้นเริ่มต้นใน December 1989 โดย Guido van Rossum ที่ Centrum Wiskunde & Informatica (CWI) ในประเทศเนเธอร์แลนด์

1.โครงสร้างของภาษา Python 

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

Python นั้นมีคุณสมบัติเป็นภาษาเขียนโปรแกรมแบบไดนามิกส์และมีระบบการจัดการหน่วยความจำอัตโนมัติและสนับสนุนการเขียนโปรแกรมหลายรูปแบบ ที่ประกอบไปด้วย การเขียนโปรแกรมเชิงวัตถุ imperative การเขียนโปรแกรมแบบฟังก์ชัน และการเขียนโปรแกรมแบบขั้นตอน มันมีไลบรารี่ที่ครอบคลุมการทำงานอย่างหลากหลาย

Simple Python program

    เพื่อเริ่มต้นการเรียนรู้ในภาษา Python มาดูตัวอย่างของโปรแกรมอย่างง่าย โดยเป็นโปรแกรมที่ถามชื่อผู้ใช้และแสดงข้อความทักทายทางหน้าจอ มาเริ่มเขียนโปรแกรมแรกในภาษา Python ให้พิมพ์โค้ดภาษาไพทอน Python ลงในเว็บ ::> Online Python compiler แล้วลองรันดูผลลัพธ์

    ในตัวอย่างเป็นโปรแกรมในการรับชื่อและแสดงข้อความทักทายออกทางหน้าจอ ในการรันโปรแกรมคุณสามารถรันได้หลายวิธี แต่ที่แนะนำคือการใช้ Python shell ให้คุณเปิด Python shell ขึ้นมาแล้วกดสร้างไฟล์ใหม่โดยไปที่ File -> New File จะปรากฏกล่อง Text editor ของภาษา Python ขึ้นมา เพื่อรันโปรแกรม Run -> Run Module หรือกด F5 โปรแกรมจะเปลี่ยนกลับไปยัง Python shell และเริ่มต้นทำงาน

    นี่เป็นผลลัพธ์การทำงานในการรันโปรแกรม first.py จาก Python shell ในตัวอย่างได้กรอกชื่อเป็น "Mateo" และหลังจากนั้นโปรแกรมได้แสดงข้อความทักทายและจบการทำงาน ในตอนนี้ยังไม่ต้องกังวลว่าโปรแกรมในแต่ละบรรทัดนั้นทำงานยังไง ซึ่งจะอธิบายในขั้นต่อไป

Module

    ในตัวอย่างโปรแกรมรับชื่อของเรา เป็นโปรแกรมแรกของเราในบทเรียน Python นี้ และเราได้บันทึกเป็นไฟล์ที่ชื่อว่า _first.py _ ซึ่งไฟล์ของภาษา Python นั้นจะเรียกว่า Module ซึ่ง Module จะประกอบไปด้วยคลาส ฟังก์ชัน และตัวแปรต่างๆ และนอกจากนี้เรายังสามารถ import โมดูลอืนเข้ามาในโปรแกรมได้ ซึ่งโมดูลอาจจะอยู่ภายใน package ซึ่งเป็นเหมือน directory ของ Module ในตัวอย่าง _first.py _ จึงเป็นโมดูลของโปรแกรมแรกของเรา

Comment

    คอมเมนต์ในภาษา Python นั้นเริ่มต้นด้วยเครื่องหมาย # คอมเมนต์สามารถเริ่มต้นที่ตำแหน่งแรกของบรรทัดและหลังจากนั้นจะประกอบไปด้วย Whilespace หรือโค้ดของโปรแกรม หรือคำอธิบาย ซึ่งโดยทั่วไปแล้วคอมเมนต์มักจะใช้สำหรับอธิบายซอสโค้ดที่เราเขียนขึ้นและมันไม่มีผลต่อการทำงานของโปรแกรม นี่เป็นตัวอย่างการคอมเมนต์ในภาษา Python


Statement

    Statement คือคำสั่งการทำงานของโปรแกรม แต่ละคำสั่งในภาษา Python นั้นจะแบ่งแยกด้วยการขึ้นบรรทัดใหม่ ซึ่งจะแตกต่างจากภาษา C และ Java ซึ่งใช้เครื่องหมายเซมิโคลอนสำหรับการจบคำสั่งการทำงาน แต่อย่างไรก็ตาม ในภาษา Python นั้นคุณสามารถมีหลายคำสั่งในบรรทัดเดียวกันได้โดยการใช้เครื่องหมายเซมิโคลอน ;

 ในตัวอย่าง เรามี 4 คำสั่งในโปรแกรม สองบรรทัดแรกเป็นคำสั่งที่ใช้บรรทัดใหม่ในการจบคำสั่ง ซึ่งเป็นแบบปกติในภาษา Python และบรรทัดสุดท้ายเรามีสองคำสั่งในบรรทัดเดียวที่คั่นด้วยเครืองหมาย ; สำหรับการจบคำสั่ง

( อ้างอิงจาก http://marcuscode.com/lang/python/program-struct )

ตัวอย่างการเขียนโค้ด (Code)

ตัวอย่างผลลัพธ์

    ตัวแปร (variable) คือ ชื่อหรือเครื่องหมายที่กำหนดขึ้นสำหรับใช้เก็บค่าในหน่วยความจำ ตัวแปรจะมีชื่อ (identifier) สำหรับใช้ในการอ้างถึงข้อมูลของมัน ในการเขียนโปรแกรม ค่าของตัวแปรสามารถที่จะกำหนดได้ใน run-time หรือเปลี่ยนแปลงอยู่ตลอดเวลาในขณะที่โปรแกรมทำงาน (executing)

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

ในตัวอย่าง ได้ทำการประกาศ 3 ตัวแปร ในการประกาศตัวแปรในภาษา Python ไม่จำเป็นต้องระบุประเภทของตัวแปรในตอนที่ประกาศเหมือนในภาษา C ในตัวแปร a มีค่าเป็น 3 และเป็นประเภทเป็น Integer ตัวแปร b มีค่าเป็น 4.92 และเป็นประเภทเป็น Float และตัวแปร c มีค่าเป็น "marcuscode.com" และเป็นประเภท String ภายหลังได้เปลี่ยนค่าของตัวแปร c เป็น 10.5 ตัวแปรกลายเป็นประเภท Float


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

    ตัวอย่างที่ 2.1 ค่ารถโดยสาร
    รถโดยสารสาธารณะในอำเภอหนึ่ง ประกาศอัตราค่าโดยสารไว้ดังนี้

  • ผู้โดยสารทั่วไป คิดอัตราคนละ 10 บาทตลอดเส้นทาง
  • ผู้โดยสารที่เป็นเด็กอายุต่ำกว่า 3 ขวบ โดยสารฟรี
  • ผู้โดยสารสูงอายุที่มีอายุตั้งแต่ 60 ปีขึ้นไป คิดค่าโดยสารครึ่งราคา
  • ราคาค่าโดยสารสำหรับหมู่คณะที่ประกอบด้วยผู้โดยสารไม่เกิน 30 คน ถ้าค่าโดยสารรวมเป็นจำนวนตั้งแต่ 200 บาทขึ้นไปจะมีส่วนลดเพิ่มอีก 10%

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

    2. ค่าโดยสารรวมของผู้สูงอายุเป็นเท่าไร
    ตอบ ค่าโดยสารรวมของผู้สูงอายุ คำนวณได้จาก จำนวนผู้สูงอายุคุณกับค่าโดยสาร 5 บาท (ครึ่งหนึ่งของ 10 บาท)
    3. ค่าโดยสารรวมของผู้โดยสารที่จ่ายเต็มราคาเป็นเท่าไร
    ตอบ ค่าโดยสารรวมของผู้โดยสารที่จ่ายเต็มราคา คำนวณได้จาก จำนวนผู้โดยสารที่เหลือ (ผลลัพธ์จาก  ข้อ 1) คูณกับ 10 บาท
    4. ค่าโดยสารรวมทั้งหมดเป็นเท่าไรก่อนลดราคา
    ตอบ ค่าโดยสารวมทั้งหมด คำนวณได้จาก ค่าโดยสารวมของผู้สูงอายุ (ผลลัพธ์จากข้อ 2) บวกกับ

ค่าโดยสารรวมของผู้โดยสารที่จ่ายเต็มราคา (ผลลัพธ์จากข้อ 3)
    5. ได้รับส่วนลด 10% หรือไม่
    ตอบ ได้รับส่วนลดเมื่อมีจำนวนผู้โดยสารไม่เกิน 30 คน และมีค่าโดยสารรวมตั้งแต่ 200 บาทขึ้นไป
    6. หากได้รับส่วนลด ค่าโดยสารสุทธิเป็นเท่าไร
    ตอบ ค่าโดยสารสุทธิคำนวณได้จาก ค่าโดยสารรวมทั้งหมด (ผลลัพธ์จากข้อ 4) ลบด้วย 10% ของค่าโดยสารรวมทั้งหมด
    7. แสดงผลอะไรบ้าง
    ตอบ แสดงจำนวนผู้โดยสารทั้งหมด จำนวนผู้โดยสารที่จ่ายเต็มราคา จำนวนผู้โดยสารที่เป็นเด็กอายุต่ำ  กว่า 3 ขวบ จำนวนผู้โดยสารที่เป็นผู้สูงอายุ ค่าโดยสารรวมก่อนลดราคา และค่าโดยสารสุทธิหลังหักส่วนลด

นำแนวทางการแก้ปัญหาย่อยที่ได้มาเรียบเรียงเป็นอัลกอทีมในรูปแบบรหัสลำลองได้ดังนี้
    1. all <-- รับจำนวนผู้โดยสารทั้งหมด
    2. children <-- รับจำนวนผู้โดยสารที่มีอายุต่ำกว่า 3 ขวบ
    3. elders <-- รับจำนวนผู้สูงอายุ (มีอายุตั้งแต่ 60 ปีขึ้นไป)
    4. regular <-- (all - children - elders)
    5. fare_elders <-- elders*(10/2)
    6. fare_regular <-- regular*10
    7. total <-- fare _elders + fare_regular
    8. แสดงค่า all, children, elders, regular
    9. แสดงค่า total
    10. ถ้า all <= 30 และ total >= 200
        10.1 total_discounted <-- total -(total*0.1)
        10.2 แสดงค่า total_discounted

2.2 ตัวดำเนินการบูลีน

        ในชั้นมัธยมศึกษาปีที่ 1 นักเรียนสามารถเขียนโปรแกรมไพหอนให้มีการตัดสินใจทำงานแบบมีทางเลือกโดยใช้คำสั่ง if และ if-else ในเบื้องต้นมาแล้ว ในบทนี้นักเรียนจะได้เรียนรู้นิพจน์เปรียบเทียบ และตัวดำเนินการบูลีน เพื่อที่จะสามารถกำหนดเงื่อนไขสำหรับการทำงานแบบมีทางเลือกของคำสั่ง if ได้อย่างมีประสิทธิภาพมากขึ้น

        นิพจน์เปรียบเทียบที่ได้กล่าวมาแล้วเป็นนิพจน์เปรียบเทียบอย่างง่าย โดยเป็นการเปรียบเทียบค่าชนิดเดียวกันด้วยตัวดำเนินการเปรียบเทียบเท่านั้น แต่หากต้องการกำหนดเงื่อนไขที่ชับซ้อนขึ้น สามารถใช้ตัวดำเนินการบูลีนได้แก่ and or หรือ nt ในการเชื่อมต่อนิพจน์เปรียบเทียบอย่างง่ายเข้าด้วยกันได้

ตัวอย่างที่ 2.2 การหาผลลัพธ์ค่าความจริงจากนิพจน์เปรียบเทียบที่มีการใช้ตัวดำเนินการบูลีนทดลองพิมพ์คำสั่งต่อไปนี้ในคอนโซล
            age = 12
            age>13 and age<19
            age>13 or age<19
            not age>13
.     จะได้ผลลัพธ์คือ
            False
            True
            True

2.3 การวนซ้ำด้วยคำสั่ง while
        ในการเขียนโปรแกรมให้ทำงานวนซ้ำชุดคำสั่งเดิม นอกจากคำสั่ง for แล้ว ภาษาไพหอนยังมีคำสั่ง whileให้เลือกใช้งาน ซึ่งคำสั่ง while จะเหมาะสมกับกรณีการวนซ้ำที่ไม่ทราบจำนวนรอบหรือจำนวนครั้งของการวนซ้ำที่แน่นอน มีรูปแบบการใช้ดังนี้
    while เงื่อนไขทางเลือก :
           ชุดคำสั่ง

2.4 เงื่อนไขทางเลือก
        คำสั่ง if-els ช่วยให้ไปรแกรมไพหอนสามารถตัดสินใจเลือทำงานชุดคำสั่งตามผลลัพธ์ของเงื่อนไขซึ่งมีสองทางเลือก และหากมีทางเลือกมากกว่านั้น ผู้เขียนโปรแกรมต้องใช้คำสั่ง if-ele ร่วมกัน หรือซ้อนกันเพื่อให้ได้จำนวนทางเลือกตามที่ต้องการไพทอนยังมีคำสั่งให้ใช้ในกรณีที่มีหลายทางเลือกคือคำสั่ง if-el if-elseซึ่งจะช่วยให้สะดวกขึ้น โดยมีรูปแบบการใช้ดังนี้

        if เงื่อนไขทางเลือก 1:
            ชุดคำสั่ง 1
        elif เงื่อนไขทางเลือก 2:
            ชุดคำสั่ง 2
        elif เงื่อนไขทางเลือก 3:
            ชุดคำสั่ง 3
      ...
        else:
            ชุดคำสั่งสุดท้าย

2.5 ฟังก์ชัน
        ฟังก์ชัน (function) เป็นโปรแกรมย่อยที่เขียนขึ้นเพื่อให้ทำงานเฉพาะตามที่กำหนด ผู้เขียนโปรแกรมสามารถเรียกใช้ฟังก์ชันได้สะดวกโดยไม่ต้องเขียนชุดคำสั่งซ้ำอีก ทำให้การเขียนโปรแกรมขนาดใหญ่ทำได้รวดเร็วและ ตรวจสอบความถูกต้องของโปรแกรมได้ง่ายขึ้น
        ไพทอนมีฟังก์ชันให้ใช้งานเป็นจำนวนมาก นักเรียนเคยใช้งานมาแล้วหลายคำสั่ง เช่น input (),  
print (), int(), float() และ type () การใช้งานฟังก็ชันทำได้โดยเรียกชื่อฟังก์ชัน พร้อมกับส่งค่าของข้อมูลตามจำนวนที่ฟังก์ชันกำหนด โดยระบุอยู่ภายในเครื่องหมาย () ตามหลังชื่อฟังก์ชัน หากค่าของข้อมูลที่ส่งไปให้กับฟังก์ชันมีมากกว่าหนึ่งจำนวนจะคั่นด้วยเครื่องหมายจุลภาค (, )โดยจำนวนและชนิดข้อมูลของค่าที่จะส่งให้กับแต่ละฟังก์ชันจะต้องขึ้นอยู่กับฟังก์ชันนั้น ๆ ว่าถูกออกแบบไว้ให้รับค่าข้อมูลชนิดใด กี่จำนวน และเรียงลำดับกันอย่างไร เช่น
        print(‘area =', area) เป็นการเรียกฟังก์ชัน print () ที่ส่งค่าสตริง ‘area =' และค่าของตัวแปร area เมื่อฟังก์ชัน print () ทำงาน ก็จะพิมพ์ค่าที่ส่งให้ออกมาทางจอภาพ ตามลำดับจากซ้ายไปขวา
        int (‘20') เป็นการเรียกฟังก์ชัน int () ที่ส่งค่าสตริงไปให้เพียงหนึ่งจำนวน คือ 20

        นอกจากนี้ เรายังสามารถกำหนดให้ฟังก์ชันมีการคืนค่า (return) หรือส่งค่ากลับเมื่อฟังก์ชันทำงาน  เสร็จแล้ว ตัวอย่างเช่น การเรียกใช้ฟังก์ชัน int(‘20') เป็นการส่งค่าสตริง 20 ให้กับฟังก์ชัน int () เพื่อแปลงสตริงดังกล่าวให้เป็นค่าจำนวนเต็ม ซึ่งเมื่อฟังก์ชั้น int () ทำงานเสร็จ จะคืนค่าจำนวนเต็ม 20 กลับมา เราจึงสามารถใช้ int (‘20') ได้ในลักษณะเดียวกันกับค่าจำนวนเต็ม 20

สรุปท้ายบท
        การโปรแกรมด้วยไผทอนมีคำสั่ง if if-else สำหรับการทำงานแบบมีทางเลือก นอกจากนี้ยังมีคำสั่งสำหรับการทำงานที่มีหลายเงื่อนไข หรือ if เชิงซ้อน ได้แก่คำสั่ง if-elif-else และยังมีตัวดำเนินการบูลีนที่ใช้ในนิพจน์เปรียบเทียบสำหรับกำหนดเงื่อนไขที่ซับซ้อนขึ้น ได้แก่ and r และ not และคำสั่งสำหรับการทำงานแบบวนซ้ำ ได้แก่ for ใช้สำหรับการทำงานที่ทราบจำนวนรอบ และ while ใช้ในกรณีที่ไม่ทราบจำนวนรอบที่แน่นอน           นอกจากนี้ผู้เขียนโปรแกรมยังสามารถสร้างฟังก์ชัน และโปรแกรมย่อยให้ทำงานเฉพาะตามที่กำหนดเพื่อให้สามารถเรียกใช้งานได้โดยไม่ต้องเขียนชุดคำสั่งเดิมซ้ำอีก ทำให้สร้างโปรแกรมขนาดใหญ่ได้รวดเร็วและตรวจสอบความถูกต้องของโปรแกรมได้ง่ายขึ้น

อ้างอิงจาก : หนังสือเรียนรายวิชาพื้นฐานวิทยาศาสตร์ เทคโนโลยี (วิทยาการคำนวณ) ของ สสวท.

Comments