การจัดการกับสตริง (String Operations)#

ในภาษา Python มีข้อมูลหลากหลายประเภทไม่ว่าจะเป็น ตัวเลข (Numberic: int, float, complex) ข้อมูลแบบจับคู่ (Mapping: dict) ไบนารี่ (Binary: byte, bytearray, memoryview) บูลีน (Boolean: bool) เซ็ท (Set: set, frozenset) ข้อมูลที่มีลำดับ (Sequence: str, list, tuple, range) ซึ่งในการจัดการกับข้อมูลข้อมูลเหล่านี้ก็จะมีวิธีที่แตกต่างกันออก

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับข้อมูลชนิดสตริง (Sring; สายอักขระ) ในภาษาไพธอน เรียนรู้วิธีการประกาศและใช้งานสตริงในรูปแบบต่างๆ รวมถึงแนะนำการใช้งานเมธอดที่สำคัญในการจัดการกับข้อมูลชนิดสตริง

Ref:


สตริง (Strings) คือ?#

\(\qquad\) สตริง (String)1 คือ ชนิดของข้อมูลที่เป็น ข้อความหรือตัวอักษร/อักขระ(Character) หลายๆ ตัวเรียงลำดับต่อๆ กัน อยู่ภายในเครื่องหมายคำพูดเดี่ยว (Single quote) หรือภายในเครื่องหมายคำพูดคู่ (Double quote)

ตัวอย่างต่อไปนี้เป็นสตริงที่คร่อมหัวและท้ายด้วยเครื่องหมายคำพูดคู่ “Double quotation mark (Double quote)” (" ")

# ใช้เครื่องหมายคำพูด Double quote กำหนดสตริง

"Michael Jackson"
'Michael Jackson'

เราสามารถใช้เครื่องหมายคำพูดเดี่ยว ‘Single quotation mark (Single quote)’ (' ') คร่อมสตริงก็ได้

# ใช้เครื่องหมายคำพูด Single quotes กำหนดสตริง

'Michael Jackson'
'Michael Jackson'

สตริงในภาษา Python ไม่เพียงแต่รองรับตัวอักษรภาษาอังกฤษเท่านั้น แต่ยังรองรับหลายภาษารวมถึงภาษาไทยด้วย

'ไมเคิล แจ็คสัน'
'ไมเคิล แจ็คสัน'

Attention

