บทที่ 8

ข้อความ - String Methods

Text Processing

เรียนรู้การจัดการข้อความขั้นสูงใน Python

🎯 จุดประสงค์การเรียนรู้

• เข้าใจวิธีการจัดการข้อความขั้นสูง

• รู้จัก String Methods สำคัญและการใช้งาน

• สามารถแยก รวม และตกแต่งข้อความได้

• ประยุกต์ใช้ในการประมวลผลข้อความจริง

ทบทวน String พื้นฐาน

📝 String คือลำดับของอักขระ

แต่ละตัวอักษรในข้อความมีตำแหน่ง (index) ของตัวเอง

# การเข้าถึงอักขระในข้อความ
message = "HelloWorld"

# ดูอักขระที่ตำแหน่งต่างๆ
print(message[0])    # H
print(message[1])    # e
print(message[-1])   # d (ตัวสุดท้าย)

# ดูความยาวของข้อความ
print(len(message))  # 10

# การตัดข้อความ (Slicing)
print(message[0:3])  # Hel
print(message[3:])   # loWorld
💡 สำคัญ: String ใน Python เปลี่ยนแปลงไม่ได้ (Immutable) - การใช้ Methods จะสร้างข้อความใหม่

การเปลี่ยนตัวพิมพ์ใหญ่-เล็ก

upper()

ตัวพิมพ์ใหญ่ทั้งหมด

แปลงเป็นตัวพิมพ์ใหญ่ทั้งหมด

text = "hello world"
print(text.upper())
# HELLO WORLD
lower()

ตัวพิมพ์เล็กทั้งหมด

แปลงเป็นตัวพิมพ์เล็กทั้งหมด

text = "HELLO WORLD"
print(text.lower())
# hello world
title()

ตัวแรกของแต่ละคำใหญ่

ตัวแรกของทุกคำเป็นตัวใหญ่

text = "hello world"
print(text.title())
# Hello World
capitalize()

ตัวแรกของประโยคใหญ่

ตัวแรกของประโยคเป็นตัวใหญ่

text = "hello world"
print(text.capitalize())
# Hello world

🏃‍♂️ แบบฝึกหัด

ลองเปลี่ยนข้อความ "สวัสดี PYTHON เป็นภาษาโปรแกรม" ให้เป็นรูปแบบต่างๆ

การตัดช่องว่างและอักขระ

✂️ ตัดอักขระที่ไม่ต้องการออก

มีประโยชน์มากในการทำความสะอาดข้อมูลที่รับมาจากผู้ใช้

# ข้อความที่มีช่องว่างเกิน
messy_text = "   สวัสดีครับ   "
print(f"'{messy_text}'")            # '   สวัสดีครับ   '

# ตัดช่องว่างทั้งสองข้าง
clean_text = messy_text.strip()
print(f"'{clean_text}'")              # 'สวัสดีครับ'

# ตัดช่องว่างด้านซ้าย
left_clean = messy_text.lstrip()
print(f"'{left_clean}'")             # 'สวัสดีครับ   '

# ตัดช่องว่างด้านขวา
right_clean = messy_text.rstrip()
print(f"'{right_clean}'")            # '   สวัสดีครับ'
# ตัดอักขระอื่นๆ ที่กำหนด
phone = "xxx081-234-5678xxx"
clean_phone = phone.strip("x")
print(clean_phone)                  # 081-234-5678

# ตัดหลายอักขระพร้อมกัน
messy_data = "...###สำคัญ###..."
clean_data = messy_data.strip(".#")
print(clean_data)                    # สำคัญ
💡 เทคนิค: ใช้ .strip() กับข้อมูลที่รับจาก input() เสมอเพื่อทำความสะอาด

การค้นหาในข้อความ

in / not in

ตรวจสอบการมีอยู่

เช็คว่าข้อความนั้นมีอยู่หรือไม่

text = "Python เป็นภาษาที่ดี"
print("Python" in text)
# True
find()

หาตำแหน่ง

หาตำแหน่งแรกที่พบ (ไม่พบให้ -1)

text = "สวัสดีครับ"
print(text.find("ดี"))
# 4
startswith()

เริ่มต้นด้วย

เช็คว่าเริ่มต้นด้วยข้อความนั้นหรือไม่

email = "user@gmail.com"
print(email.startswith("user"))
# True
endswith()

ลงท้ายด้วย

เช็คว่าลงท้ายด้วยข้อความนั้นหรือไม่

filename = "photo.jpg"
print(filename.endswith(".jpg"))
# True
# ตัวอย่างการใช้งานรวม
message = "สวัสดีครับ ผม ชื่อ สมชาย ครับ"

# ค้นหาคำ "ครับ"
if "ครับ" in message:
    print("พบคำว่า 'ครับ' ในข้อความ")

