Chuỗi ký tự (String)
Chuỗi (string) là một trong những kiểu dữ liệu quan trọng nhất trong Python. Chuỗi được sử dụng để lưu trữ và xử lý văn bản.
1. Tạo chuỗi (Creating Strings)
Phần tiêu đề “1. Tạo chuỗi (Creating Strings)”Sử dụng dấu nháy đơn hoặc nháy kép
Phần tiêu đề “Sử dụng dấu nháy đơn hoặc nháy kép”# Dấu nháy đơnsingle_quote = 'Hello Python'print(single_quote) # Hello Python
# Dấu nháy képdouble_quote = "Hello Python"print(double_quote) # Hello Python
# Cả hai đều giống nhauprint(type(single_quote)) # <class 'str'>print(type(double_quote)) # <class 'str'>Khi nào dùng dấu nháy đơn, khi nào dùng dấu nháy kép?
Phần tiêu đề “Khi nào dùng dấu nháy đơn, khi nào dùng dấu nháy kép?”# Dùng dấu nháy đơn khi chuỗi chứa dấu nháy képmessage1 = 'He said "Hello"'print(message1) # He said "Hello"
# Dùng dấu nháy kép khi chuỗi chứa dấu nháy đơn (dấu lược)message2 = "It's a beautiful day"print(message2) # It's a beautiful day
# Hoặc dùng ký tự thoát (escape character) \message3 = 'It\'s a beautiful day'print(message3) # It's a beautiful dayChuỗi nhiều dòng (Multi-line Strings)
Phần tiêu đề “Chuỗi nhiều dòng (Multi-line Strings)”# Sử dụng ba dấu nháy đơn hoặc képmulti_line1 = '''Đây là chuỗicó nhiều dòngtrong Python'''print(multi_line1)
multi_line2 = """Dòng 1Dòng 2Dòng 3"""print(multi_line2)Chuỗi rỗng (Empty String)
Phần tiêu đề “Chuỗi rỗng (Empty String)”empty_str1 = ''empty_str2 = ""empty_str3 = str()
print(len(empty_str1)) # 0print(len(empty_str2)) # 0print(len(empty_str3)) # 02. Ký tự thoát (Escape Characters)
Phần tiêu đề “2. Ký tự thoát (Escape Characters)”Ký tự thoát bắt đầu bằng dấu gạch chéo ngược \
# \n - Xuống dòng (newline)print("Dòng 1\nDòng 2")# Dòng 1# Dòng 2
# \t - Tab ngangprint("Tên\tTuổi\tLớp")print("An\t20\t10A")# Tên Tuổi Lớp# An 20 10A
# \\ - Dấu gạch chéo ngượcprint("Đường dẫn: C:\\Users\\Documents")# Đường dẫn: C:\Users\Documents
# \' - Dấu nháy đơnprint('It\'s sunny') # It's sunny
# \" - Dấu nháy képprint("He said \"Hi\"") # He said "Hi"
# \r - Carriage returnprint("Python\rJava") # Java (ghi đè lên Python)
# \b - Backspaceprint("Hello\b World") # Hell WorldRaw String (Chuỗi thô)
Phần tiêu đề “Raw String (Chuỗi thô)”Dùng r hoặc R trước chuỗi để bỏ qua ký tự thoát:
# Không dùng raw stringpath1 = "C:\Users\name\Documents"print(path1) # C:\Usersame\Documents (sai do \n, \D)
# Dùng raw stringpath2 = r"C:\Users\name\Documents"print(path2) # C:\Users\name\Documents (đúng)
# Hữu ích cho regular expressionspattern = r"\d+\.\d+" # Pattern để tìm số thập phânprint(pattern) # \d+\.\d+3. Truy cập ký tự trong chuỗi (Indexing)
Phần tiêu đề “3. Truy cập ký tự trong chuỗi (Indexing)”Chuỗi trong Python được đánh chỉ số (index) bắt đầu từ 0.
text = "Python"
# Chỉ số dương (từ trái sang phải)print(text[0]) # P (ký tự đầu tiên)print(text[1]) # yprint(text[2]) # tprint(text[5]) # n (ký tự cuối cùng)
# Chỉ số âm (từ phải sang trái)print(text[-1]) # n (ký tự cuối)print(text[-2]) # oprint(text[-6]) # P (ký tự đầu)Sơ đồ chỉ số
Phần tiêu đề “Sơ đồ chỉ số” P y t h o n 0 1 2 3 4 5 (chỉ số dương)-6 -5 -4 -3 -2 -1 (chỉ số âm)4. Slicing (Cắt chuỗi)
Phần tiêu đề “4. Slicing (Cắt chuỗi)”Cú pháp: string[start:stop:step]
text = "Python Programming"
# Lấy từ vị trí start đến stop-1print(text[0:6]) # Pythonprint(text[7:18]) # Programming
# Bỏ qua start (mặc định từ đầu)print(text[:6]) # Python
# Bỏ qua stop (mặc định đến cuối)print(text[7:]) # Programming
# Lấy toàn bộ chuỗiprint(text[:]) # Python Programming
# Sử dụng chỉ số âmprint(text[-11:]) # Programmingprint(text[:-12]) # Python
# Sử dụng step (bước nhảy)print(text[0:6:1]) # Python (mỗi ký tự)print(text[0:6:2]) # Pto (ký tự cách 1)print(text[::2]) # Pto rgamn (toàn bộ, cách 1)
# Đảo ngược chuỗiprint(text[::-1]) # gnimmargorP nohtyP5. Độ dài chuỗi (String Length)
Phần tiêu đề “5. Độ dài chuỗi (String Length)”text = "Hello Python"
# Hàm len() trả về số ký tựlength = len(text)print(length) # 12
# Ký tự cuối cùnglast_char = text[len(text) - 1]print(last_char) # n
# Hoặc dùng chỉ số âmlast_char = text[-1]print(last_char) # n6. Nối chuỗi (Concatenation)
Phần tiêu đề “6. Nối chuỗi (Concatenation)”Sử dụng toán tử +
Phần tiêu đề “Sử dụng toán tử +”first_name = "Nguyen"last_name = "Van A"
# Nối chuỗifull_name = first_name + " " + last_nameprint(full_name) # Nguyen Van A
# Nối nhiều chuỗigreeting = "Hello" + ", " + "World" + "!"print(greeting) # Hello, World!Sử dụng toán tử *
Phần tiêu đề “Sử dụng toán tử *”# Lặp lại chuỗirepeat = "Ha" * 3print(repeat) # HaHaHa
line = "-" * 20print(line) # --------------------
# Tạo dòng phân cáchseparator = "=" * 50print(separator)7. Kiểm tra chuỗi con (Substring)
Phần tiêu đề “7. Kiểm tra chuỗi con (Substring)”Toán tử in
Phần tiêu đề “Toán tử in”text = "Python Programming"
# Kiểm tra chuỗi con có tồn tại khôngprint("Python" in text) # Trueprint("Java" in text) # Falseprint("python" in text) # False (phân biệt hoa thường)
# Toán tử not inprint("Java" not in text) # Trueprint("Python" not in text) # FalseCác phương thức tìm kiếm
Phần tiêu đề “Các phương thức tìm kiếm”text = "Python Programming"
# find() - Tìm vị trí đầu tiên, trả về -1 nếu không tìm thấypos1 = text.find("Pro")print(pos1) # 7
pos2 = text.find("Java")print(pos2) # -1
# index() - Giống find() nhưng báo lỗi nếu không tìm thấypos3 = text.index("Pro")print(pos3) # 7
# pos4 = text.index("Java") # ValueError!
# count() - Đếm số lần xuất hiệncount = text.count("o")print(count) # 28. So sánh chuỗi
Phần tiêu đề “8. So sánh chuỗi”str1 = "apple"str2 = "banana"str3 = "apple"
# So sánh bằngprint(str1 == str3) # Trueprint(str1 == str2) # False
# So sánh không bằngprint(str1 != str2) # True
# So sánh thứ tự từ điển (alphabetical)print(str1 < str2) # True (a < b)print(str1 > str2) # False
# Phân biệt hoa thườngprint("Apple" == "apple") # Falseprint("Apple".lower() == "apple".lower()) # True9. Các phương thức cơ bản của chuỗi
Phần tiêu đề “9. Các phương thức cơ bản của chuỗi”Chuyển đổi chữ hoa/thường
Phần tiêu đề “Chuyển đổi chữ hoa/thường”text = "Python Programming"
# Chữ hoaprint(text.upper()) # PYTHON PROGRAMMING
# Chữ thườngprint(text.lower()) # python programming
# Viết hoa chữ cái đầuprint(text.capitalize()) # Python programming
# Viết hoa chữ cái đầu mỗi từprint(text.title()) # Python Programming
# Đảo ngược hoa/thườngprint(text.swapcase()) # pYTHON pROGRAMMINGLoại bỏ khoảng trắng
Phần tiêu đề “Loại bỏ khoảng trắng”text = " Hello Python "
# Loại bỏ khoảng trắng 2 đầuprint(text.strip()) # "Hello Python"
# Loại bỏ khoảng trắng bên tráiprint(text.lstrip()) # "Hello Python "
# Loại bỏ khoảng trắng bên phảiprint(text.rstrip()) # " Hello Python"
# Loại bỏ ký tự cụ thểurl = "https://example.com/"print(url.rstrip('/')) # https://example.comThay thế (Replace)
Phần tiêu đề “Thay thế (Replace)”text = "Hello World"
# Thay thế chuỗi connew_text = text.replace("World", "Python")print(new_text) # Hello Python
# Thay thế nhiều lầntext2 = "one one one"new_text2 = text2.replace("one", "two")print(new_text2) # two two two
# Giới hạn số lần thay thếtext3 = "one one one"new_text3 = text3.replace("one", "two", 2)print(new_text3) # two two oneTách và nối chuỗi
Phần tiêu đề “Tách và nối chuỗi”# split() - Tách chuỗi thành listsentence = "Python is awesome"words = sentence.split() # Tách theo khoảng trắngprint(words) # ['Python', 'is', 'awesome']
csv_data = "An,20,Ha Noi"data = csv_data.split(",") # Tách theo dấu phẩyprint(data) # ['An', '20', 'Ha Noi']
# join() - Nối list thành chuỗiwords = ['Python', 'is', 'awesome']sentence = " ".join(words)print(sentence) # Python is awesome
items = ['apple', 'banana', 'orange']result = ", ".join(items)print(result) # apple, banana, orange10. Kiểm tra kiểu ký tự
Phần tiêu đề “10. Kiểm tra kiểu ký tự”# isalpha() - Chỉ chứa chữ cáiprint("Python".isalpha()) # Trueprint("Python3".isalpha()) # False
# isdigit() - Chỉ chứa sốprint("123".isdigit()) # Trueprint("12.3".isdigit()) # False
# isalnum() - Chỉ chứa chữ cái và sốprint("Python3".isalnum()) # Trueprint("Python 3".isalnum()) # False (có khoảng trắng)
# isspace() - Chỉ chứa khoảng trắngprint(" ".isspace()) # Trueprint(" a ".isspace()) # False
# islower() - Tất cả chữ thườngprint("python".islower()) # Trueprint("Python".islower()) # False
# isupper() - Tất cả chữ hoaprint("PYTHON".isupper()) # Trueprint("Python".isupper()) # False11. F-string (Formatted String Literals)
Phần tiêu đề “11. F-string (Formatted String Literals)”Python 3.6+ hỗ trợ f-string để format chuỗi dễ dàng:
name = "An"age = 20city = "Ha Noi"
# F-string cơ bảnmessage = f"Tên: {name}, Tuổi: {age}, Thành phố: {city}"print(message) # Tên: An, Tuổi: 20, Thành phố: Ha Noi
# Biểu thức trong f-stringx = 10y = 5print(f"{x} + {y} = {x + y}") # 10 + 5 = 15
# Format sốprice = 1234567.89print(f"Giá: {price:,.2f} VND") # Giá: 1,234,567.89 VND
# Căn chỉnhprint(f"{'Left':<10}|") # Left |print(f"{'Center':^10}|") # Center |print(f"{'Right':>10}|") # Right|12. Chuỗi là bất biến (Immutable)
Phần tiêu đề “12. Chuỗi là bất biến (Immutable)”Chuỗi trong Python không thể thay đổi sau khi tạo:
text = "Python"
# Không thể thay đổi ký tự# text[0] = 'J' # TypeError!
# Phải tạo chuỗi mớinew_text = 'J' + text[1:]print(new_text) # Jython
# Hoặc dùng replace()text = text.replace('P', 'J')print(text) # Jython13. Bài tập thực hành
Phần tiêu đề “13. Bài tập thực hành”Bài 1: Đảo ngược tên
Phần tiêu đề “Bài 1: Đảo ngược tên”name = input("Nhập tên của bạn: ")reversed_name = name[::-1]print(f"Tên đảo ngược: {reversed_name}")Bài 2: Đếm nguyên âm
Phần tiêu đề “Bài 2: Đếm nguyên âm”text = input("Nhập chuỗi: ")vowels = "aeiouAEIOU"count = sum(1 for char in text if char in vowels)print(f"Số nguyên âm: {count}")Bài 3: Kiểm tra palindrome
Phần tiêu đề “Bài 3: Kiểm tra palindrome”text = input("Nhập chuỗi: ")cleaned = text.replace(" ", "").lower()if cleaned == cleaned[::-1]: print(f"'{text}' là palindrome")else: print(f"'{text}' không phải palindrome")Bài 4: Ẩn số điện thoại
Phần tiêu đề “Bài 4: Ẩn số điện thoại”phone = "0123456789"hidden = phone[:3] + "*" * (len(phone) - 6) + phone[-3:]print(hidden) # 012****789Tổng kết
Phần tiêu đề “Tổng kết”- Chuỗi được tạo bằng dấu nháy đơn
''hoặc nháy kép"" - Chuỗi nhiều dòng dùng ba dấu nháy
'''hoặc""" - Indexing:
string[index], bắt đầu từ 0 - Slicing:
string[start:stop:step] - Chuỗi là immutable (không thể thay đổi)
- Dùng
+để nối chuỗi,*để lặp lại - Nhiều phương thức hữu ích:
upper(),lower(),strip(),split(),replace(), v.v. - F-string (
f"...") là cách format chuỗi hiện đại và dễ đọc
Để tìm hiểu chi tiết hơn về các phương thức và cách format chuỗi, hãy xem các bài:
- Các phương thức của String
- Định dạng chuỗi (String Formatting)