Nattawut Phetmak
Jack of all Trades
ตัวเลขใน Python ที่ใช้กันบ่อยมีอยู่ 2 แบบ คือ int
(จำนวนเต็ม) กับ float
(ทศนิยม) โดยที่ int
นั้นสามารถเขียนให้ใหญ่เท่าไหร่ก็ได้ (ไม่มี overflow) ในขณะที่ float
ยังคง implement ตาม IEEE-754 อยู่ครับ
การประกาศตัวเลข float
ต่างจาก int
ตรงที่ต้องใส่จุดทศนิยมเข้าไป หรือไม่เช่นนั้นก็บอกส่วน mantisa แล้วตามด้วย exponent ดังตัวอย่าง:
>>> 42
42
>>> 7427466391
7427466391
>>> 4.
4.0
>>> 3.1416
3.1416
>>> 1e10
10000000000.0
ตัวเลขอีกแบบที่อาจจะไม่ค่อยได้เห็นกันซักเท่าไหร่ (ถ้าไม่ได้ทำงานสายคณิต/วิศวะ) คือ complex
(จำนวนเชิงซ้อน)
การเขียนเลข complex
ก็ง่ายเหมือนกับการเขียนจำนวนเชิงซ้อนในกระดาษเลย คือเขียนส่วนจริงบวก/ลบส่วนจินตภาพ ทั้งนี้ หน่วยจินตภาพจะใช้ตัว j ตามแบบวิศวะ และต้องมีตัวเลขนำหน้าเท่านั้น
>>> 1+0j
(1+0j)
>>> 5j
5j
การบวก ลบ คูณ จะให้ผลลัพท์ data กลับมาเป็น int
, float
หรือ complex
ตามอันที่ใหญ่ที่สุด
>>> 7 - 3
4
>>> 1 + 3.4
4.4
>>> 6 * (3-5j)
(18-30j)
ส่วนการหารด้วยเครื่องหมาย /
จะให้ผลลัพท์แค่ float
หรือ complex
เท่านั้น
>>> 8 / 4
2.0
>>> 6 / 9j
-0.6666666666666666j
ถ้าต้องการผลลัพท์เป็น int
ให้ใช้เครื่องหมาย //
โดยทศนิยมที่เกินมาจะถูกปัดลงเสมอ แน่นอนว่ามันรับเลข complex
ไม่ได้
>>> 8 // 4
2
>>> 11 // 4
2
>>> -9 // 4
-3
modulo ใช้เครื่องหมาย %
ซึ่งมันใช้ได้กับ int
, float
เท่านั้น ทั้งนี้ เครื่องหมายของผลลัพท์ จะเป็นบวก/ลบตามตัวหาร ไม่ต้องมาเผื่อเอง
>>> 23 % 4
3
>>> -99 % 6.
3.0
>>> 12 % -9
-6
ที่เจ๋งอีกอย่างคือ Python มียกกำลังเป็นเครื่องหมายให้ใช้เลย ไม่ต้องเรียกผ่านฟังก์ชัน
>>> 0**0
1
>>> 2 ** 0.5
1.4142135623730951
>>> 1j ** (5+4j)
(5.717205586622551e-19+0.0018674427317079893j)
แต่ถ้าอยากใช้เป็นฟังก์ชัน ก็สามารถใช้ pow
ได้ ซึ่งอาจมี argument เพิ่มอีกตัวคือการ modulo หลังยกกำลังเสร็จ
>>> pow(2, 5)
32
>>> pow(2, 7830457, 100000000000000)
55839700303872
การแปลงตัวเลขระหว่าง int
, float
, complex
สามารถทำได้ผ่านฟังก์ชันเลย
int(3.1416) # round down toward zero
int(-5.432) # round up toward zero
float(5)
x = 1.6180
y = 2.7182
z = x-y*1j
complex(6.66)
complex(0, 1)
อย่างไรก็ตาม complex
ไม่สามารถแปลงเป็น int
หรือ float
ได้โดยอัตโนมัติ ต้องระบุว่าจะหาส่วนจริงหรือส่วนจินตภาพเช่นนี้
>>> z = 1+0.3j
>>> z.real
1.0
>>> z.imag
0.3
สำหรับการดำเนินการทางคณิตศาสตร์แล้ว assign ค่าให้ตัวแปรเดิม ก็ทำได้ทั่วไปเช่นภาษาอื่น
a = 1
# augmented assignment
a += 1 # 2
a -= 4 # -2
a *= a # 4
a **= 3 # 64
a %=2 # 0
ทั้งนี้ ใน Python ไม่มี increment พวก i++
ให้ใช้นะครับ
สำหรับอักษรใน Python มีเพียง string ให้ใช้เพียงอย่างเดียวเท่านั้น (ไม่มี char ครับ)
การประกาศ string ใน Python สามารถใช้เครื่องหมายได้ทั้ง '
(single quote) และ "
(double quote) เลย ซึ่งมันไม่มีความแตกต่างด้าน performance เหมือน PHP ครับ
hi = "greetin' from moon."
yo = "おはようございます。"
cx = 'i\'m not a "hero".'
และยังมีท่าประหลาดๆ ในการประกาศ string แบบนี้ด้วย
us = 'you' ' and me' # return 'you and me'
นอกจากนี้ การประการ string ด้วย '''
(3 single quote) และ """
(3 double quote) จะทำให้เราเขียน string หลายบรรทัดง่ายขึ้น เพราะมันจะแปลงเครื่องหมายขึ้นบรรทัดใหม่ให้เป็น \n โดยอัตโนมัติ
document = '''you can ask any question to this amazing computer.
please, except the meaning of life, universe, & everything. '''
deepthought = """it's 42. end of story.
bother me no more, i'm watching tv!"""
อย่างหนึ่งที่ต้องตระหนักคือ string ของ Python เป็น immutable คือสร้างแล้วไม่สามารถแก้ไขมันได้ครับ (แล้วเราจะมาดูเรื่องนี้กันอีกที)