# หาตำแหน่งของคำ "ชื่อ"
pos = message.find("ชื่อ")
print(f"พบคำ 'ชื่อ' ที่ตำแหน่ง: {pos}")  # 14

# ตรวจสอบการเริ่มต้นและลงท้าย
print(message.startswith("สวัสดี"))  # True
print(message.endswith("ค่ะ"))      # False

การแทนที่และนับ

🔄 แก้ไขและนับข้อความ

เปลี่ยนคำบางคำในข้อความ และนับจำนวนครั้งที่ปรากฏ

# การแทนที่ข้อความ
sentence = "ฉันชอบกิน ข้าวผัด ข้าวผัดอร่อยมาก"

# แทนที่คำ "ข้าวผัด" ด้วย "ผัดไทย"
new_sentence = sentence.replace("ข้าวผัด", "ผัดไทย")
print(new_sentence)
# ฉันชอบกิน ผัดไทย ผัดไทยอร่อยมาก

# แทนที่เฉพาะครั้งแรก (ระบุจำนวน)
first_only = sentence.replace("ข้าวผัด", "ผัดไทย", 1)
print(first_only)
# ฉันชอบกิน ผัดไทย ข้าวผัดอร่อยมาก
# การนับจำนวน
story = "แมว แมว วิ่งไล่ หนู หนู กลัวแมวมาก"

# นับจำนวนครั้งที่พบคำ "แมว"
cat_count = story.count("แมว")
print(f"พบคำ 'แมว' จำนวน: {cat_count} ครั้ง")  # 3 ครั้ง

# นับจำนวนครั้งที่พบคำ "หนู"
mouse_count = story.count("หนู")
print(f"พบคำ 'หนู' จำนวน: {mouse_count} ครั้ง")  # 2 ครั้ง

🏃‍♂️ แบบฝึกหัด

สร้างโปรแกรมเซ็นเซอร์คำหยาบ - แทนที่คำที่ไม่เหมาะสมด้วย ***

การแยกและรวมข้อความ

📂 split() - แยกข้อความ

# แยกด้วยช่องว่าง (default)
sentence = "สวัสดี ผม ชื่อ สมชาย"
words = sentence.split()
print(words)
# ['สวัสดี', 'ผม', 'ชื่อ', 'สมชาย']

# แยกด้วยเครื่องหมายจุลภาค
fruits = "แอปเปิ้ล,กล้วย,ส้ม,มะม่วง"
fruit_list = fruits.split(",")
print(fruit_list)
# ['แอปเปิ้ล', 'กล้วย', 'ส้ม', 'มะม่วง']

# จำกัดจำนวนการแยก
data = "หนึ่ง-สอง-สาม-สี่"
limited = data.split("-", 2)
print(limited)
# ['หนึ่ง', 'สอง', 'สาม-สี่']

🔗 join() - รวมข้อความ

# รวม list เป็นข้อความ
words = ["สวัสดี", "ผม", "ชื่อ", "สมชาย"]

# รวมด้วยช่องว่าง
sentence = " ".join(words)
print(sentence)
# สวัสดี ผม ชื่อ สมชาย

# รวมด้วยเครื่องหมายจุลภาค
fruits = ["แอปเปิ้ล", "กล้วย", "ส้ม"]
fruit_string = ", ".join(fruits)
print(fruit_string)
# แอปเปิ้ล, กล้วย, ส้ม

# รวมแบบไม่มีตัวคั่น
letters = ["P", "Y", "T", "H", "O", "N"]
word = "".join(letters)
print(word)  # PYTHON
💡 เทคนิค: split() กับ join() เป็น opposite กัน - ใช้คู่กันบ่อยในการประมวลผลข้อความ

การตรวจสอบประเภทข้อความ

isdigit()

เป็นตัวเลขหรือไม่

ตรวจสอบว่าเป็นตัวเลขทั้งหมด

print("123".isdigit())  # True
print("12a".isdigit())  # False
isalpha()

เป็นตัวอักษรหรือไม่

ตรวจสอบว่าเป็นตัวอักษรทั้งหมด

print("Hello".isalpha())  # True
print("Hello123".isalpha())  # False
isalnum()

เป็นตัวอักษรหรือตัวเลข

ตรวจสอบว่าเป็นตัวอักษรหรือตัวเลข

print("Hello123".isalnum())  # True
print("Hello-123".isalnum())  # False
isspace()

เป็นช่องว่างหรือไม่

ตรวจสอบว่าเป็นช่องว่างทั้งหมด

print("   ".isspace())  # True
print(" a ".isspace())  # False
# ตัวอย่างการใช้งานตรวจสอบข้อมูล
def validate_input(data):
    """ตรวจสอบข้อมูลที่ป้อนเข้ามา"""
    if data.isspace() or data == "":
        return "ข้อมูลว่าง"
    elif data.isdigit():
        return "ตัวเลข"
    elif data.isalpha():
        return "ตัวอักษร"
    elif data.isalnum():
        return "ตัวอักษรและตัวเลข"
    else:
        return "มีสัญลักษณ์พิเศษ"

