Nattawut Phetmak
Jack of all Trades
การอ้างตำแหน่ง string ใน Python จะเหมือนแนวคิดของ char array ในภาษาอื่นๆ ดังนั้น เราสามารถใช้ความรู้จากตอนที่แล้ว บวกกับการหาความยาว string ด้วย len()
เพื่อวนเรียกตัวอักษรแต่ละตัวออกมาได้
msg = 'i love you.'
for i in range(len(msg)):
print(msg[i])
หมายเหตุไว้ว่า string ของ Python เป็น immutable type คือเราจะไปเปลี่ยนค่า char บางตัวของ string ที่ถูกสร้างขึ้นมาแล้วไม่ได้ครับ (เพื่อป้องกัน segmentation fault) ครับ
อนึ่ง สำหรับการวน for
ตามตัวอย่างข้างบน สามารถเขียนให้สั้นลงได้อีก เป็น
# shorter version
for c in msg:
print(c)
เราจะได้เห็นเทคนิคการวน for
ในลักษณะนี้อีกเรื่อยๆ ครับ
แม้ว่า string จะเป็น immutable แต่ก็ไม่ต้องวิตกครับ เราสามารถสร้าง string ใหญ่จาก string เล็กๆ ได้อย่างนี้
a = 'me'
b = 'you'
c = ' and '
# this is 'you and me'
um = a + c + b
# and this is 'me and you'
mu = b + c + a
# while this is 'meme'
name = a * 2
ส่วนการแตก string ให้เล็กลงนั้น เราจะใช้เทคนิคการ slice ครับ แต่ก่อนอื่น ขอให้ดูแผนภาพนี้
string: 'abcde'
+---+---+---+---+---+
| a | b | c | d | e |
+---+---+---+---+---+
0 1 2 3 4 5
-5 -4 -3 -2 -1
การสไลด์ string ให้เล็กลงนั้น จะใช้ [begin:end]
ตามหลัง string ครับ (จะได้ string ใหม่กลับมา) โดยที่ begin ต้องอยู่ก่อน end ถึงจะได้ผลลัพท์กลับมาครับ (แต่สามารถละ begin/end ได้)
msg = 'abcde'
msg[:] # 'abcde'
msg[3:] # 'de'
msg[:-2] # 'ab'
msg[-4:3] # 'bc'
msg[:100] # 'abcde'
# while this below return empty string ''
msg[1:1]
msg[-3:0]
ส่งท้ายนิดหน่อยด้วยการเล่นกับ print()
เพื่อพิมพ์ข้อความออกมาครับ
number = 42
# this print multi-line output (end of each print = newline)
print('answer')
print(number)
# while this will print only one line
print('answer', end=': ')
print(number)
# and this will print output exactly like above
print('answer: ', number)
หรือเราจะใช้ %
(percent sign) ทำคล้ายๆ กับภาษา C ก็ได้
# deprecated method
print('answer: %d' % number)
เพียงแต่ว่าวิธีนี้กำลังถูกเลิกสนับสนุน Python ครับ (อ้าว แล้วจะใช้วิธีไหนแทน? ขอยกยอดไปตอนหน้านะครับ)