Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cơ bản Python: Viết hoa chữ cái đầu tiên của chuỗi

Có nhiều phương pháp thao tác chuỗi trong Python. Nếu bạn phải viết hoa chữ cái đầu tiên của một chuỗi trong Python trong một thách thức code, bạn sẽ làm như thế nào? Bài viết này nói về một cách bạn có thể thao tác chuỗi để đạt mục tiêu đó.

Đề bài

Cho một chuỗi Python, hãy viết một hàm sẽ viết hoa chữ cái đầu tiên và trả về nó.

Hỏi làm rõ câu hỏi

Đề bài này có thể được đưa ra trong phỏng vấn việc làm. Trong trường hợp đó, hãy hỏi người phỏng vấn để chắc chắn bạn hiểu đúng vấn đề.

Dưới đây là một số câu hỏi bạn có thể nghĩ khi tiếp cận bài toán:

  • Câu hỏi: Chuỗi có luôn tồn tại không? Tôi có bao giờ phải xử lý chuỗi null hoặc rỗng không?
  • Trả lời: Chuỗi không luôn có mặt. Tốt nhất là lưu ý các trường hợp biên (edge cases)!
  • Q: Chữ cái đầu tiên. Có nghĩa là chỉ chữ cái đầu tiên của chính chuỗi đó, hay chữ cái đầu tiên của mỗi từ trong chuỗi? Bạn muốn tôi định nghĩa như thế nào?
  • A: Chữ cái đầu tiên của chính chuỗi đó.
  • Q: Ký tự đầu tiên có luôn là chữ cái không? Tôi có phải xử lý trường hợp ký tự đầu tiên trong chuỗi có thể là số không?
  • A: Đoán đúng. Chữ cái đầu tiên có thể không phải là ký tự đầu tiên trong chuỗi. Tôi muốn bạn viết hoa chữ cái đầu tiên của chuỗi.

Cách tiếp cận

Có vài cách khác nhau để giải quyết bài toán này. Có nhiều hơn một cách đúng. Nếu bạn nghĩ ra cách khác, tuyệt vời!

Xử lý các trường hợp biên trước nếu được yêu cầu.

Ở đây, chúng ta cần xử lý những trường hợp: không có chuỗi, chuỗi rỗng, hoặc ký tự đầu tiên không phải chữ cái. Hãy viết mã cho phần đó ngay:

def capitalize_str(str):
    if str == None: # nếu str là None
        return "NoneType is not a string"
    elif len(str) > 0: # nếu str tồn tại
        # ký tự đầu tiên là loại gì? Nếu là số, chuyển sang chữ cái tiếp theo, nếu là chữ, viết hoa nó.
        return str # tạm thời -- sẽ thay đổi ở bước tiếp theo.
    else: # nếu str rỗng
        return "undefined string"

capitalize_str("hello")

Ở đây, chúng ta đã xử lý các trường hợp biên khi chuỗi là None hoặc độ dài 0. Chúng ta chưa làm gì với logic trả về chuỗi có chữ cái viết hoa. Chúng ta cần đảm bảo nó tồn tại trước.

Hãy xem cách kiểm tra xem ký tự đầu tiên trong chuỗi có phải là chữ cái không. Nếu là số hoặc ký tự đặc biệt, chúng ta cần chuyển sang ký tự tiếp theo cho đến khi tìm thấy chữ cái đầu tiên. Nếu là chữ cái, viết hoa nó và trả về chuỗi với chữ cái đã viết hoa. Nếu duyệt đến cuối chuỗi mà không có chữ cái, hãy báo cho biết.

def capitalize_str(str):
    if str == None: # nếu str là None
        return "NoneType is not a string"
    elif len(str) > 0: # nếu str tồn tại
        # ký tự đầu tiên là loại gì? Nếu là số, chuyển sang chữ cái tiếp theo, nếu là chữ, viết hoa nó.
        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: # nếu str rỗng
        return "undefined string"

print(capitalize_str("christina"))

Một trong các phương thức chuỗi tồn tại trong Python là isalpha(). Nó kiểm tra chắc chắn rằng một ký tự là một phần của bảng chữ cái. Nếu không, nó chuyển sang ký tự tiếp theo. Khi chúng ta tìm thấy ký tự chữ cái đầu tiên, chúng ta sẽ trả về một chuỗi nối của phía bên trái chuỗi, chữ cái viết hoa, và phần còn lại của chuỗi.

Có hàm capitalize() của Python hoạt động vì nó chuyển ký tự đầu tiên thành chữ hoa, nhưng nó không thể xử lý trường hợp biên khi ký tự đầu tiên không phải là chữ cái. Đây là lý do chúng ta lặp qua bằng vòng lặp while và thoát khỏi vòng lặp while một cách có chủ đích ở lần đầu tiên tìm thấy chữ cái.

Kết luận

Đây chỉ là một trong nhiều cách để giải quyết thách thức code này! Chắc chắn còn nhiều cách khác cũng tốt (thậm chí tốt hơn) so với cách được nhắc đến ở đây. Mục tiêu là học cách hỏi câu hỏi nếu bạn không rõ đề bài và suy nghĩ về các trường hợp biên! Nếu bạn làm được điều đó, bạn sẽ vượt qua các thách thức code hầu như không gặp vấn đề gì. Chúc may mắn!