Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python พื้นฐาน: ทำตัวอักษรแรกของสตริงเป็นตัวพิมพ์ใหญ่

มีหลายวิธีในการจัดการสตริงใน Python หากคุณต้องทำให้ตัวอักษรแรกของสตริงเป็นตัวพิมพ์ใหญ่ในโจทย์เขียนโค้ด (code challenge) คุณจะทำอย่างไร? บทความนี้พูดถึงหนึ่งในวิธีที่คุณสามารถจัดการสตริงเพื่อให้บรรลุวัตถุประสงค์นั้น

โจทย์ (The Prompt)

ได้รับสตริง Python ให้เขียนฟังก์ชันที่จะทำให้ตัวอักษรแรกเป็นตัวพิมพ์ใหญ่และคืนค่ากลับ

ถามคำถามเพื่อความชัดเจน (Ask Clarifying Questions)

โจทย์นี้อาจถูกให้ในระหว่างสัมภาษณ์งาน ในกรณีนั้น ให้ถามผู้สัมภาษณ์เพื่อให้ชัดเจนว่าเข้าใจปัญหาอย่างถูกต้อง

นี่คือคำถามบางส่วนที่คุณอาจคิดถึงเมื่อเราเข้าใกล้ปัญหา:

  • คำถาม: สตริงจะมีอยู่เสมอหรือไม่? ฉันจะไม่ต้องจัดการกับสตริงที่เป็น null หรือว่างเปล่าหรือไม่?
  • คำตอบ: สตริงไม่ได้มีอยู่เสมอ ดีที่ควรคำนึงถึงกรณีขอบ (edge cases) นี้!
  • คำถาม: ตัวอักษรแรก หมายถึงแค่ตัวอักษรแรกของสตริงเอง หรือตัวอักษรแรกของแต่ละคำในสตริง? คุณต้องการให้กำหนดอย่างไร?
  • คำตอบ: ตัวอักษรแรกของสตริงเอง
  • คำถาม: ตัวอักษรแรกจะเป็นตัวอักษรเสมอหรือไม่? ฉันต้องจัดการกับกรณีที่ตัวอักษรแรกในสตริงอาจเป็นตัวเลขหรือไม่?
  • คำตอบ: จับจุดได้ดี ตัวอักษรแรกอาจไม่ใช่ตัวอักษรแรกในสตริงเสมอไป ฉันต้องการให้คุณทำให้ตัวอักษรแรกของสตริงเป็นตัวพิมพ์ใหญ่

แนวทาง (The Approach)

มีวิธีแนวทางที่แตกต่างกันสองสามวิธีในการแก้ปัญหานี้ มีวิธีที่ถูกต้องมากกว่าหนึ่งวิธี หากคุณคิด出วิธีที่แตกต่างกัน ยอดเยี่ยม!

จัดการ Edge Cases ก่อน หากถูกถามให้จัดการ

ที่นี่ เราต้องจัดการกับสิ่งที่เกิดขึ้นเมื่อเรามีกรณีที่ไม่มีสตริง สตริงว่าง หรือตัวอักษรแรกไม่ใช่ตัวอักษร มาเขียนโค้ดส่วนนี้กัน:

def capitalize_str(str):
    if str == None: # if str is None
        return "NoneType is not a string"
    elif len(str) > 0: #if str exists
        # what type of char is first character? If number, move to next letter, if letter, capitalize it.
        return str #this is temporary -- we'll change this in next step.
    else: #if str is empty
        return "undefined string"

capitalize_str("hello")

ที่นี่ เราจัดการกับ edge cases ที่สตริงจะเป็น None หรือมีความยาว 0 เรายังไม่ได้ทำอะไรกับตรรกะการคืนค่าสตริงพร้อมตัวอักษรที่เป็นตัวพิมพ์ใหญ่ เราต้องแน่ใจว่ามันมีอยู่ก่อน

มาดูวิธีตรวจสอบว่าตัวอักษรแรกในสตริงเป็นตัวอักษรหรือไม่ หากเป็นตัวเลขหรืออักขระพิเศษ เราต้องไปยังตัวอักษรถัดไปจนกว่าจะพบตัวอักษรแรก หากเป็นตัวอักษร เราทำให้เป็นตัวพิมพ์ใหญ่และคืนค่าสตริงพร้อมตัวอักษรที่เป็นตัวพิมพ์ใหญ่ หากเราไปถึงท้ายสตริงและไม่มีตัวอักษร ให้บอกว่ามี

def capitalize_str(str):
    if str == None: # if str is None
        return "NoneType is not a string"
    elif len(str) > 0: #if str exists
        # what type of char is first character? If number, move to next letter, if letter, capitalize it.
        i = 0
        while i < len(str):
            if str[i].isalpha():
                return str[0:i] + str[i].upper() + str[i + 1:]
            else:
                i += 1
        return "string does not have letters"
    else: #if str is empty
        return "undefined string"

print(capitalize_str("christina"))

หนึ่งในเมธอดสตริงที่มีอยู่ใน Python คือ isalpha() มันตรวจสอบให้แน่ใจว่าอักขระเป็นส่วนหนึ่งของอักษรภาษาอังกฤษ หากไม่ใช่ มันจะไปยังตัวอักษรถัดไป เมื่อเราไปถึงตัวอักษรตัวแรก เราจะคืนค่าการต่อสตริงของด้านซ้ายของสตริง ตัวอักษรตัวพิมพ์ใหญ่ และส่วนที่เหลือของสตริง

มีฟังก์ชัน capitalize() ของ Python ที่ทำงานได้เพราะมันแปลงตัวอักษรแรกเป็นตัวพิมพ์ใหญ่ แต่ไม่สามารถจัดการ edge case ที่ตัวอักษรแรกไม่ใช่ตัวอักษรได้ นี่คือเหตุผลที่เราวนลูปด้วย while loop และหยุด while loop โดยเจตนาบนครั้งแรกที่พบตัวอักษร

สรุป

นี่เป็นเพียงหนึ่งในวิธีในการเอาชนะโจทย์เขียนโค้ดนี้! แน่นอนว่ามีอีกมากมายที่ดีไม่แพ้ (ถ้าไม่ใช่ดีกว่า) วิธีที่กล่าวถึงที่นี่ เป้าหมายคือการเรียนรู้ที่จะถามคำถามหากคุณไม่ชัดเจนกับโจทย์ และคิดถึง edge cases! หากคุณทำได้ คุณจะผ่านโจทย์เขียนโค้ดได้โดยไม่มีปัญหาโชคดี!