String

การอ้างตำแหน่ง 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 ครับ (อ้าว แล้วจะใช้วิธีไหนแทน? ขอยกยอดไปตอนหน้านะครับ)

Nattawut Phetmak

Jack of all Trades

blog comments powered by Disqus