นิพจน์ ตัวแปร และฟังก์ชัน
เนื้อหา การคำนวณบนคอมพิวเตอร์ นิพจน์ ตัวแปร และลำดับความสำคัญ ประเภทตัวแปร การอ่านข้อมูลเข้า ตัวอย่างการคำนวณอย่างง่าย
Python Shell ใน Wing IDE เครื่องคิดเลข เราสามารถใช้คอมพิวเตอร์เป็นเครื่องคิดเลขได้ พิมพ์ใน Python Shell Python Shell ใน Wing IDE
เครื่องคิดเลข ทดลองพิมพ์ >>> 10 * 5 50 ป้อนลงใน Python Shell >>> 10 * 5 50 >>> 1 + 2 + 3 + 4 10 >>> 1+2+3+4 >>> 1 * 4 + 5 ** 10 9765629 คำตอบที่ได้รับ ช่องว่างไม่มีผล คือการยกกำลัง
นิพจน์ สิ่งที่เราป้อนเข้าไปใน Console ของไพธอนเรียกว่านิพจน์ (expression) ที่ Console เมื่อคอมพิวเตอร์ได้รับนิพจน์จะนำไปประมวลผลโดยการคำนวณ แล้วพิมพ์ผลลัพธ์ออกมา
ทดลองคำนวณ วัตถุชิ้นหนึ่งเคลื่อนที่ด้วยความเร็วต้น 10 เมตรต่อวินาที มีความเร่ง 2 เมตร2/วินาที เมื่อเคลื่อนที่ไป 5 วินาที วัตถุจะอยู่ห่างจากจุดเริ่มต้นกี่เมตร? s = ut + at2/2 10 * 5 + 2 * (5*5) / 2
ตัวดำเนินการ (1) ในการเขียนนิพจน์ ในการคำนวณข้างต้น เราได้ใช้ "ตัวดำเนินการ (Operator)" เช่น +, -, *, / เพื่อนำข้อมูลมาประมวลผล ตัวดำเนินการระบุการประมวลผลที่เกิดขึ้นกับตัวถูกดำเนินการ (Operand) ตัวถูกดำเนินการ 10 * 5 ตัวดำเนินการ
ตัวดำเนินการ (2) ตัวดำเนินการมีทั้งแบบ ทวิภาค (binary) ที่ทำงานกับข้อมูลสองตัว เช่น +, -, * 5 * 3 10 – 2 15*7 เอกภาค (unary) ที่ทำงานกับข้อมูลตัวเดียว เช่น – -3 +2 -5 * 7
ตัวดำเนินการ (3) ตัวดำเนินการทางคณิตศาสตร์บางส่วนแสดงดังตารางต่อไปนี้ ความหมาย ตัวอย่าง + บวก 3+5 - ลบ 4-2 * คูณ 4.5*10 / หาร หน้าถัดไป % หารเอาเศษ ** ยกกำลัง 3**4
การหารในไพธอน ตัวดำเนินการหารมีหลัก ๆ สองแบบ หารเอาผลลัพธ์ หารเอาเศษ นิพจน์ ผลลัพธ์ 4/2 2.0 3/2 1.5 10/7 4286 3.0/2 10/7.0 1.4286 นิพจน์ ผลลัพธ์ 4%2 3%2 1 10%7 3 3.0%2 1.0 10%7.0 3.0
ประเภทของจำนวนในไพธอน ข้อมูลประเภทตัวเลขในไพธอนมี 2 แบบคือ จำนวนเต็ม (integer) กับ จำนวนจริง (floating point) จำนวนเต็ม ค่า จำนวนจริง 10 10.0 3-2 1 3.0-2 1.0 19*5 95 19*5.2 98.8
ทดสอบความเข้าใจ นิพจน์ ค่า 2 + 3 * 6 20 (2+3) *6 30 3/5*2 1.2 3*5.0/2 7.5
สรุป: จำนวนเต็ม - จำนวนจริง ถ้าเขียนจำนวนโดยไม่ใส่จุดทศนิยม จะถือว่าเป็นจำนวนเต็ม ผลลัพธ์ การดำเนินการระหว่างจำนวนเต็มกับจำนวนเต็มได้ผลลัพธ์เป็นจำนวนเต็ม ยกเว้นการหาร การหารจะให้ผลลัพธ์เป็นจำนวนจริง การดำเนินการที่เกี่ยวข้องกับจำนวนจริง ได้ผลลัพธ์เป็นจำนวนจริง
3/5*2 การคำนวณทั่วไปจะกระทำจากซ้ายไปขวา ((3/5)*2) ( 0.6 *2)
ลำดับความสำคัญของตัวดำเนินการ แต่ตัวดำเนินการมีความสำคัญไม่เท่ากัน เช่น * หรือ / สำคัญกว่า + หรือ - 2+3*6 2+(3*6)
นี่มันก็แค่... คณิตศาสตร์ระดับประถมเท่านั้นเอง!
ความสำคัญของตัวดำเนินการ ลำดับที่ ตัวดำเนินการ ตัวอย่าง 1 () (3+4) 2 ** 2**3 3 -,+ (เอกภาพ) -5, +10 4 *,/,% 3*4, 7%2 5 -,+ 2+7, 3-4 ตัวดำเนินการที่สำคัญเท่ากันจะทำจากซ้ายไปขวา ยกเว้นการยกกำลัง
ทดลองคำนวณ (1) 2+5*6/3+(7-2*3) ผลลัพธ์คือ? 13.0
ทดลองคำนวณ (2) 2 ** 2 ** 3 ผลลัพธ์คือ? 2 ** (2 ** 3) 28 = 256
การคำนวณซ้ำ ๆ ซ้ำ ซ้อน (2.5/2.0)*1*1/2 (2.5/2.0)*5*5/2 ก้อนหินมวล 2 kg เริ่มต้นหยุดนิ่ง มีแรงกระทำไปทางซ้าย 2.5 นิวตั้น อยากทราบว่าที่เวลา 1 วินาที, 5 วินาที และ 15 วินาที ก้อนหินจะอยู่ที่ตำแหน่งใด ซ้ำ ซ้อน (2.5/2.0)*1*1/2 (2.5/2.0)*5*5/2 (2.5/2.0)*15*15/2
ตัวแปร a = 2.5/2.0 a*1*1/2 a 1.25 a*5*5/2 a*15*15/2 เราสามารถใช้ตัวแปรในการอ้างถึงผลลัพธ์จากการคำนวณได้ a = 2.5/2.0 a*1*1/2 a 1.25 a*5*5/2 a*15*15/2
a = 2.5/2.0 ตัวแปร a 1.25 ตัวแปรเป็นสิ่งที่ใช้อ้างถึงข้อมูลต่าง ๆ กำหนดให้ตัวแปรอ้างถึงข้อมูลโดยใช้เครื่องหมาย = หลังจากนั้นเมื่ออ้างตัวแปรก็จะได้ข้อมูลนั้นกลับมา
ตัวแปรเปลี่ยนค่าได้ (1) a = 10 a * 5 b = 3 a + b a = 7 a + b a = b + 5 a a + b 50 13 10 8 11
ตัวแปรเปลี่ยนค่าได้ (2) a = 10 a = a + 1 11
ตัวแปรเปลี่ยนค่าได้ (3) x = 10 x = x * 2 20
ตัวแปรเปลี่ยนค่าได้ (4) x = 10 x = x * 2 + 5 25
การทำงานบน Wing IDE Shell หรือ Console พิมพ์คำสั่งหรือนิพจน์ Python จะคำนวณ แล้วแสดงผลลัพธ์ทันที เมื่อกด Enter
ป้อนโปรแกรมใน WingIDE ส่วนพิมพ์/แก้ไขโปรแกรม คำสั่งในนี้จะถูกทำงานเมื่อสั่ง Run สามารถเขียนและแก้คำสั่ง ได้หลายบรรทัดก่อนสั่งให้ทำงาน
ทดลอง นำไปป้อนใน Wing IDE โปรแกรม โปรแกรมคือรายการของคำสั่งที่เรียงต่อกัน a = 10 b = a + 5 a - b c = 12 b = a + c c = a*b a + b + c 1 + a - c ทดลอง นำไปป้อนใน Wing IDE
ผลลัพธ์คือความว่างเปล่า! เพราะว่าในโปรแกรมยังไม่มีคำสั่งที่สั่งให้แสดงผลลัพธ์ของการคำนวณ
print คำสั่งพิมพ์ ในการพิมพ์ค่าของข้อมูล สามารถใช้ฟังก์ชัน ในการสั่งพิมพ์ได้
เพิ่มคำสั่ง print ให้แสดงผลลัพธ์ ของนิพจน์ที่ต้องการ โปรแกรม โปรแกรมคือรายการของคำสั่งที่เรียงต่อกัน เพิ่มคำสั่ง print ให้แสดงผลลัพธ์ ของนิพจน์ที่ต้องการ a = 10 b = a + 5 print(a – b) c = 12 b = a + c c = a*b print(a + b + c) print(1 + a – c)
เมื่อสั่ง Run จะเห็นผลลัพธ์
อาร์กิวเมนท์ (argument) การเรียกฟังก์ชัน print(10) ชื่อฟังก์ชัน อาร์กิวเมนท์ (argument)
การทำงานในการเรียกฟังก์ชัน print(a + b * 2) 20 สมมติว่า a = 5 b = 10 25 print(25) จะมีการคำนวณนิพจน์ที่ถูกส่งให้กับฟังก์ชันให้เสร็จก่อนส่งค่าไปให้กับฟังก์ชันนั้น
มีเงินรวมทั้งสิ้นกี่บาท? โปรแกรมง่าย ๆ เรามีเงินในกระเป๋าดังนี้ เหรียญบาท 5 เหรียญ เหรียญสิบบาท 7 เหรียญ ธนบัตรใบละ 20 บาท 2 ใบ ธนบัตรใบละ 100 บาท 3 ใบ มีเงินรวมทั้งสิ้นกี่บาท? sum1 = 1 * 5 sum10 = 10 * 7 sum20 = 20 * 2 sum100 = 100 * 3 sum = sum1+sum5+sum20+sum100 print(sum)
โปรแกรมง่าย ๆ (2) หรือสามารถเขียนโดยไม่ต้องใช้ตัวแปร sum ก็ได้ sum1 = 1 * 5 sum10 = 10 * 7 sum20 = 20 * 2 sum100 = 100 * 3 print(sum1+sum5+sum20+sum100)
ชื่อและความหมาย พิจารณาโปรแกรมสองโปรแกรมนี้ a = 1 * 5 b = 10 * 7 c = 20 * 2 d = 100 * 3 e = a + b + c + d print(e) โปรแกรมทั้งสองทำงานเหมือนกัน sum1 = 1 * 5 sum10 = 10 * 7 sum20 = 20 * 2 sum100 = 100 * 3 sum = sum1+sum5+sum20+sum100 print(sum) โปรแกรมใด ที่อ่านแล้วเข้าใจเป้าหมายมากกว่า?
คำแนะนำ เขียนโปรแกรมให้คนอ่าน เพราะอย่างน้อยก็คุณคนหนึ่งนั่นเอง ที่ต้องอ่านโปรแกรมที่คุณเขียน
การใส่หมายเหตุ (#) เพื่อทำให้โปรแกรมอ่านง่ายขึ้น เราสามารถใส่หมายเหตุ (comment) ที่เขียนอธิบายโปรแกรมได้ ทุกอย่างหลังเครื่องหมาย # จะถือว่าเป็นหมายเหตุ
โปรแกรมพร้อมหมายเหตุ # โปรแกรมนี้คำนวณเงินรวม # จากจำนวนธนบัตรประเภทต่างๆ sum1 = 1 * 5 # เงินรวมของธนบัตร 1 บาท sum10 = 10 * 7 sum20 = 20 * 2 sum100 = 100 * 3 print(sum1+sum5+sum20+sum100)
”Hello ข้อมูลประเภทข้อความ ”Hello, world” คอมพิวเตอร์นอกจากจะคำนวณด้านตัวเลขได้แล้ว ยังสามารถประมวลผลข้อมูลแบบอื่น ๆ ได้มากมาย ข้อความ (string) ก็เป็นข้อมูลอีกประเภทหนึ่งที่สามารถประมวลผลได้ สตริงเป็นประเภทข้อมูลสำหรับลำดับของของอักขระ ”Hello ”Hello, world”
การระบุข้อมูลประเภทข้อความ ระบุภายในเครื่องหมายคำพูดคู่ ”Hello” หรือภายในเครื่องหมายคำพูดเดี่ยว ’World’ เครื่องหมายคำพูดที่ใช้จะต้องเปิด-ปิดแบบเดียวกัน นอกจากนี้ยังสามารถใส่เครื่องหมายพิเศษภายในได้โดยขึ้นต้นด้วยเครื่องหมาย \ (ทับกลับข้าง)
ตัวอย่างข้อมูลประเภทข้อความ (1) print("hello") hello print('hello') hello print("I'm 9") I'm 9 print('I'm 9') ผิดพลาด print('I\'m 9') I'm 9 print("I\'m 9") I'm 9
ตัวอย่างข้อมูลประเภทข้อความ (2) print("123") 123 print(123) 123 print("12" + "3") 123 print(12 + 3) 15 print("12" + '3') 123 print("12" + 3) ผิดพลาด
โปรแกรมคำนวณที่ดูดีขึ้น sum1 = 1 * 5 sum10 = 10 * 7 sum20 = 20 * 2 sum100 = 100 * 3 sum = sum1+sum5+sum20+sum100 print("The total is",sum) The total is 415
โปรแกรมคำนวณที่ดูดีขึ้น sum1 = 1 * 5 sum10 = 10 * 7 sum20 = 20 * 2 sum100 = 100 * 3 sum = sum1+sum5+sum20+sum100 print("The total is",sum,"bath.") The total is 415 bath.
ของแถม: print ไม่ขึ้นบรรทัดใหม่ พิมพ์เสร็จจะขึ้นบรรทัดใหม่ ถ้าต้องการยกเว้นการขึ้นบรรทัดใหม่ ให้ระบุ option end เพิ่มเติม ดังตัวอย่างด้านล่าง print(10) print(20) print(10,end='') print(20) 10 20 1020 ส่วนนี้ระบุให้ฟังก์ชัน print พิมพ์สตริงว่างแทนการขึ้นบรรทัดใหม่ท้ายการพิมพ์
การรับข้อมูลจากผู้ใช้ เราสามารถอ่านข้อมูลจากผู้ใช้โดยใช้ฟังก์ชัน input ฟังก์ชันดังกล่าวจะคืนค่าเป็นข้อมูลประเภท string
ตัวอย่างการใช้งานใน Console >>> name = input() Somchai >>> print("Hello", name) Hello Somchai >>> a = input() 10 >>> b = input() 100 >>> print(a+b) 10100
ข้อสังเกต พิจารณาคำสั่ง print(a+b) เนื่องจากตัวแปร a และ b เก็บข้อมูลประเภท string ที่ได้รับจากฟังก์ชัน input การนำ string มาบวกกันจึงเป็นการนำข้อความมาต่อกันเฉย ๆ
????? แล้วเราจะคำนวณค่าที่ได้รับจากผู้ใช้ได้อย่างไร ในเมื่อข้อมูลที่รับได้มีแค่ข้อมูลประเภทข้อความ (string) เท่านั้น
การแปลงประเภทข้อมูล เรามีฟังก์ชัน int, float, และ str สำหรับแปลงข้อมูลให้เป็นข้อมูลประเภทต่าง ๆ int("10") 10 float("10") 10.0 float(10) 10.0 int(10.6) 10
การแปลงประเภทข้อมูล int("10")+10 float("10")+10 float(10)+int(5) 20 float("10")+10 20.0 float(10)+int(5) 15.0 str(10)+str(5) 105
การแปลงระหว่าง float และ int 10 int(10.9) 10 int(-10.1) -10 ฟังก์ชัน int คืนจำนวนเต็มที่ได้หลังจากการตัดส่วนทศนิยมออก
Conversion between float and int (2) เราสามารถใช้ฟังก์ชัน round ที่ปัดค่าให้เป็นจำนวนเต็มที่ใกล้ที่สุดได้ round(10.2) 10 round(10.9) 11 round(-10.1) -10
ฟังก์ชันที่สำคัญอีกสองฟังก์ชัน ความหมาย abs(x) คืนค่าสัมบูรณ์ของ x pow(x,y) คืนค่า xy
โปรแกรมบวกเลข # This program adds two numbers astr = input() a = int(astr) bstr = input() b = int(bstr) print("The result is",a+b)
การส่งค่าต่อเนื่องในฟังก์ชัน (1) พิจารณาส่วนของโปรแกรม เราใช้ตัวแปร astr เพื่อรับสตริงจากผู้ใช้แล้วนำมาแปลงเป็นจำนวนเต็มเก็บไว้ที่ตัวแปร a เท่านั้น เราสามารถละตัวแปร astr ออกได้โดยเขียนเป็น astr = input() a = int(astr) a = int(input())
การส่งค่าต่อเนื่องในฟังก์ชัน (2) พิจารณาการทำงานของส่วนของโปรแกรม a = int(input()) input() "12345" int 12345 a a = 12345
โปรแกรมคำนวนเงิน (ปรับปรุง) # This program calculates total amount # of money from numbers of bank notes p1 = int(input()) sum1 = 1 * p1 p5 = int(input()) sum5 = 10 * p5 p20 = int(input()) sum20 = 20 * p20 p100 = int(input()) sum100 = 100 * p100 sum = sum1+sum5+sum20+sum100 print("The total is",sum,"bath.")
การระบุข้อความนำ เราสามารถระบุให้ฟังก์ชัน input แสดงข้อความนำก่อนจะอ่านข้อมูลได้ โดยส่งค่าสตริงให้กับฟังก์ชัน input x = int(input("Enter X: ")) print(x+10) Enter X: 100 110
มุมนักคิด มีวัตถุชิ้นหนึ่ง เคลื่อนที่จากสถาพหยุดนิ่งด้วยความเร่ง a m/s2 เป็นเวลา t วินาที เขียนโปรแกรมรับความเร่งและเวลา จากนั้นคำนวณระยะที่วัตถุเคลื่อนที่ไปได้
เฉลย a = float(input("Enter a: ")) t = float(input("Enter t: ")) print("Total distance =", a*t*t/2)
มุมนักคิด: การกระจายหน่วย Enter length in inch: 320 It is 26 feet, 8 inch. x = int(input("Enter length in inch")) xf = int(x/12) xi = x – xf * 12 print("It is", xf, "feet,",xi,"inch.")
คำนวณปริมาตร คำนวณปริมาตรของทรงกระบอก r r2 x h h
3.141592653589793 ค่า เราสามารถใช้ค่าประมาณ 22/7 เราอาจจะใช้ค่าคงที่ที่ละเอียดกว่าได้ ซึ่งอยู่ในโมดูล math 3.141592653589793
โมดูล math ภาษาไพธอนมีการแบ่งคำสั่งมาตรฐานออกเป็นกลุ่ม ๆ เป็นหมวดหมู่ เรียกว่า โมดูล (module) ก่อนใช้ต้องมีการประกาศขอใช้ก่อน ด้วยคำสั่ง import จากนั้นฟังก์ชัน รวมถึงค่าคงที่ต่าง ๆ ใน โมดูลสามารถเรียกใช้ได้โดยระบุชื่อโมดูลนำหน้า import math print("Pi is", math.pi) 3.141592653589793
มุมนักคิด เขียนโปรแกรมรับค่า r และ h จากนั้นคำนวณปริมาตรของทรงกระบอก r r2 x h h
เฉลย import math r = float(input("Enter r: ")) h = float(input("Enter h: ")) print("Volume =", math.pi*r*r*h)
ฟังก์ชันในโมดูล math ฟังก์ชัน ความหมาย คืนค่าสัมบูรณ์ของ x fabs(x) คืนค่าสัมบูรณ์ของ x sin(x), cos(x), tan(x) ฟังก์ชันตรีโกณมิติของ x (มุมเป็นหน่วยเรเดียล) pi ค่าพาย e ค่า e log(x),log10(x) ค่า log ฐานธรรมชาติ, ค่า log ฐาน 10 exp(x) ค่า ex sqrt(x) รากที่สองของ x
ตัวอย่างการใช้ฟังก์ชันคณิตศาสตร์ การแตกแรง # อย่าลืม import math # ถ้ามุมเป็นองศา ต้องแปลงก่อน r = t * math.pi/180 fy = f * math.sin(r) fx = f * math.cos(r) # อย่าลืม import math # กรณีมุมเป็นเรเดียล fy = f * math.sin(t) fx = f * math.cos(t) t f