# ทดสอบ
print(validate_input("123"))        # ตัวเลข
print(validate_input("Hello"))      # ตัวอักษร
print(validate_input("Hello123"))   # ตัวอักษรและตัวเลข
print(validate_input("Hello@123"))  # มีสัญลักษณ์พิเศษ

การจัดรูปแบบข้อความ - F-Strings

🎨 F-String = วิธีใส่ตัวแปรในข้อความแบบสวยงาม

เป็นวิธีที่ทันสมัยและอ่านง่ายที่สุดในการรวมตัวแปรกับข้อความ

# วิธีเก่า - ใช้ + และ str()
name = "สมชาย"
age = 16
old_way = "ชื่อ: " + name + " อายุ: " + str(age) + " ปี"
print(old_way)  # ชื่อ: สมชาย อายุ: 16 ปี

# วิธีใหม่ - ใช้ F-String (แนะนำ!)
new_way = f"ชื่อ: {name} อายุ: {age} ปี"
print(new_way)  # ชื่อ: สมชาย อายุ: 16 ปี
# F-String ขั้นสูง
price = 1234.5678
product = "โทรศัพท์"

# จัดรูปแบบทศนิยม
print(f"ราคา {product}: {price:.2f} บาท")
# ราคา โทรศัพท์: 1234.57 บาท

# คำนวณภายใน F-String
width = 10
height = 5
print(f"พื้นที่สี่เหลี่ยม: {width * height} ตร.ม.")
# พื้นที่สี่เหลี่ยม: 50 ตร.ม.

# เรียกใช้ methods ภายใน F-String
message = "hello world"
print(f"ข้อความ: {message.upper()}")
# ข้อความ: HELLO WORLD

การจัดรูปแบบข้อความขั้นสูง

🎯 จัดตำแหน่งข้อความ

# จัดให้อยู่กลาง
text = "Python"
print(f"{text:^20}|")
#        Python       |

# จัดให้อยู่ซ้าย
print(f"{text:<20}|")
# Python              |

# จัดให้อยู่ขวา
print(f"{text:>20}|")
#               Python|

🔢 จัดรูปแบบตัวเลข

# ทศนิยม 2 ตำแหน่ง
num = 3.14159
print(f"{num:.2f}")  # 3.14

# เปอร์เซ็นต์
rate = 0.856
print(f"{rate:.1%}")  # 85.6%

# เลขคั่นด้วยจุลภาค
big_num = 1234567
print(f"{big_num:,}")  # 1,234,567
# ตัวอย่างการสร้างตารางสวยๆ
students = [
    {"name": "time", "math": 85, "english": 92},
    {"name": "stamp", "math": 78, "english": 88},
    {"name": "coding", "math": 95, "english": 84}
]

# พิมพ์หัวตาราง
print(f"{'name':<10} {'Math':>6} {'Eng':>8} {'Avg':>8}")
print("-" * 35)

# พิมพ์ข้อมูลนักเรียน
for student in students:
    avg = (student["math"] + student["english"]) / 2
    print(f"{student['name']:<10} {student['math']:>6} {student['english']:>8} {avg:>8.1f}")

Example: String Analyzer

📝 ตัวอย่าง: โปรแกรมนับสระในประโยค

โค้ดนี้จะนับว่าสระ (a, e, i, o, u) ปรากฏกี่ครั้งในข้อความ

sentence = input("Enter a sentence: ")
count = 0
# วนลูปทีละตัวอักษร
for char in sentence:
    # เช็คว่าสระหรือไม่
    if char.lower() in "aeiou":
        count += 1
print(f"Vowel count: {count}")

โจทย์:

ลองเปลี่ยนโค้ดนี้ให้นับจำนวนตัวอักษร "a" ในข้อความ

🔖 แบบฝึกหัดท้ายบท

1. แปลงข้อความเป็นตัวพิมพ์ใหญ่

ให้เขียนโปรแกรมรับข้อความจากผู้ใช้ และแสดงผลข้อความนั้นในรูปแบบตัวพิมพ์ใหญ่ทั้งหมด

2. ค้นหาคำในประโยค

รับประโยคและคำที่ต้องการค้นหา จากนั้นแสดงผลว่า "พบ" หรือ "ไม่พบ"

3. แทนที่คำในประโยค

รับประโยค, คำที่ต้องการแทนที่, และคำใหม่ จากนั้นแสดงผลลัพธ์หลังแทนที่

4. (ท้าทาย) นับจำนวนคำในประโยค

ให้เขียนโปรแกรมนับจำนวนคำทั้งหมดในประโยค (Hint: ใช้ split())

ถ้าทำได้ทั้งหมดนี้ แปลว่าเข้าใจการจัดการข้อความใน Python แล้ว!