3.2 ตัวแปรและชนิดของข้อมูลในภาษาไพทอน
ตัวแปร (variable) ใช้ในการอ้างอิงค่าข้อมูล โดยตัวแปรจะถูกกําหนดค่าด้วยเครื่องหมาย เช่น
ที่มาของรูป :: หนังสือเรียน รายวิชาพื้นฐานวิทยาศาสตร์ เทคโนโลยี (การออกแบบและเทคโนโลยี) ชั้นมัธยมศึกษาปีที่ 1
สถาบันส่งเสริมการสอนวิทยาศาสตร์และเทคโนโลยี (สสวท.) หน้าที่ 52
บรรทัดแรกเป็นการกําหนดให้ตัวแปร ชื่อ ชี้ไปยังจํานวนเต็ม 16 และบรรทัดที่ 2 ตัวแปรชื่อ name ชี้ไปยัง สตริง somchai
นอกจากนี้ชื่อตัวแปรที่ตั้งขึ้นจะต้องไม่ซ้ํากับคําหลัก (keyword) ที่ไพทอนใช้เป็นคําสั่ง โดยคําหลัก มีดังต่อไปนี้
ที่มาของรูป :: หนังสือเรียน รายวิชาพื้นฐานวิทยาศาสตร์ เทคโนโลยี (การออกแบบและเทคโนโลยี) ชั้นมัธยมศึกษาปีที่ 1
สถาบันส่งเสริมการสอนวิทยาศาสตร์และเทคโนโลยี (สสวท.) หน้าที่ 53
ในขณะใดขณะหนึ่ง ตัวแปรจะชี้ไปยังข้อมูลได้เพียงค่าเดียวเท่านั้น แต่ผู้เขียนโปรแกรมสามารถกําหนดให้ ตัวแปรเปลี่ยนไปชี้ข้อมูลอื่นได้ ดังตัวอย่างที่ 3.3
ตัวอย่างที่ 3.3 การเปลี่ยนค่าของตัวแปร
พิมพ์คําสั่งต่อไปนี้ในคอนโซล
ที่มาของรูป :: หนังสือเรียน รายวิชาพื้นฐานวิทยาศาสตร์ เทคโนโลยี (การออกแบบและเทคโนโลยี) ชั้นมัธยมศึกษาปีที่ 1
สถาบันส่งเสริมการสอนวิทยาศาสตร์และเทคโนโลยี (สสวท.) หน้าที่ 54
จากตัวอย่างที่ 3.3 อธิบายได้ดังนี้
1. c = 16 เป็นคําสั่งกําหนดให้ตัวแปร ชี้ไปที่จํานวนเต็ม 16 เมื่อแสดงผลด้วยคําสั่ง print (c) จึงได้ผลลัพธ์เป็น 16
2. d = c เป็นคําสั่งสร้างตัวแปร dแล้วชี้ไปที่เดียวกับที่ตัวแปร ซื้อยู่ จึงทําให้ตัวแปรสชี้ไปยังจํานวนเต็ม 16 เมื่อพิมพ์ด้วยคําสั่ง print (d) จึงได้ผลลัพธ์เป็น 16
3. d = 15 เป็นคําสั่งกําหนดให้ตัวแปร 4 ชี้ไปที่จํานวนเต็ม 15 เมื่อแสดงผลด้วยคําสั่ง print (d) จึงได้ผลลัพธ์เป็นค่า 15
การเปลี่ยนแปลงค่าของตัวแปร c และ d ที่เกิดขึ้นตามคําสั่งในตัวอย่างที่ 3.3 แสดงดังรูป 3.2
รูป 3.2 การเปลี่ยนแปลงค่าของตัวแปร c และ d
เพื่อให้นักเรียนสามารถเข้าใจได้ง่ายขึ้นในการอ้างถึงค่าที่ตัวแปรตัวใดตัวหนึ่งชื้อยู่ ต่อไปนี้อาจจะใช้ ข้อความว่า “ค่าที่เก็บในตัวแปร” หรือ “ค่าที่ตัวแปรชี้อยู่”
3.3 ชนิดข้อมูลพื้นฐาน
โปรแกรมภาษาไพทอนมีการแบ่งประเภทของข้อมูลออกเป็นหลายประเภท โดยมีประเภทข้อมูลพื้นฐาน คือ ข้อมูลประเภทข้อความ (string data type) และ ข้อมูลประเภทจํานวน (numerical data type)
3.3.1 ข้อมูลประเภทข้อความ
การกําหนดข้อมูลที่เป็นข้อความหรือสตริงให้ใช้เครื่องหมายอัญประกาศครอบข้อความที่ต้องการ กําหนด โดยเลือกใช้ได้ทั้งอัญประกาศเดี่ยว (1) หรือคู่ (") ตามความเหมาะสม หรือ กรณีที่มีข้อความยาว หลายบรรทัด ต้องใช้เครื่องหมาย " หรือ " ติดต่อกัน 3 ตัว ครอบหน้าและหลังข้อความ ดังตัวอย่าง ต่อไปนี้
ตัวอย่างที่ 3.4 การกําหนดข้อมูลชนิดข้อความ
พิมพ์คําสั่งต่อไปนี้ในคอนโซล
>>> organization = "สสวท" # บรรทัดที่ 1
>>> address = "924 ถนนสุขุมวิท เขตคลองเตย กรุงเทพฯ 10110" #บรรทัดที่ 2
>>> print (organization) # บรรทัดที่ 3
>>> print (address) # บรรทัดที่ 4
>>> address = "สสวท." # บรรทัดที่ 5
... 921 ถนนสุขุมวิท
... เขตคลองเตย กรุงเทพฯ
... 10110
>>> print (address) # บรรทัดที่ 6
จะได้ผลลัพธ์คือ
>>> organization = "สสวท" # บรรทัดที่ 1
>>> address = "924 ถนนสุขุมวิท เขตคลองเตย กรุงเทพฯ 10110" # บรรทัดที่ 2
>>> print (organization) # บรรทัดที่ 3
"สสวท"
>>> print (address) # บรรทัดที่ 4
921 ถนนสุขุมวิท เขตคลองเตย กรุงเทพฯ 10110
>>> address = "สสวท." # บรรทัดที่ 5
... 924 ถนนสุขุมวิท
... เขตคลองเตย กรุงเทพฯ
... 10110
>>> print (address) # บรรทัดที่ 6
"สสวท."
924 ถนนสุขุมวิท
เขตคลองเตย กรุงเทพฯ
10110
จากตัวอย่างที่ 3.4 อธิบายดังนี้
1. คําสั่งในบรรทัดที่ 1 เป็นการใช้เครื่องหมายอัญประกาศเดี่ยวเพื่อกําหนดตัวแปร organizationเป็น "สสวท" ทําให้มีความยาว
6 ตัวอักษร (รวมเครื่องหมายอัญประกาศคู่ด้วย)
2. คําสั่งในบรรทัดที่ 2 ใช้เครื่องหมายอัญประกาศคู่เพื่อกําหนดสตริงให้กับตัวแปร address
3. คําสั่ง print () ในบรรทัดที่ 3 และ 4 นําค่าในตัวแปร organization และ address ออกมาแสดงผล
4. คําสั่งในบรรทัดที่ 5 ใช้เครื่องหมาย จํานวน 3 ตัว กําหนดสตริงจํานวน 4 บรรทัด ให้กับตัวแปร address
5. คําสั่งในบรรทัดที่ 6 นําค่าที่เก็บในตัวแปร address ออกมาแสดงผล
เกร็ดน่ารู้
ตัวดําเนินการ + และ * กับสตริง
เมื่อใช้ตัวดําเนินการ + ระหว่างสตริง 2 ตัว จะเป็นการนําสตริงสองตัวมาต่อกัน เช่น 'Hello'+ "World' จะเกิดสตริงใหม่ คือ 'HelloWorld' และถ้าใช้ตัวดําเนินการ * ระหว่างสตริงกับค่า จํานวนเต็ม จะเป็นการนําสตริงมาต่อกันตามจํานวนครั้งของจํานวนเต็มหลังเครื่องหมาย * เช่น "Go! * 3 จะเกิดสตริงใหม่ คือ 'GoGoGo!
3.3.2 ข้อมูลจํานวน
ภาษาไพทอนมีข้อมูลจํานวนที่สามารถนําไปคํานวณทางคณิตศาสตร์ได้หลายชนิด ในที่นี้จะแนะนํา 2 ชนิด คือ จํานวนเต็มแบบมีเครื่องหมาย (signed integer) หรือเรียกว่า จํานวนเต็ม (integer หรือ int) สามารถเก็บค่าจํานวนเต็มบวกและจํานวนเต็มลบ และจํานวนจริง (floating point number หรือ float) สามารถเก็บค่าทั้งจํานวนจริงบวกและจํานวนจริงลบ ที่อยู่ในรูปทศนิยมได้
ตัวอย่างที่ 3.5 การกําหนดข้อมูลจํานวนและการคํานวณพื้นฐาน
พิมพ์คําสั่งต่อไปนี้ในคอนโซล
base = 10 # บรรทัดที่ 1
height = 15 # บรรทัดที่ 2
area = (1/2)* base * height # บรรทัดที่ 3
print ("base =", base) # บรรทัดที่ 4
print ("height =", height) # บรรทัดที่ 5
print ("area =", area) # บรรทัดที่ 6
ผลลัพธ์ที่ได้คือ
>>> base = 10 # บรรทัดที่ 1
>>> height = 15 # บรรทัดที่ 2
>>> area = (1/2)* base * height # บรรทัดที่ 3
>>> print ("base =", base) base = 10 # บรรทัดที่ 4
>>> print ("height =", height) height = 15 # บรรทัดที่ 5
>>> print ("area =", area) area = 75.0 # บรรทัดที่ 6
จากตัวอย่างที่ 3.5 อธิบายได้ดังนี้
1. บรรทัดที่ 1 และ 2 กําหนดให้ตัวแปร base และ height ชี้ไปที่ 10 และ 15 ตามลําดับ
2. บรรทัดที่ 3 กําหนดให้ตัวแปร area ชี้ไปที่ผลจากการคํานวณ (1/2) * base * height ซึ่งเป็นการหาพื้นที่สามเหลี่ยมนั่นเอง
(เมื่อใช้เครื่องหมาย * และ / กับข้อมูลจํานวน จะหมายถึง การคูณ และหารทางคณิตศาสตร์ตามลําดับ)
3. บรรทัดที่ 4-6 เป็นคําสั่งแสดงผลของตัวแปร มีข้อสังเกตว่า คําสั่ง print () สามารถรับค่าที่ต้องการให้แสดงผลได้มากกว่า
หนึ่งค่า โดยเขียนแต่ละค่าหรือแต่ละตัวแปรเรียงกันไป คั่นด้วยเครื่องหมาย จุลภาค (,) เช่น บรรทัดที่ 4-6 สามารถเขียนรวมกันได้
ดังนี้
print ("base =", base, "height =", height, "area =", area)
4. สังเกตอีกว่า คําสั่งในบรรทัดที่ 6 ได้ผลลัพธ์ของตัวแปร area แสดงออกมาในรูปแบบจํานวนจริง
ชวนคิด
1. หลังจากจบคําสั่งในบรรทัดที่ 6 หากต้องการตรวจสอบชนิดข้อมูลของตัวแปรทั้งสามตัว จะทําได้อย่างไร และได้ผลลัพธ์
เป็นอย่างไร
2. 1 และ 2 เป็นข้อมูลชนิดจํานวนเต็ม แล้ว 1 / 2 เป็นข้อมูลชนิดใด
เกร็ดน่ารู้ ตัวดําเนินการทางคณิตศาสตร์
ตัวดําเนินการสําหรับการ บวก ลบ คูณ และหาร ในไพทอนจะใช้เครื่องหมาย +, -, * และ / ตามลําดับ นอกจากนี้ยังมีเครื่องหมาย
เพิ่มเติม เช่น
** หมายถึง ยกกําลัง ตัวอย่างคือ 4* *3 หมายถึง 4 กำลัง 3
// หมายถึง หารปัดเศษทิ้ง ตัวอย่างคือ 7 / 3 ได้ผลลัพธ์เป็นจํานวนเต็ม 2
% หมายถึง เศษที่ได้จากการหาร ตัวอย่างคือ 7% 3 ได้ผลลัพธ์เป็นจํานวนเต็ม 1
โดยสามารถใช้เครื่องหมาย () ล้อมรอบนิพจน์ที่ต้องการให้ดําเนินการก่อน เช่นเดียวกับการเขียน นิพจน์ทางคณิตศาสตร์
ตัวอย่างที่ 3.6 ทอนเท่าไร
นักเรียนซื้อแฟลชไดรฟ์ ขนาด 32 GB ราคา 117 บาท ที่ร้านสะดวกซื้อ โดยจ่ายเงินด้วยธนบัตร หนึ่งร้อยบาท 2 ใบ ในลิ้นชักเก็บ
เงินของร้าน มีแต่ธนบัตร 20 บาท และเหรียญหนึ่งบาท พนักงานจะต้อง ทอนเงินเป็นธนบัตร 20 บาท จํานวนกี่ใบ และเหรียญ
หนึ่งบาทจํานวนกี่เหรียญ ให้ใช้คําสั่งไพทอนแสดง วิธีหาคําตอบที่ละลําดับ
แนวคิดการแก้ปัญหา
1. คํานวณจํานวนเงินทอน
2. คํานวณจํานวนธนบัตรยี่สิบบาทที่ได้รับ จากจํานวนเงินทอน หารด้วย 20 โดยปัดเศษทิ้ง
3. คํานวณจํานวนเหรียญบาทที่ได้รับ จากจํานวนเงินทอน หารด้วย 20 โดยนํามาเฉพาะเศษที่ได้จากการหาร
พิมพ์คําสั่งต่อไปนี้ในคอนโซล
change = 200 - 117
note20 = change // 20
coin1 = change % 20 print("เงินทอนทั้งหมด", change , "บาท")
print("เป็นธนบัตรยี่สิบบาท จํานวน", note20, "ใบ")
print("เป็นเหรียญหนึ่งบาท จํานวน", coin1, "เหรียญ")
จะได้ผลลัพธ์คือ
>>> change = 200 - 117
>>> note20 = change // 20
>>> coin1 = change % 20
>>> print("เงินทอนทั้งหมด", change ,"บาท")
เงินทอนทั้งหมด 83 บาท
>>> print("เป็นธนบัตรยี่สิบบาท จํานวน", note20, "ใบ")
เป็นธนบัตรยี่สิบบาท จํานวน 4 ใบ
>>> print(" เป็นเหรียญหนึ่งบาท จํานวน", coinl, "เหรียญ)
เป็นเหรียญหนึ่งบาท จํานวน 3 เหรียญ
3.4 การแปลงชนิดข้อมูล
ฟังก์ชัน input () จะรับข้อมูลเข้าจากผู้ใช้ผ่านทางคีย์บอร์ด และจะเป็นข้อมูลชนิดสตริงเท่านั้น ซึ่งไม่สามารถนําไปคํานวณทางคณิตศาสตร์ได้
นักเรียนคิดว่าคําสั่งต่อไปนี้ ทํางานได้หรือไม่
width = input("ป้อนความกว้างของสี่เหลี่ยม")
length = input("ป้อนความยาวของสี่เหลี่ยม")
area = width * length
print("พื้นที่สี่เหลี่ยม คือ", area, "ตารางหน่วย")
หากพิมพ์คําสั่งในคอนโซลจะมีข้อผิดพลาดจากการทํางานในคําสั่ง area = width * length เพราะตัวแปร width และ length จะเก็บข้อมูลสตริง แม้ว่าผู้ใช้จะป้อนข้อมูลเป็นตัวเลขก็ตาม
ดังนั้นหากต้องการนําค่าที่รับจากฟังก์ชัน input ( ) ไปใช้ในการคํานวณทางคณิตศาสตร์ จะต้องแปลงให้เป็นข้อมูล ชนิดจํานวนก่อนโดยใช้ฟังก์ชัน int() เพื่อแปลงสตริงเป็นจํานวนเต็ม หรือฟังก์ชัน float () เพื่อแปลงสตริง เป็นจํานวนจริง ดังตัวอย่างที่ 3.7
ตัวอย่างที่ 3.7 การแปลงข้อมูลสตริงให้เป็นข้อมูลชนิดจํานวน
พิมพ์คําสั่งต่อไปนี้ในคอนโซล
val = input("ป้อนค่าจํานวนเต็มค่าหนึ่ง ") # บรรทัดที่ 1
type (val) # บรรทัดที่ 2
intVal = int (val) # บรรทัดที่ 3
type (intVal) # บรรทัดที่ 4
จะได้ผลลัพธ์คือ
>>> val = input("ป้อนค่าจํานวนเต็มค่าหนึ่ง ")
ป้อนค่าจํานวนเต็มค่าหนึ่ง 4
>>> type (val)
str
>>> intVal = int (val)
>>> type (intVal)
int
จากตัวอย่างที่ 3.7 อธิบายได้ดังนี้
1. หลังจากไพทอนรันคําสั่งในบรรทัดที่ 1 และผู้ใช้ป้อนตัวอักขระ "4" แล้ว ตัวแปร val จะเก็บข้อมูลสตริง
ของอักขระ "A" ซึ่งตรวจสอบได้จากคําสั่ง type (val) ในบรรทัดที่ 2
2. บรรทัดที่ 3 ใช้ฟังก์ชัน int () ในการแปลงค่าสตริงของตัวแปรให้เป็นจํานวนเต็ม แล้วกําหนดค่าให้กับตัวแปร intVal ซึ่ง
ตรวจสอบชนิดได้จากคําสั่งในบรรทัดที่ 4
ตัวอย่างที่ 3.8 ร่วมด้วยช่วยแชร์
ถ้านักเรียนไปรับประทานอาหารฉลองวันปิดเทอมกับเพื่อน และตกลงกันว่าจะจ่ายค่าอาหารคนละ เท่า ๆ กัน นักเรียนแต่ละคนจะต้อง
จ่ายค่าอาหารคนละเท่าใด ให้ใช้คําสั่งไพทอนแสดงวิธีหาคําตอบที่ละลําดับ
แนวคิดการแก้ปัญหา
จากแนวทางการแก้ปัญหานี้ในบทที่ 1 แนวทางการแก้ปัญหาอาจเขียนเป็นรหัสลําลองได้ดังนี้
1. totalPrice 4 - รับค่าอาหารทั้งหมด
2. mber 4 - รับจํานวนผู้รับประทานอาหาร
3. avg +- ค่าอาหารทั้งหมด/จํานวนผู้รับประทานอาหาร
4. แสดงผล avg
พิมพ์คําสั่งต่อไปนี้ลงในคอนโซล
totalPrice = int (input('ค่าอาหารทั้งหมด ))
number = int (input(จํานวนผู้รับประทานอาหาร ))
avg = totalPrice/number
print ("จ่ายค่าอาหารคนละ", avg, 'บาท)
หากทดลองป้อนราคาอาหาร และจํานวนผู้รับประทานอาหาร เป็น 1,289 บาท และ 15 คน ตามลําดับ จะได้ผลลัพธ์ดังนี้
>>> totalPrice = int (input(ค่าอาหารทั้งหมด ))
ราคาอาหารทั้งหมด >? 1289
>>> number = int (input('จํานวนผู้รับประทานอาหาร "))
จํานวนผู้รับประทานอาหาร >? 15
>>> avg = totalPrice/number
>>> print ("จ่ายค่าอาหารคนละ, avg, 'บาท)
จ่ายค่าอาหารคนละ 85.93333333333334 บาท