เครื่องหมายที่คล้ายๆ กัน !!!

  • เครื่องหมาย Single quotation mark (Single quote) ( ' ) และเครื่องหมาย Backquote (Backtick) ( ` ) เป็นตัวอักษรคนละตัวกัน ตำแหน่งบนคีย์บอร์ดก็ต่างกัน (ปุ่ม Backtick อยู่ทางซ้ายมือด้านบน ส่วนปุ่ม Single quote อยู่ทางขวามือขอบขวาของคีย์บอร์ด)

  • เครื่องหมาย Backquote (Backtick) ( ` ) ถูกใช้ในยูนิกซ์ (Unix) และในภาษาโปรแกรมบางภาษา เช่น Perl, PHP และ Ruby เพื่อระบุการแทนที่คำสั่งด้วยผลลัพธ์ (command substitution) แต่ใน Python-3 ได้ยกเลิกการใช้เครื่องหมายนี้ไปแล้ว ทั้งนี้เพื่อไม่ให้สับสนกับเครื่องหมาย Single quote

ภายในสตริงสามารถมีตัวเลขและมีช่องวาง (space) ได้

# ตัวเลขและช่องว่างในตริง

'1 2 3 4 5 6 '
'1 2 3 4 5 6 '

อักขระพิเศษต่างๆ ก็อยู่ในสตริงได้

# อักขระพิเศษในตริง

'@#2_#]&*^%$฿`'
'@#2_#]&*^%$฿`'

ลองใช้คำสั่ง print() แสดงสตริงออกหน้าจอ

# แสดงสตริงออกหน้าจอ

print("hello!")
hello!

เราสามารถผูกหรือกำหนดสตริงให้กับตัวแปร และแสดงผลตัวแปรโดยใช้ฟังก์ชัน print() ได้

# กำหนดค่าตัวแปรให้เป็นสตริง

name = "Michael Jackson"
# แสดงตัวแปร name ออกหน้าจอ

print(name)
Michael Jackson

เราสามารถตรวจสอบว่าตัวแปร name เป็นข้อมูลชนิดสตริงได้โดยใช้ฟังก์ชัน type()

(ฟังก์ชัน type() จะรับออบเจกต์ใดๆ เป็นอาร์กิวเมนต์และส่งคืนค่ากลับเป็นชนิดของข้อมูลนั้นๆ)

# ตรวจสอบชนิดข้อมูล
type(name)
str

str หมายถึงข้อมูลชนิดสตริง (string)

str ยังเป็นชื่อของฟังก์ชันฝังตัวในไพธอน เราสามารถใช้ฟังก์ชัน str แปลงข้อมูลใดๆ ให้เป็นสตริงได้ (โดยทั่วไป ชื่อของชนิดข้อมูลมักใช้เป็นชื่อของฟังก์ชันในการแปลงเป็นข้อมูลชนิดนั้นๆ เช่น int แปลงข้อมูลเป็นจำนวนเต็ม, float แปลงข้อมูลเป็นจำนวนทศนิยม และ bool แปลงข้อมูลเป็นค่าจริง (True) หรือเท็จ (False))

การแปลงข้อมูลชนิดของออบเจกต์เป็นชนิดของข้อมูลที่ต้องการหรือการแปลงชนิดของออบเจกต์ (Typecasting) สามารถย้อนกลับดูในบทก่อนหน้าในหัวข้อ การแปลงชนิดของออบเจกต์ (Typecasting)

ตัวอักษรที่อยู่ในข้อความที่ถูกคล่อมด้วยเครื่องหมาย Double quotation marks (Double quotes) ("...") หรือ Single quotation marks (Single quotes) ('...') ไพธอนจะถือว่าทุกตัวเป็นตัวอักษรทั้งสิ้น ไม่ว่าภายในข้อความนั้นๆ จะมีช่องว่าง (space), ตัวเลข, สัญลักษณ์ที่ใช้เป็นตัวดำเนินการ อักขระพิเศษ (Escape sequences) หรือแม้กระทั่งเครื่องหมายคอมเมนต์ # ก็ตาม

ตัวอย่างของสตริงที่ประกอบด้วยตัวอักษร ช่องว่าง ตัวเลข สัญลักษณ์และเครื่องหมายต่างๆ

text1 = "🐍 จะถือว่า ตัวอักขระใดๆ ก็ตามที่อยู่ในเครื่องหมายคำพูด ไม่ว่าจะเป็นตัวเลข 𝜋 (355/113) ตัวดำเนินการ +, -, *, /, & สัญลักษณ์ต่างๆ ?, |, $ ช่องว่าง (space) หรือแม้กระทั่งเครื่องหมายคอมเม้นต์ # ทุกตัวเป็นตัวอักษรทั้งสิ้น"

print('\nจำนวนตัวอักษรในตัวแปร string: ', len(text1))
จำนวนตัวอักษรในตัวแปร string:  216

ตัวแปรสตริงนี้มีจำนวนตัวอักขระ 216 ตัว (ตรวจสอบขนาดของข้อมูลได้ด้วยฟังก์ชัน len())

ในกรณีแบบนี้ เราสามารถใช้ DocString (Triple quote string) เขียนสตริงที่ครอบคลุมหลายบรรทัด โดยใช้เครื่องหมายคำพูด Triple single quote \('''...'''\) หรือ Triple double quotes \("""..."""\) แทน

text2 = '''
🐍 จะถือว่า ตัวอักขระใดๆ ก็ตามที่อยู่ในเครื่องหมายคำพูด 
ไม่ว่าจะเป็นตัวเลข 𝜋 (355/113) ตัวดำเนินการ +, -, *, /, & สัญลักษณ์ต่างๆ ?, |, $ 
ช่องว่าง (space) หรือแม้กระทั่งเครื่องหมายคอมเม้นต์ # ทุกตัวเป็นตัวอักษรทั้งสิ้น
'''
print(text2)
print('\nจำนวนตัวอักษรในตัวแปร string1: ', len(text2))
🐍 จะถือว่า ตัวอักขระใดๆ ก็ตามที่อยู่ในเครื่องหมายคำพูด 
ไม่ว่าจะเป็นตัวเลข 𝜋 (355/113) ตัวดำเนินการ +, -, *, /, & สัญลักษณ์ต่างๆ ?, |, $ 
ช่องว่าง (space) หรือแม้กระทั่งเครื่องหมายคอมเม้นต์ # ทุกตัวเป็นตัวอักษรทั้งสิ้น


จำนวนตัวอักษรในตัวแปร string1:  220

ตัวแปร text2 มีจำนวนอักขระมากถึง 220 ตัว (ตัวแปร text1 มีเพียง 116 ตัว) เนื่องจากนับรวมกับอักขระพิเศษ \n (ขึ้นบรรทัดใหม่) ด้วย

text2
'\n🐍 จะถือว่า ตัวอักขระใดๆ ก็ตามที่อยู่ในเครื่องหมายคำพูด \nไม่ว่าจะเป็นตัวเลข 𝜋 (355/113) ตัวดำเนินการ +, -, *, /, & สัญลักษณ์ต่างๆ ?, |, $ \nช่องว่าง (space) หรือแม้กระทั่งเครื่องหมายคอมเม้นต์ # ทุกตัวเป็นตัวอักษรทั้งสิ้น\n'

Note

  • เครื่องหมาย Triple single quote \('''...'''\) หรือ Triple double quotes \("""..."""\) นอกจากจะใช้เป็น DocString ซึ่งเป็นข้อมูลชนิดสตริงแล้ว ยังใช้เป็นคอมเม้นต์อธิบายหน้าที่ของฟังก์ชั่นหรือคลาสในโปรแกรมอีกด้วย (ดูรายละเอียดในการเขียนคอมเมนต์ในภาษาไพธอน (Comments & Docstrings))

  • PEP8 แนะนำให้ใช้ Triple double quotes \("""..."""\) เขียน DocString


สตริง - เลขดัชนี (Index)#

\(\qquad\) สตริงเป็นข้อมูลที่ประกอบด้วยตัวอักษรเรียงลำดับต่อๆ กัน เป็นข้อมูลที่มีลำดับ (Sequence type) และใช้ ดัชนี (index) ในการเข้าถึงข้อมูล

ยกตัวอย่าง “Michael Jackson” เป็นสตริงที่มีตัวอักษรทั้งหมด 11 ตัวอักษร

ในกรณีที่เราต้องการตัวอักษรตัวแรกสุด เราจะเขียนคำสั่ง

"Michael Jackson"[0]
'M'

เราเรียกตัวเลขในวงเล็บก้ามปู (square brackets; [ ]) ว่า "ดัชนี หรือ อินเด็กซ์ (Index)" โดยเลขดัชนีเป็นเลขจำนวนเต็มเสมอ

เลขดัชนี (Index) จะเริ่มจาก “0” โดยเรียงลำดับจากซ้ายมือสุดไปทางขวามือตามลำดับ ดังรูป

ในกรณีของตัวแปรที่เป็นชนิดสตริงก็เขียนแบบเดียวกัน เราใช้เลขดัชนีในวงเล็บก้ามปู (square brackets) “[ ]” ระบุตำแหน่งของตัวอักษรที่ต้องการเข้าถึง (โดยส่วนใหญ่ ดัชนีจะมักใช้กับตัวแปร)

ถ้าต้องการเข้าถึงตัวอักษรตัวที่ x ให้กำหนดเลขดัชนีเป็น x-1 เช่น เข้าถึงตัวอักษรตัวแรก, ตัวที่ 6 และตัวที่ 10 เลขดัชนีจะเป็น 0 5 และ 9 ตามลำดับ

name = "Michael Jackson" # กำหนดค่าตัวแปรสตริง 
print(name[0]) # แสดงอักษรตัวแรกสุดออกหน้าจอ
M
# แสดงตัวอักษรตัวที่ 6 ออกหน้าจอ

print(name[5])
e
# แสดงตัวอักษรตัวที่ 10 ออกหน้าจอ

print(name[9])
a

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

print(f'{name[0]} เป็นข้อมูลชนิด {type(name[0])} และมีขนาดข้อมูล {len(name[0])}')
M เป็นข้อมูลชนิด <class 'str'> และมีขนาดข้อมูล 1

Attention

ภาษาโปรแกรมคอมฯ บางภาษา เช่น C# มีทั้ง Char (ใช้เก็บข้อมูลตัวอักษรเพียงหนึ่งตัวโดยใช้เครื่องหมาย ' คร่อม) และ String (ใช้เก็บตัวอักษรหลายตัวหรือ text โดยใช้เครื่องหมาย " คร่อม) แต่ในภาษาไพธอนจะไม่แยกแยะ มีเฉพาะ String เท่านั้น

เราสามารถเชื่อมสตริงหนึ่งตัวอักษรข้างต้นเข้าด้วยกันให้เป็นตัวแปรใหม่ ‘new_name’ โดยใช้โอเปอร์เรเตอร์ ‘+’ (รายละเอียดอยู่ในหัวข้อ (การเชื่อมต่อสตริง)

new_name = name[0]+ name[5] + name[9]
print(new_name)
Mea

สตริงในไพธอนไม่เหมือนกับภาษา C ไม่สามารถเปลี่ยนค่าสตริงโดยอ้างจากเลขดัชนีได้!

\(\qquad\) ชนิดของข้อมูลในไพธอนสามารถแบ่งเป็น 2 แบบใหญ่ๆ คือ ข้อมูลที่แก้ไขได้ (Mutable) และข้อมูลที่ไม่แก้ไขได้ (Immutable) สตริงเป็นข้อมูลที่แก้ไขไม่ได้ (Immutable) นั่นหมายความว่า เราสามารถเข้าถึงค่าของข้อมูลได้ แต่แก้ไขมันไม่ได้

ลองเปลี่ยนตัวอักษรตัวแรกในตัวแปร name จาก “M” เป็น “Z” โดยรันเซลล์ด้านล่างนี้

# ลองรันดูว่าจะเกิดอะไรขึ้น
name = "Michael Jackson"
name[0] = 'Z'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In [19], line 3
      1 # ลองรันดูว่าจะเกิดอะไรขึ้น
      2 name = "Michael Jackson"
----> 3 name[0] = 'Z'

TypeError: 'str' object does not support item assignment

คำสั่ง name[0] = 'Z' เป็นคำสั่งที่ทำให้เกิด Runtime Errors เนื่องจากข้อมูลชนิดสตริงไม่สามารถเปลี่ยนค่าได้ (TypeError:’str’ object does not support item assignment) ฉะนั้น ในกรณีที่ต้องการแก้ไขสตริง จำเป็นต้องสร้างตัวแปรใหม่ขึ้นมา เก็บค่า ดังตัวอย่างต่อไปนี้


new_name = 'Z'+name[1]+name[2]+name[3]+name[4]+name[5]+name[6]+name[7]+\
           name[8]+name[9]+name[10]+name[11]+name[12]+name[13]+name[14]
new_name

แต่ก็มีเทคนิก ที่สามารถเขียนได้แบบง่ายๆ ได้โดยใช้การตัดข้อความ (Slicing strings) (รายละเอียดของการตัดข้อความจะอธิบายในหัวข้อถัดไป)

'Z' + name[1:]
'Zichael Jackson'

นอกจากนี้ เลขดัชนีจะต้องมีค่าไม่เกินขนาดของสตริง -1 (ถ้ารันโค้ดต่อไปนี้จะเกิดเออเรอร์)

name[100]
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
Cell In [21], line 1
----> 1 name[100]

IndexError: string index out of range

สตริง - เลขดัชนีเชิงลบ (Negative Index)#

\(\qquad\) เลขดัชนีเป็นเลขจำนวนเต็มที่สามารถติดลบได้

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

เราเรียกดัชนีที่เป็นเลขติดลบนี้ว่า ดัชนีเชิงลบหรือดัชนี้ย้อนหลัง (Negative index or Reward index)

โดยดัชนีของตัวอักษรตัวสุดท้ายมีค่าเป็น -1 เสมอ

# แสดงตัวอักษรตัวสุดท้ายของสตริงออกหน้าจอ
name = "Michael Jackson"
print(name[-1])
n

ดัชนีของอักขระตัวแรกสุดมีค่าเป็น 0 (ดัชนีเชิงบวก) หรือ -15 (ดัชนีเชิงลบ)

# แสดงตัวอักษรตัวแรกสุดของสตริงออกหน้าจอโดยใช้ดัชนีเชิงลบ

print(name[-15])
M

ยกเว้น -0 มีค่าเท่ากับ 0 จึงเป็นการนับจากซ้ายไปขวาตามปกติ

name[-0]
'M'

เราสามารถหาจำนวนอักขระในสตริงได้โดยใช้ฟังก์ชัน len() ซึ่งย่อมาจาก “length”

สตริง “Michael Jackson” มี 15 ตัวอักษร

# หาความยาวของสติงโดยใช้คำสั่ง len()

len("Michael Jackson")
15

โดยสรุป ดัชนีเชิงบวกและเชิงลบของสตริง “Michael Jackson” มีความสัมพันธ์ดังแสดงในตารางด้านล่าง

Index

M

i

c

h

a

e

l

J

a

c

k

s

o

n

0, เลขบวก

 0

 1

 2

 3

 4

 5

 6

 7

 8

 9

 10

 11

 12

 13

 14

เลขลบ

-15

-14

-13

-12

-11

-10

-9

-8

-7

-6

-5

-4

-3

-2

-1

สตริง - การตัดข้อความ (Slicing strings)#

\(\qquad\) เราสามารถตัดเอาข้อความเฉพาะบางส่วน (หนึ่งตัวอักษรหรือมากกว่า) จากตัวแปรที่เก็บข้อมูลประเภทสตริง ให้เป็นท่อนๆ โดยใช้เทคนิคที่เรียกว่า การตัดข้อความ (Slicing)

เราใช้เลขดัชนีเป็นตัวกำหนดการตัดข้อความ

การตัดข้อความ (Slicing)

string[start, stop]
  • ตัวเลขตัวแรก (start) เป็นดัชนีเริ่มต้น (starting index) ของข้อความที่ต้องการตัด ถ้าไม่ระบุ จะมีค่าเป็น 0 โดยอัตโนมัติ (by default) กล่าวคือ จะเริ่มจากตัวแรกสุดของสตริงเสมอ

  • ตัวเลขตัวที่สอง (stop) เป็นดัชนีสิ้นสุด (ending index) ของการตัด โดยผลของการตัดจะไม่รวมดัชนีสิ้นสุด! ถ้าไม่ระบุจะมีค่าเป็น len(string) โดยอัตโนมัติ (by default) กล่าวคือ จะตัดจนถึงตัวอัษรตัวสุดท้ายของสตริงเสมอ

เช่น ถ้าเราต้องการตัดเอาตัวอักษร ตั้งแต่อักษรดัชนีที่ 0 ถึง 3 และตั้งแต่อักษรดัชนีที่ 8 ถึง 11 จะสามารถทำได้ดังรูป

# ตัดข้อความที่เก็บในตัวแปร name เฉพาะตัวอักษรตั้งแต่ดัชนีที่ 0 ถึงดัชนีที่ 3

name[0:4] # name[:4] 
'Mich'
# ตัดข้อความที่เก็บอยู่ในตัวแปร name เฉพาะตัวอักษรตั้งแต่ดัชนีที่ 8 ถึงดัชนีที่ 11

name[8:12]
'Jack'

หากไม่ใส่ค่าดัชนีเริ่มต้น จะถูกตีความเป็นศูนย์โดยอัตโนมัติ (by default)

name[:12] # name[0:12]
'Michael Jack'

และหากไม่ใส่ค่าดัชนีสิ้นสุด จะมีค่าเป็น len(string) (ในกรณี len(name) มีค่่าเท่ากับ 15) โดยอัตโนมัติ (by default)

# ตัดข้อความที่เก็บในตัวแปร name โดยไม่ระบุเลขดัชนี
name[:] # name[0:15]
'Michael Jackson'

จะใช้ดัชนีเชิงลบตัดข้อความก็ได้

# ตัดข้อความที่เก็บในตัวแปร name โดยใช้ดัชนีเชิงลบ
name[-15:] # 
'Michael Jackson'

ในกรณีของการตัดข้อความ ถ้าตัวเลขดัชนีมีค่านอกช่วงที่มีอยู่จริง ไพธอนจะแสดงเป็นอักขระว่าง (Empty string, ขนาดข้อมูลเป็นศุนย์) โดยไม่รายงานความผิดพลาดใดๆ

(ตัดได้ แต่ตัดแล้วไม่ได้อะไร ได้ความว่างเปล่า (อักขระว่าง (Empty string))

name[20:110]
''

แต่ในกรณีดัชนีตัวเดียว ถ้าค่าดัชนีไม่มีอยู่จริง ไพธอนจะแสดงข้อผิดพลาด (IndexError: string index out of range)

(ดัชนีตัวเดียวเป็นการเข้าถึงข้อมูล ไม่ใข่การตัด (Slicing))

# ถ้ารันคำสั่งนี้ จะเกิดเออเรอร์เนื่องจากค่าดัชนีอยู่นอกช่วงที่มีอยู่จริง
# name[20]

การโดดข้าม (Stride)#

\(\qquad\) นอกจากจะใช้เลขดัชนี 2 ค่าในการตัดข้อความแล้ว เรายังสามารถป้อนค่าการโดดข้ามได้ ดังตัวอย่างต่อไปนี้

โดยที่ตัวเลข ‘2’ ในรูปเป็นการระบุให้กระโดดข้ามอักขระ/ตัวอักษรทุกๆ ตัวที่สอง

# เลือกตัวอักษรโดยข้ามตัวอักษรทุกๆ ตัวที่ 2 (ข้ามตัวอักษรที่มีดัชนีเป็น 1, 3, 5 ...)

name[::2]  # name[0:0:2]
'McalJcsn'

เราสามารถทำการตัดข้อความ (Slicing) ร่วมกับการโดดข้าม (Stride) ได้ เช่น

name[2:15:2] # 'Michael Jackson'[1:15:2]
'calJcsn'

ซึ่งจะมีค่าเท่ากับการตัดข้อความด้วยคำสั่ง name[1:15] ก่อน (ผลลัพธ์: 'chael Jackson') แล้วนำผลลัพธ์นี้ไปทำการโดดข้ามตัวที่สองด้วยคำสั่ง ‘chael Jackson’[::2] นั่นเอง

name[2:15][::2] # name[1:15:2]
'calJcsn'

นอกจากนี้ เราสามารถให้ตัวเลขตัวที่สาม (step) เป็นเลขติดลบก็ได้ ในกรณีนี้จะเป็นการย้อนจากหลังมาหน้า

name[15:2:-2] # 'Michael Jackson'[15:2:-2]
'nscJla'

สรุป: การตัดข้อความ (Slicing) และการโดดข้าม (Stride)

string[start:stop:step]

  • ตัวเลขตัวแรก (start) เป็นดัชนีเริ่มต้น (starting index) ของข้อความที่ต้องการตัด ถ้าไม่ระบุ จะมีค่าเป็น 0 โดยอัตโนมัติ (by default) กล่าวคือ จะเริ่มจากตัวแรกสุดของสตริงเสมอ

  • ตัวเลขตัวที่สอง (stop) เป็นดัชนีสิ้นสุด (ending index) ของการตัด โดยผลของการตัดจะไม่รวมดัชนีสิ้นสุด! ถ้าไม่ระบุจะมีค่าเป็น len(string) หรือ -1 (by default) กล่าวคือ จะตัดจนถึงตัวอัษรตัวสุดท้ายของสตริงเสมอ

  • ตัวเลขตัวที่สาม (step) เป็นอาร์กิวเมนต์ทางเลือกสำหรับกำหนดสเต็ป (step) ระหว่างดัชนีเริ่มต้นและดัชนีสิ้นสุด ถ้าไม่ระบุ จะเป็น 1 (by default) กล่าวคือ จะไม่กระโดดข้ามเสมอ

การเชื่อมต่อสตริง (Concatenate Strings)#

\(\qquad\) เราสามารถเชื่อมหรือรวมสตริงเข้าด้วยกันโดยใช้โอเปอร์เรเตอร์ ‘+’ และผลลัพธ์ที่ได้คือสตริงตัวใหม่ที่เชื่อมต่อสตริงทั้งสองเข้าด้วยกัน

# เชื่องสองสตริงเข้าด้วยกัน

statement = name + "is the best"
statement
'Michael Jacksonis the best'

หากต้องการเชื่อต่อสตริงเดิมซ้ำๆ (ก๊อปปี้) ก็เพียงแค่ให้โอเปอรืเรเตอร์คูณ (*) สตริงด้วยจำนวนครั้งที่เราต้องการ (ก๊อปปี้) ซ้ำ

# แสดงสตรืิงเดิมต่อกัน 3 ครั้ง

3 * ("Michael Jackson" + " ") # ("Michael Jackson" + " ") * 3
'Michael Jackson Michael Jackson Michael Jackson '

เนื่องจากสตริงเป็นข้อมูลที่แก้ไขไม่ได้ (Immutable) ดังนั้น เราจึงไม่สามารถแก้ไขตัวแปรสตริงโดยตรงได้ ดังตัวอย่างก่อนหน้านี้ อย่างไรก็ตาม เราสามารถสร้างสตริงตัวใหม่ แล้วกำหนดค่าให้กับตัวแปรเดิมได้ เช่น

# เชื่อมสตริง (Concatenate strings)  แล้วกำหนดค่าให้กับตัวแปรตัวเดิม

name = "Michael Jackson"
name = name + " is the best"
name
'Michael Jackson is the best'

ตัวแปร name เดิมที่เคยมีค่าเป็น “Michael Jackson” จะกลายเป็น “Michael Jackson is the best” แทน


อักขระพิเศษ (Escape Sequences)#

\(\qquad\) อักขระพิเศษ หรือรหัสพิเศษ (Escape Sequences) ในสตริงจะเริ่มต้นด้วยเครื่องหมาย "\" (Back slash, Backslash (แบ็กสแลช)) เป็นรหัสของสตริงที่อินพุตยาก เช่น ↵ (การขึ้นบรรทัดใหม่) ⇥ (การตั้งแท็บ) หรือเครื่องหมายคำพูด Single/Double quote ที่ใช้ในการกำหนดสตริง

ในภาษาไพธอน มีอักขระพิเศษ (Escape Sequences) มากมาย (ตารางสรุปอักขระพิเศษ (Escape Sequences) ที่ใช้บ่อย) เช่น "\n" หมายถึง การขึ้นบรรทัดใหม่ (Newline escape sequence)

# อักขระพิเศษขึ้นบรรทัดใหม่ (Newline escape sequence)

print(" Michael Jackson \n is the best" )
 Michael Jackson 
 is the best

เช่นเดียวกัน "\t" แทนแท็บ (Tab escape sequence):

# อักขระพิเศษแท็บ (Tab escape sequence)

print(" Michael Jackson \t is the best." )
 Michael Jackson 	 is the best.

ถ้าใส่ Backslash หน้าตัวอักษร i จะแสดง \i ออกหน้าจอ เนื่องจาก ไม่เป็นรหัสพิเศษ

# สตริงที่มีอักขระพิเศษไม่ถูกต้อง
print(" Michael Jackson \is the best." )
 Michael Jackson \is the best.

แต่ถ้าเราใส่ \ ระหว่าง s กับ t (“Michael Jackson is the bes\t”) ผลลัพธ์จะเป็น

# สตริงที่มีเครื่องหมาย Backslash: กรณีที่หลัง Backslash เป็นตัวอักษร t (อักขระพิเศษ)

print(" Michael Jackson is the bes\t." )
 Michael Jackson is the bes	.

เนื่องจาก \t แทนแท็บ

ถ้าต้องการให้แสดงเครื่องหมาย \ (Backslash; Unicode U+005C) โดยที่ไม่ต้องกังวลว่าจะเป็นรหัสพิเศษหรือไม่ ให้ใช้เครื่องหมาย \\ (Double backslash) ในสตริง

# สตริงที่มีเครื่องหมาย Backslash

print(" Michael Jackson is the bes\\t." )
 Michael Jackson is the bes\t.

หรือใช้อีกวิธี

เราสามารถใส่ตัวอักษร r (ย่อมาจาก Raw string) หน้าสตริงเพื่อให้ไพธอนละเว้นการประมวลผลอักขระพิเศษได้เช่นกัน (escape sequence ignore)

# ใส่ r หน้าสตริงเพื่อให้ Python แสดงสตริงแบบ Raw string

print(r" Michael Jackson is the bes\t." )
 Michael Jackson is the bes\t.

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

# สตริงที่มีเครื่องหมาย Backslash เท่านั้น

print("Michael Jackson, the greatest pop artist that ever lived, \
has a career that spans more than 40 of his 50 years. " )
Michael Jackson, the greatest pop artist that ever lived, has a career that spans more than 40 of his 50 years. 

แต่ถ้าใส่ตัวอักษร r หน้าสตริง เครื่องหมาย \ จะถูกแสดงออกหน้าจอและอักขระพิเศษจะถูกละเว้นการประมวลผล

# สตริงที่มีเครื่องหมาย Backslash

print(r'Michael Joseph Jackson (August 29, 1958 – June 25, 2009) was an American singer, \n\
songwriter, dancer, and philanthropist. Dubbed the "King of Pop", he is regarded \n\
as one of the most significant cultural figures of the 20th century.')
Michael Joseph Jackson (August 29, 1958 – June 25, 2009) was an American singer, \n\
songwriter, dancer, and philanthropist. Dubbed the "King of Pop", he is regarded \n\
as one of the most significant cultural figures of the 20th century.

ตารางสรุปอักขระพิเศษ (Escape Sequences) ที่ใช้บ่อย

Escape Sequence

ความหมาย

\’

เครื่องหมายคำพูด ‘ (Single quote)

\"

เครื่องหมายคำพูด ” (Double quote)

\\

เครื่องหมาย Backslash \

\n

ขึ้นบรรทัดใหม่ (Newline)

\t

ตั้งแท็บในแนวนอน (Horizontal Tab)

\b

เลื่อนเคอเซอร์ลบตัวอักษรทางซ้ายมือหนึ่งตัวอักษร (Backspace)

\v

เครื่องหมาย Vertical Tab

\r

เลื่อนเคอเซอร์ไปทางซ้ายมือสุดของบรรทัด

\ooo

ตัวอักษรที่มีค่าฐาน 8 เป็น ooo

\xhh

ตัวอักษรที่มีค่าฐาน 16 เป็น hh

\uhhhh

ตัวอักษร Unicode (UTF-8) ที่มีค่าฐาน 16 เป็น hhhh

\a

ส่งเสียงกระดิ่งออกลำโพงหนึ่งครั้ง (Bell)


การตรวจสอบข้อความในสตริงโดยใช้ตัวดำเนินการ in#

วิธีที่ง่ายที่สุดวิธีหนึ่งในการตรวจสอบว่าข้อความที่ระบุมีอยู่ในสริงหรือไม่ คือ การใช้ตัวดำเนินการ "in"

ตัวดำเนินการ " in" จะส่งกลับค่าบูลีน (True หรือ False)

Syntex ของตัวดำเนินการ "in" เพื่อตรวจสอบข้อความ:

sub_string in sring

ถ้ามี sub_string อยู่ใน string จะเป็น "True" แต่ถ้าหากไม่มี จะเป็น "False"

"Ja" in "Michael Jackson" 
True
"Janet" in "Michael Jackson" 
False

โดยปรกติ เรามันจะใช้ตัวแปรเก็บข้อมูลสตริง

word1 = "Michael Jackson"
substr1 = "M"
substr1 in word1
True
substr2 = "m"
substr2 in word1
False

ตัวดำเนินการ "not in" ใช้ผลลัพธ์ที่ตรงกันข้ามกับตัวดำเนินการ "in"

word1 = "Michael Jackson"
substr2 = "m"
substr2 not in word1
True

(รายละเอียดของตัวดำเนินการ "in" และ "not in" อยู่ใน ตัวดำเนินการตรวจสอบสมาชิก (Membership operators))


การจัดการกับสตริง (String Operations) - สตริงเมธอด (String methods)#

\(\qquad\) ในภาษาไพธอน มีวิธีในการจัดการกับสตริงหลากหลายวิธี การจัดการกับสตริงพื้นฐานวิธีหนึ่ง คือ การใช้ สตริงเมธอด (String methods)2

สตริงจะเรียกใช้เมธอด (สตริงเมธอด) ได้โดยการใส่เครื่องหมายจุด (.) ต่อท้ายสตริง (ซึ่งเป็นการบอกว่า สตริงตัวนั้นๆ เป็นผู้เรียกเมธอด นั่นเอง!)

Syntex การเรียกใช้เมธอด

สตริง.ชื่อของสตริงเมธอด(อาร์กิวเมนต์, อาร์กิวเมนต์, ...)

หรือ

ตัวแปรสตริง.ชื่อของสตริงเมธอด(อาร์กิวเมนต์, อาร์กิวเมนต์, ...)

เมธอด upper() เป็นเมธอดของสตริงที่ใช้แปลงตัวอักษรเป็นตัวพิมพ์ใหญ่ทั้งหมด

# แปลงตัวอักษรทุกตัวที่อยู่ในสตริงเป็นตัวพิมพ์ใหญ่ทั้งหมด

"michael jackson is the king of pop".upper()
'MICHAEL JACKSON IS THE KING OF POP'
# แปลงตัวอักษรทุกตัวที่อยู่ในตัวแปรสตริงเป็นตัวพิมพ์ใหญ่ทั้งหมด

text = "michael jackson is the king of pop"
print("text: ", text)
print("text.upper() :", text.upper())
text:  michael jackson is the king of pop
text.upper() : MICHAEL JACKSON IS THE KING OF POP

การรันเมธอด.upper()ไม่มีผลต่อตัวแปรสตริงเดิม

text
'michael jackson is the king of pop'

\(\qquad\) เมธอด lower() จะตรงกันข้ามกับเมธอด upper() ใช้แปลงตัวอักษรทุกตัวเป็นตัวพิมพ์เล็กทั้งหมด

ถ้าต้องการแปลงตัวอักษรตัวแรกของทุกคำในสตริงให้เป็นตัวพิมพ์ใหญ่ ใช้เมธอด title()

ถ้าเฉพาะตัวอักษรแรกตัวเดียวใช้ capitalize()

inp1 = 'kmitl is a wonderful university.'
inp2 = 'KMITL is a wonderful university.'
res1 = inp1.title() 
res2 = inp2.title() 
print(res1) 
print(res2) 
print(res1.capitalize())
Kmitl Is A Wonderful University.
Kmitl Is A Wonderful University.
Kmitl is a wonderful university.

\(\qquad\) เมธอด replace() เป็นเมธอดที่ใช้แทนที่ (Replace) สตริงย่อยบางส่วน (Secment) ของสตริง โดยอาร์กิวเมนต์แรกคือ สตริงที่เราต้องการเปลี่ยน, อาร์กิวเมนต์ที่สองคือ สตริงที่เราต้องการแทนที่ และส่งค่ากลับเป็น สตริงตัวใหม่ที่มีการเปลี่ยนแทนที่แล้ว

# แทนที่สตริงเดิม ("Michael Jackson is the best") เฉพาะส่วนที่เป็น  'Michael' ด้วย  'Janet'

best = "Michael Jackson is the best"
best.replace('Michael', 'Janet')
'Janet Jackson is the best'

เช่นเดียวกัน การรันเมธอด .replace() ไม่มีผลต่อตัวแปรสตริงเดิม

best
'Michael Jackson is the best'

แต่ถ้าต้องการให้ตัวแปรสตริงเดิม (ณ ที่นี้คือตัวแปร best) เก็บผลลัพธ์ของการรันเมธอด ก็สามารถทำได้โดยการกำหนดค่าใหม่ให้กับตัวแปร

# แทนที่สตริงเดิม ("Michael Jackson is the best") เฉพาะส่วนที่เป็น  'Michael' ด้วย  'Janet' แล้วเก็บค่าในตัวแปรเดิม

best = best.replace('Michael', 'Janet')
best
'Janet Jackson is the best'

\(\qquad\) เมธอด find() เป็นเมธอดที่ใช้ค้นหาสตริงย่อย โดยอาร์กิวเมนต์ที่ส่งคือ สตริงที่ต้องการค้นหา และเมธอดจะส่งค่ากลับเป็น เลขดัชนีลำดับแรกของสตริงที่ค้นเจอ

เราสามารถหาสตริง jack หรือ el ที่อยู่ในสตริง “Michael Jackson is the best” ได้โดยใช้เมธอด find() ดังนี้

# ค้นหาสตริงย่อยโดยใช้เมธอด find() โดยเอาต์พุตที่ได้เป็นดัชนีแรกที่พบสตริงย่อย

name = "Michael Jackson"
name.find('el')
5
# ค้นหาสตริงย่อยโดยใช้เมธอด find() 

name.find('Jack')
8

อย่างไรก็ตาม ในกรณีที่สตริงที่ต้องการค้นหามีหลายจุด เมธอด find() จะส่งค่ากลับเฉพาะ เลขดัชนีลำดับแรกของสตริงตัวแรกที่ค้นเจอเท่านั้น

# ผลการค้นหาสตริงย่อยที่มีหลายจุด โดยใช้เมธอด find() 

name.find('c')
2

แต่ถ้าค้นแล้วไม่พบ เอาต์พุตจะเป็นค่า ‘-1’ เสมอ ตัวอย่างเช่น สตริง ‘K’ ไม่มีอยู่ในตัวแปร name

# กรณีที่ไม่พบสตริงย่อย

name.find('K')
-1

Note

เมธอด find() VS. เมธอด index()

ในการค้นหาสตริงย่อย นอกจากเมธอด find() แล้ว ยังสามารถใช้เมธอด index() ค้นหาได้เช่นกัน โดยมีวิธีการใช้และผลลัพธ์เหมือนกับเมธอด find() ทุกประการ ยกเว้นในกรณีที่ค้นแล้วไม่พบ เมธอด index() จะเกิดข้อผิดพลาด ในขณะที่ เมธอด find() จะส่งค่ากลับเป็น -1

\(\qquad\) เมธอด split() เป็นเมธอดที่ใช้แบ่งสตริงด้วยตัวคั่น (Separator) ที่ระบุหรือสตริงใดๆ และส่งกลับเป็นข้อมูลชนิดลิส (list) โดยมีวิธีการใช้ ดังนี้

stringA.split(สตริงที่เป็นตัวคั่น)

รายละเอียดของข้อมูลชนิดลิสอยู่ใน List

artist1 = 'Maroon 5, John Legend, Ed Sheeran, Marshmello' 
artist1.split(',')
['Maroon 5', ' John Legend', ' Ed Sheeran', ' Marshmello']

ตาราง: เมธอดสตริงที่มักใช้บ่อย

เมธอด

คำอธิบาย

capitalize()

แปลงอักขระตัวแรกเป็นตัวพิมพ์ใหญ่

count()

ส่งคืนจำนวนครั้งที่พบค่าที่ระบุในสตริง

endswith()

ผลลัพธ์เป็นจริงถ้าสตริงตัวสุดท้ายลงด้วยค่าที่ระบุ

find()

ค้นหาสตริงสำหรับค่าที่ระบุและส่งคืนตำแหน่งที่พบ

index()

ค้นหาสตริงสำหรับค่าที่ระบุและส่งคืนตำแหน่งที่พบ

isalnum()

ผลลัพธ์เป็นจริงถ้าทุกตัวในสตริงเป็นตัวอักษรหรือตัวเลข (alphanumeric)

isalpha()

ผลลัพธ์เป็นจริงถ้าทุกตัวในสตริงเป็นตัวอักษร alphabet

isdecimal()

ผลลัพธ์เป็นจริงถ้าทุกตัวในสตริงเป็นเลขฐานสิบ

isdigit()

ผลลัพธ์เป็นจริงถ้าทุกตัวในสตริงเป็นตัวเลข

islower()

ผลลัพธ์เป็นจริงถ้าทุกตัวในสตริงเป็นตัวพิมพ์เล็ก (รวมตัวอักษรที่เป็นเศษส่วน…)

isnumeric()

ผลลัพธ์เป็นจริงถ้าทุกตัวในสตริงเป็นตัวเลข (รวมตัวอักษรที่เป็นเศษส่วน … เลขโรมัน)

isprintable()

ผลลัพธ์เป็นจริงถ้าทุกตัวในสตริงสามารถ print แสดงผลได้

isspace()

ผลลัพธ์เป็นจริงถ้าทุกตัวในสตริงเป็นช่องว่าง

isupper()

ผลลัพธ์เป็นจริงถ้าทุกตัวในสตริงเป็นตัวพิมพ์ใหญ่

join()

เชื่อมสมาชิกของ iterable ให้เป็นสตริงเดียวกันด้วยค่าที่ระบุ

lower()

แปลงสตริงเป็นตัวพิมพ์เล็ก

replace()

แทนที่ค่าเดิมในสตริงด้วยค่าที่ระบุให้เป็นสตริงใหม่

rfind()

หาสตริงสำหรับค่าที่ระบุและส่งกลับตำแหน่งสุดท้ายของตำแหน่งที่พบ

rindex()

หาสตริงสำหรับค่าที่ระบุและส่งคืนตำแหน่งสุดท้ายของตำแหน่งที่พบ

split()

แบ่งสตริงด้วยตัวคั่นที่ระบุและส่งกลับเป็น list

startwith()

ผลลัพธ์เป็นจริงถ้าสตริงตัวแรกสุดลงด้วยค่าที่ระบุ

swapcase()

สลับตัวพิมพ์เล็กตัวพิมพ์เล็กจะกลายเป็นตัวพิมพ์ใหญ่และในทางกลับกัน

title()

แปลงอักขระตัวแรกของแต่ละคำเป็นตัวพิมพ์ใหญ่

upper()

แปลงสตริงเป็นตัวพิมพ์ใหญ่

src: https://expert-programming-tutor.com/tutorial/article/LM61PYTHON_STRING_METHODS.php src: https://towardsdatascience.com/15-must-know-python-string-methods-64a4f554941b

หมายเหตุ: การเรียกเมธอดสตริงจะไม่เปลี่ยนสตริงเดิม (แต่จะส่งคืนเป็นสตริงใหม่หรือค่าใหม่เสมอ) เนื่องจากสตริงเป็นชนิดข้อมูลแบบ Immutable

[Exercise]#

1. จงตอบคำถาม 1.1~1.3

1.1) ตัวแปร a จะมีค่าเท่าไหร่ หลังรันโค้ดต่อไปนี้แล้ว?

a = "1"
# เขียนโค้ดด้านล่าง แล้วกด Shift+Enter

1.2) ตัวแปร b จะมีค่าเท่าไหร่ หลังรันโค้ดต่อไปนี้แล้ว?

b = "2"
# เขียนโค้ดด้านล่าง แล้วกด Shift+Enter

1.3) ตัวแปร c จะมีค่าเท่าไหร่ หลังรันโค้ดต่อไปนี้แล้ว?

c = a + b
# เขียนโค้ดด้านล่าง แล้วกด Shift+Enter

2. พิจารณาตัวแปร d

ลองเขียนโค้ด ให้แสดงเฉพาะอักระ 3 ตัวแรกออกหน้าจอโดยการตัดข้อความ (Slicing)

# เขียนโค้ดด้านล่าง แล้วกด Shift+Enter
d = "ABCDEFG"

3. พิจารณาตัวแปร e

ลองเขียนโค้ดเพิ่ม เพื่อให้พิมพ์ออกหน้าจอโดยกระโดดข้าม (Stride) ทุกๆ 2 ตัวอักษร

# เขียนโค้ดด้านล่าง แล้วกด Shift+Enter
e = 'clocrkr1e1c1t'

4. ลองเขียนโค้ดให้พิมพ์สัญลักษณ์ Backslash 3 (\\\) อันออกหน้าจอ

# เขียนโค้ดด้านล่าง แล้วกด Shift+Enter

5. ลองเขียนโค้ด เปลี่ยนตัวแปร f ให้เป็นตัวพิมพ์ใหญ่ทั้งหมด

# เขียนโค้ดด้านล่าง แล้วกด Shift+Enter
f = "are you sure?"

6. พิจารณาตัวแปร g

ลองเขียนโค้ด ให้ค้นหาดัชนีแรกสุดของสตริงย่อย Mary ในตัวแปร g

# เขียนโค้ดด้านล่าง แล้วกด Shift+Enter
g = "Mary had a little lamb Little lamb, little lamb Mary had a little lamb \
Its fleece was white as snow And everywhere that Mary went Mary went, Mary went \
Everywhere that Mary went The lamb was sure to go"

7. จากตัวแปร g ข้างต้น ลองแทนที่ ‘Mary’ ด้วย ‘Bob’

# เขียนโค้ดด้านล่าง แล้วกด Shift+Enter

8. จงสร้างฟังก์ชัน remove_punctuations โดยมีพารามิเตอร์ input_string เป็นตัวแปรเก็บข้อความภาษาอังกฤษใดๆ และคืนค่ากลับ (return) เป็นสตริงที่ลบเครื่องหมายวรรคตอนทั้งหมด (. (period), , (comma), : (colon), ; (semicolon), ! (exclamation mark), ? (question mark), " (quotation marks), ... (ellipsis)) ออกจากสตริง input_string แล้ว (มีเฉลยอยู่ท้ายหนังสือ)

โดยเขียนโค้ตเพิ่มลงในช่องว่างที่เตรียมไว้ระหว่าง ### BEGIN SOLUTION และ ### END SOLUTION

# เขียนโค้ดด้านล่าง แล้วกด Shift+Enter

def remove_punctuations(input_string):
    ### BEGIN SOLUTION
    
    return
    ### END SOLUTION

หลังจากเขียนโค้ดในเซลล์ด้านบนแล้ว ให้ดำเนินการรันเซลล์ด้านล่างเพื่อตรวจสอบว่าผลการรันเป็น True

# For test-run
# รันโค้ดต่อไปนี้ ถ้าได้ผลลัพธ์ 'True' 6 ครั้ง ถือว่าผ่าน

str1 = 'How do you like your eggs?'
str2 = '"Look out behind you!" she yelled.'
str3 = 'She went shopping and bought shoes, a dress, two shirts, and a pair of pants.'
str4 = 'She took four classes last semester: history, biology, arts, and economics.'
str5 = 'Last summer we traveled to London, England; Paris, France; Rome, Italy; and Athens, Greece.'
str6 = 'At midnight, she began to count down: "ten, nine, eight..." and then the ball dropped.'

print(remove_punctuations(str1)=='How do you like your eggs')
print(remove_punctuations(str2)=='Look out behind you she yelled')
print(remove_punctuations(str3)=='She went shopping and bought shoes a dress two shirts and a pair of pants')
print(remove_punctuations(str4)=='She took four classes last semester history biology arts and economics')
print(remove_punctuations(str5)=='Last summer we traveled to London England Paris France Rome Italy and Athens Greece')
print(remove_punctuations(str6)=='At midnight she began to count down ten nine eight and then the ball dropped')
False
False
False
False
False
False

9. จงสร้างฟังก์ชันสลับข้อความ colon_swap โดยกำหนดให้ input_str เป็นพารามิเตอร์ที่เก็บสตริงที่มีเครื่องหมายโคลอน (:) อยู่หนึ่งอักขระ และคืนค่ากลับ (return) เป็นสตริงที่สลับระหว่างข้อความที่อยู่ด้านซ้ายและด้านขวาของเครื่องหมายโคลอน เช่น

ถ้าเรียก colon_swap('ABC:XYZ') คืนค่ากลับเป็น 'XYZ:ABC'

ถ้าเรียก colon_swap('ปิด:เปิด') คืนค่ากลับเป็น 'เปิด:ปิด'

ถ้าเรียก colon_swap('"Yes":"No"') คืนค่ากลับเป็น '"No":"Yes"'

โดยเขียนโค้ตเพิ่มลงในช่องว่างที่เตรียมไว้ระหว่าง ### BEGIN SOLUTION และ ### END SOLUTION

# เขียนโค้ดด้านล่าง แล้วกด Shift+Enter

def colon_swap(input_str):
    ### BEGIN SOLUTION


    return
    ### END SOLUTION

หลังจากเขียนโค้ดในเซลล์ด้านบนแล้ว ให้ดำเนินการรันเซลล์ด้านล่างเพื่อตรวจสอบว่าผลการรันเป็น True

# For test-run
# รันโค้ดต่อไปนี้ ถ้าได้ผลลัพธ์ 'True' 3 ครั้ง ถือว่าผ่าน

print(colon_swap('ABC:XYZ')=='XYZ:ABC')
print(colon_swap('ปิด:เปิด')=='เปิด:ปิด')
print(colon_swap('"Yes":"No"')=='"No":"Yes"')
False
False
False

”The only way to learn a new programming language is by writing programs in it.” - Dennis Ritchie


Author#

S.C.

Change Log#

Date

Version

Change Description

08-08-2021

0.1

First edition

05-05-2022

0.2

Fix the typo, minor change


1

String ในภาษาไทยจะแปลว่า สายอักขระ หรือ สายอักษร

2

เมธอด (Method) เหมือนฟังก์ชัน แต่เป็นฟังก์ชันที่ถูกสร้างขึ้นภายในคลาส (Class) รายละเอียดอยู่ในบท “คลาส”