🧠 Daily Python Problem: พลิกคำ (Reverse String) 🔄

โจทย์วันนี้คือการเขียนฟังก์ชัน reverse_string เพื่อคืนค่า String เดิมที่ถูกพลิกกลับด้านจากหลังไปหน้า!

🎯 โจทย์ (Problem):

เขียนฟังก์ชันที่รับ String และคืนค่า String ใหม่ที่ Reverse ตัวอักษรทั้งหมด เช่น "hello" กลายเป็น "olleh"

💡 2 วิธีแก้ปัญหาที่ต้องรู้ใน Python!

1. แบบพื้นฐาน: ใช้ Loop 🧱

• สร้างตัวแปร String ว่างเปล่า

• วน Loop อ่านตัวอักษรทีละตัวจาก String เดิม

• ต่อตัวอักษรใหม่ไว้ข้างหน้า String ว่างเปล่าเสมอ (reversed_text = char + reversed_text)

• วิธีนี้ช่วยให้เราเข้าใจหลักการทำงานทีละขั้นตอน

2. แบบ Pythonic: ใช้ Slicing (เทคนิคโปร!) ✨

• ไม่ต้องใช้ Loop เลย!

• ใช้เทคนิค Slicing สุดทรงพลัง: text[::-1]

• [::-1] หมายถึง: เริ่มต้น (start) ที่ไหนก็ได้ (ว่าง), จบ (stop) ที่ไหนก็ได้ (ว่าง), แต่ให้ก้าว (step) ถอยหลังทีละ 1 (-1)

• วิธีนี้สั้น กระชับ และเป็นที่นิยมในหมู่ Python Developer

คุณชอบวิธีไหนมากกว่ากัน? ลองเอาโค้ดทั้งสองไปรันดูนะคะ

#python #data #ai #dataanalyst #learnonlemon8

2025/10/30 แก้ไขเป็น

... อ่านเพิ่มเติมถ้าเพิ่งเริ่มทำโจทย์ Reverse String สิ่งที่หลายคนสะดุดคือ “ตัวป้อน (input) คืออะไร” และควรออกแบบฟังก์ชันให้รับค่าแบบไหนกันแน่ จากที่ลองสอน/ลองทำโจทย์แนวนี้บ่อย ๆ ฉันแนะนำให้คิดเป็น 2 แบบตามบริบท: (1) รับ input เป็นพารามิเตอร์ของฟังก์ชัน เช่น reverse_string(text) เหมาะกับการนำไปใช้ต่อ/เขียนเทสต์ (2) รับ input จากผู้ใช้ผ่าน input() เหมาะกับการทำโปรแกรมเล็ก ๆ ในคอนโซล ตัวอย่างแบบ “รับ input จากผู้ใช้” ที่ชัดเจน: - รับค่า: text = input("กรอกข้อความ: ") - ประมวลผล: reversed_text = text[::-1] - แสดงผล: print(reversed_text) ข้อดีคือเห็นภาพทันทีว่าตัวป้อน (input) ไหลเข้าระบบยังไง แต่ถ้าจะให้โค้ดดูเป็นมาตรฐานมากขึ้น แนะนำให้แยก logic ออกเป็นฟังก์ชัน แล้วค่อยเรียกจากส่วน input/output เช่น: - def reverse_string(text): return text[::-1] - text = input("กรอกข้อความ: ") - print(reverse_string(text)) อีกเรื่องที่คนเจอบ่อยคือ input ไม่ได้มีแค่ตัวอักษร เช่น “12345” หรือมีเว้นวรรค “Hello World” ซึ่งจริง ๆ แล้วใน Python ค่า input() จะได้เป็น “สตริง” เสมอ ดังนั้นเคสตัวเลขก็จะถูกมองเป็นตัวอักษร ‘1’, ‘2’, ‘3’… ทำให้พลิกแล้วได้ “54321” ตามคาด ส่วนข้อความที่มีเว้นวรรคก็พลิกได้ทั้งสตริงเหมือนกัน เช่น “ab cd” จะกลายเป็น “dc ba” ทิปเล็ก ๆ ที่ช่วยให้โค้ดใช้งานจริงได้ดีขึ้น: 1) จัดการช่องว่างหัวท้าย: ถ้าไม่อยากให้ enter/space เกิน ๆ มีผล ใช้ text = input(...).strip() 2) รองรับสตริงว่าง: ถ้าผู้ใช้กด enter เฉย ๆ ฟังก์ชันควรคืนค่า "" ได้ ไม่ควร error 3) ถ้าอยาก reverse “คำ” ไม่ใช่ “ตัวอักษร”: คนละโจทย์เลย ต้องใช้ split() แล้ว reverse list เช่น "I love Python" -> "Python love I" สุดท้าย ถ้าโจทย์ระบุชัดว่าให้ “รับ String และคืนค่า String ใหม่ที่ Reverse” วิธี slicing `[::-1]` คือทางลัดที่อ่านง่ายและเร็วมาก ส่วนแบบ loop เหมาะกับการฝึกตรรกะ (และช่วยให้เข้าใจเรื่องการต่อสตริง/การวนซ้ำ) ลองเริ่มจากแบบพื้นฐานก่อน แล้วค่อยสรุปด้วยวิธี Pythonic จะจำได้แม่นขึ้นค่ะ