φυβλαςのβλογ
บล็อกของ phyblas



ภาษา python เบื้องต้น บทที่ ๕: นิพจน์และการคำนวณ
เขียนเมื่อ 2016/03/03 23:22
แก้ไขล่าสุด 2024/02/22 11:00
 

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

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

ดังที่อาจจะได้เห็นกันไปแล้วในบางตัวอย่างในบทที่ผ่านๆมา ในบทนี้จะมาแนะนำเกี่ยวกับการเขียนนิพจน์โดยละเอียดขึ้น



นิพจน์แบบต่างๆ

นิพจน์ที่ใช้บ่อยๆได้แก่
x+y x บวก y
x-y x ลบ y
x*y x คูณ y
x/y x หาร y
x//y x หาร y โดยปัดเศษทิ้ง
x%y x หาร y เอาเศษ
x**y x ยกกำลัง y

นิพจน์บางชนิดอาจเขียนในรูปแบบฟังก์ชัน
pow(x,y) x ยกกำลัง y (เหมือน x**y)
abs(x) ค่าสัมบูรณ์ของ x

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

สำหรับการคำนวณในระดับที่สูงขึ้นไปจะใช้ฟังก์ชันจากมอดูล math ซึ่งจะกล่าวถึงในบทที่ ๑๖

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

สิ่งที่นำมาคำนวณอาจไม่ใช่ตัวเลขล้วนๆ แต่เป็นตัวแปรที่เก็บข้อมูลชนิดตัวเลข เช่น
a = 129.3
b = a**2
c = b+a*19

นอกจากนี้ยังมีรูปแบบการเขียนโดยเฉพาะสำหรับการนำตัวแปรที่มีอยู่เดิมมาปรับแก้ค่า โดยเขียนตัวดำเนินการตามด้วยเครื่องหมายเท่ากับ
x += a เทียบเท่ากับ x = x+a
x -= a x = x-a
x *= a x = x*a
x /= a x = x/a
x **= a x = x**a

และอื่นๆในทำนองเดียวกัน



ลำดับความสำคัญของการคำนวณ

เวลาที่มีนิพจน์ยาวๆซึ่งประกอบด้วยสัญลักษณ์ในการคำนวณหลายตัว การคำนวณจะเกิดขึ้นต่อเนื่องหลายครั้งซ้อนกันไปเรื่อยๆ โดยเริ่มไล่จากซ้ายไปขวา เช่น
a = 1+2+3+4

ค่าของ a ก็จะเริ่มคำนวณโดยเริ่มจาก 1+2 แล้วก็ค่อยบวก 3 บวก 4

แต่ก็ไม่เป็นเช่นนั้นเสมอไป เพราะสัญลักษณ์การคำนวณแต่ละชนิดมีความสำคัญไม่เท่ากัน มีลำดับความสำคัญอยู่ เรียงตามนี้
  • ยกกำลัง
  • คูณ หาร หารปัดเศษ หารเอาเศษ
  • บวก ลบ
แต่หากมีวงเล็บก็จะพิจารณาในวงเล็บก่อน

ส่วนสัญลักษณ์เดียวกันหรือมีความสำคัญในระดับเท่ากันนั้นจะเริ่มทำจากซ้ายไปขวา ยกเว้นยกกำลังจะทำจากขวาไปซ้าย

ตัวอย่าง
7+13*0 # ได้ 7
3+5**2 # ได้ 28
2**3**4 ได้ # ได้ 2417851639229258349412352
(12876+27349-95893)*0 # ได้ 0
3*10%7 # ได้ 2
3*(10%7) # ได้ 7  



ชนิดของข้อมูลตัวเลขที่คำนวณได้

โดยปกตินำข้อมูลชนิดไหนมาคำนวณผลที่ออกมาก็จะได้เป็นชนิดนั้น เช่นจำนวนเต็มบวกจำนวนเต็มได้จำนวนเต็ม

แต่ในไพธอน 3 ข้อมูลที่เป็นจำนวนเต็มหารจำนวนเต็มจะได้เป็นจำนวนจริง ซึ่งมีทศนิยมได้ ที่ต้องแปลงชนิดข้อมูลก็เพื่อให้เก็บค่าทศนิยมที่เกิดขึ้นจากการหารได้ นั่นเอง เช่น
3/7 # ได้ 0.42857142857142855  

***ในไพธอน 2 จำนวนเต็มหารจำนวนเต็มก็ได้จำนวนเต็ม ดังนั้นเศษจะหายไปหมด ทำให้ไม่สะดวก ต้องคอยมาแปลงข้อมูลก่อน
>>> รายละเอียด

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

โดยทั่วไปหาเก็บจำนวนเต็มกับจำนวนจริงมากระทำกันผลที่ได้จะออกมาเป็นจำนวนจริง เช่น
1930.389+348 # ได้ 2278.389
3.3e-9+1 # ได้ 1.0000000033

ถ้าจำนวนจริงหรือจำนวนเต็มทำกับจำนวนเชิงซ้อนก็จะได้จำนวนเชิงซ้อน
(123+44j)/20 #ได้ (6.15+2.2j)  

หากจำนวนจริงหรือจำนวนเต็มที่ติดลบยกกำลังเศษส่วนก็จะได้จำนวนเชิงซ้อนเช่นกัน

