เรียนรู้การจัดการข้อความขั้นสูงใน Python
• เข้าใจวิธีการจัดการข้อความขั้นสูง
• รู้จัก String Methods สำคัญและการใช้งาน
• สามารถแยก รวม และตกแต่งข้อความได้
• ประยุกต์ใช้ในการประมวลผลข้อความจริง
แต่ละตัวอักษรในข้อความมีตำแหน่ง (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
แปลงเป็นตัวพิมพ์ใหญ่ทั้งหมด
text = "hello world" print(text.upper()) # HELLO WORLD
แปลงเป็นตัวพิมพ์เล็กทั้งหมด
text = "HELLO WORLD" print(text.lower()) # hello world
ตัวแรกของทุกคำเป็นตัวใหญ่
text = "hello world" print(text.title()) # Hello World
ตัวแรกของประโยคเป็นตัวใหญ่
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()
เสมอเพื่อทำความสะอาด
เช็คว่าข้อความนั้นมีอยู่หรือไม่
text = "Python เป็นภาษาที่ดี" print("Python" in text) # True
หาตำแหน่งแรกที่พบ (ไม่พบให้ -1)
text = "สวัสดีครับ" print(text.find("ดี")) # 4
เช็คว่าเริ่มต้นด้วยข้อความนั้นหรือไม่
email = "user@gmail.com" print(email.startswith("user")) # True
เช็คว่าลงท้ายด้วยข้อความนั้นหรือไม่
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 ครั้ง
สร้างโปรแกรมเซ็นเซอร์คำหยาบ - แทนที่คำที่ไม่เหมาะสมด้วย ***
# แยกด้วยช่องว่าง (default) sentence = "สวัสดี ผม ชื่อ สมชาย" words = sentence.split() print(words) # ['สวัสดี', 'ผม', 'ชื่อ', 'สมชาย'] # แยกด้วยเครื่องหมายจุลภาค fruits = "แอปเปิ้ล,กล้วย,ส้ม,มะม่วง" fruit_list = fruits.split(",") print(fruit_list) # ['แอปเปิ้ล', 'กล้วย', 'ส้ม', 'มะม่วง'] # จำกัดจำนวนการแยก data = "หนึ่ง-สอง-สาม-สี่" limited = data.split("-", 2) print(limited) # ['หนึ่ง', 'สอง', 'สาม-สี่']
# รวม 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 กัน - ใช้คู่กันบ่อยในการประมวลผลข้อความ
ตรวจสอบว่าเป็นตัวเลขทั้งหมด
print("123".isdigit()) # True print("12a".isdigit()) # False
ตรวจสอบว่าเป็นตัวอักษรทั้งหมด
print("Hello".isalpha()) # True print("Hello123".isalpha()) # False
ตรวจสอบว่าเป็นตัวอักษรหรือตัวเลข
print("Hello123".isalnum()) # True print("Hello-123".isalnum()) # False
ตรวจสอบว่าเป็นช่องว่างทั้งหมด
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")) # มีสัญลักษณ์พิเศษ
เป็นวิธีที่ทันสมัยและอ่านง่ายที่สุดในการรวมตัวแปรกับข้อความ
# วิธีเก่า - ใช้ + และ 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}")
โค้ดนี้จะนับว่าสระ (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" ในข้อความ
ให้เขียนโปรแกรมรับข้อความจากผู้ใช้ และแสดงผลข้อความนั้นในรูปแบบตัวพิมพ์ใหญ่ทั้งหมด
รับประโยคและคำที่ต้องการค้นหา จากนั้นแสดงผลว่า "พบ" หรือ "ไม่พบ"
รับประโยค, คำที่ต้องการแทนที่, และคำใหม่ จากนั้นแสดงผลลัพธ์หลังแทนที่
ให้เขียนโปรแกรมนับจำนวนคำทั้งหมดในประโยค (Hint: ใช้ split()
)