เช่น (-2)**1.1 ได้ (-2.0386342710747223-0.6623924280875919j)

***ในไพธอน 2 จะไม่สามารถทำแบบนี้ได้
>>> รายละเอียด

ข้อมูลชนิดบูลก็สามารถนำมาคำนวณกับตัวเลขได้ โดย True แทนค่า 1 และ False แทนค่า 0
True - True # ได้ 0
False*100 # ได้ 0
True + 1.5 # ได้ 2.5



การคำนวณกับสายอักขระ

ไม่เพียงแต่ตัวเลขจะมีการคำนวณเท่านั้น สายอักขระเองก็สามารถมีการคำนวณได้เช่นกัน แต่ความหมายในการคำนวณของสายอักขระนั้นจะต่างกันออกไปจากการคำนวณตัวเลขสักหน่อย โดยทำได้ค่อนข้างจำกัด

โดยการนำสายอักขระมาบวกกันจะเป็นการนำ สายอักขระมาต่อกัน และการนำสายอักขระมาคูณจำนวนเต็มก็จะเป็นการคัดลอกสายอักขระตามจำนวนเท่ากับที่คูณ
'ฮ่า'*7 # ได้ 'ฮ่าฮ่าฮ่าฮ่าฮ่าฮ่าฮ่า'
'ฮ่า'+'ๆ'*30 # ได้ 'ฮ่าๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆๆ'

แต่ถ้านำสายอักขระมาคูณด้วยจำนวนจริงก็จะขัดข้อง หรือหากนำสายอักขระมาคูณหรือลบหรือหารกันเองก็ขัดข้องเช่นกัน
'ฮ่าๆ'*3.3 # ได้ TypeError: can't multiply sequence by non-int of type 'float'
'ฮ่าๆๆ'-'ๆ' # ได้ TypeError: unsupported operand type(s) for -: 'str' and 'str'

ดังนั้นสายอักขระจึงทำได้แค่บวกกันเอง หรือคูณกับจำนวนเต็มเท่านั้น

ระวังว่าสายอักขระที่เป็นตัวเลขหากนำมาบวกกันก็จะเป็นการเขียนตัวเลขต่อกัน ไม่ใช่การบวกตัวเลข
'555'+'555' # ได้ '555555' ไม่ใช่ '1110'



อ้างอิง




-----------------------------------------

囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

ดูสถิติของหน้านี้

หมวดหมู่

-- คอมพิวเตอร์ >> เขียนโปรแกรม >> python

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

สารบัญ

รวมคำแปลวลีเด็ดจากญี่ปุ่น
มอดูลต่างๆ
-- numpy
-- matplotlib

-- pandas
-- manim
-- opencv
-- pyqt
-- pytorch
การเรียนรู้ของเครื่อง
-- โครงข่าย
     ประสาทเทียม
ภาษา javascript
ภาษา mongol
ภาษาศาสตร์
maya
ความน่าจะเป็น
บันทึกในญี่ปุ่น
บันทึกในจีน
-- บันทึกในปักกิ่ง
-- บันทึกในฮ่องกง
-- บันทึกในมาเก๊า
บันทึกในไต้หวัน
บันทึกในยุโรปเหนือ
บันทึกในประเทศอื่นๆ
qiita
บทความอื่นๆ

บทความแบ่งตามหมวด



ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ

  ค้นหาบทความ

  บทความแนะนำ

ตัวอักษรกรีกและเปรียบเทียบการใช้งานในภาษากรีกโบราณและกรีกสมัยใหม่
ที่มาของอักษรไทยและความเกี่ยวพันกับอักษรอื่นๆในตระกูลอักษรพราหมี
การสร้างแบบจำลองสามมิติเป็นไฟล์ .obj วิธีการอย่างง่ายที่ไม่ว่าใครก็ลองทำได้ทันที
รวมรายชื่อนักร้องเพลงกวางตุ้ง
ภาษาจีนแบ่งเป็นสำเนียงอะไรบ้าง มีความแตกต่างกันมากแค่ไหน
ทำความเข้าใจระบอบประชาธิปไตยจากประวัติศาสตร์ความเป็นมา
เรียนรู้วิธีการใช้ regular expression (regex)
การใช้ unix shell เบื้องต้น ใน linux และ mac
g ในภาษาญี่ปุ่นออกเสียง "ก" หรือ "ง" กันแน่
ทำความรู้จักกับปัญญาประดิษฐ์และการเรียนรู้ของเครื่อง
ค้นพบระบบดาวเคราะห์ ๘ ดวง เบื้องหลังความสำเร็จคือปัญญาประดิษฐ์ (AI)
หอดูดาวโบราณปักกิ่ง ตอนที่ ๑: แท่นสังเกตการณ์และสวนดอกไม้
พิพิธภัณฑ์สถาปัตยกรรมโบราณปักกิ่ง
เที่ยวเมืองตานตง ล่องเรือในน่านน้ำเกาหลีเหนือ
ตระเวนเที่ยวตามรอยฉากของอนิเมะในญี่ปุ่น
เที่ยวชมหอดูดาวที่ฐานสังเกตการณ์ซิงหลง
ทำไมจึงไม่ควรเขียนวรรณยุกต์เวลาทับศัพท์ภาษาต่างประเทศ

ไทย

日本語

中文