Chuyển tới nội dung chính

Chuỗi (String)

Giai đoạn 2 – Cấu Trúc Dữ Liệu & Hàm · Mục tiêu: Thành thạo xử lý chuỗi, cắt chuỗi, f-string và các phương thức chuỗi.


1. Tạo chuỗi

chuoi_1 = 'Xin chào'
chuoi_2 = "Hello Python"
chuoi_3 = """Chuỗi
nhiều dòng"""

# Ký tự đặc biệt
print("Dòng 1\nDòng 2") # Xuống dòng
print("Tab\tTab") # Tab
print("C:\\Users\\file") # Dấu \

# Raw string — bỏ qua escape
path = r"C:\Users\nguyen\Desktop"

2. Chỉ mục & Cắt chuỗi (Slicing)

Chuỗi: P y t h o n
Index: 0 1 2 3 4 5
Âm: -6 -5 -4 -3 -2 -1
s = "Python"
s[0] # 'P'
s[-1] # 'n'
s[1:4] # 'yth'
s[:3] # 'Pyt'
s[3:] # 'hon'
s[::-1] # 'nohtyP' (đảo ngược)
Cú phápÝ nghĩa
s[a:b]Từ a đến b-1
s[:b]Từ đầu đến b-1
s[a:]Từ a đến cuối
s[::n]Lấy mỗi n ký tự
s[::-1]Đảo ngược

3. Định dạng chuỗi

f-string (khuyến nghị)

ten = "Vũ"
tuoi = 20
diem = 8.567

print(f"Tên: {ten}, Tuổi: {tuoi}")
print(f"Năm sinh: {2025 - tuoi}")
print(f"Điểm: {diem:.2f}") # 8.57
print(f"{'Tên':>10}") # Căn phải
print(f"{'Tên':<10}") # Căn trái
print(f"{'Tên':^10}") # Căn giữa
print(f"{1000000:,}") # 1,000,000

.format()%

print("Tên: {}, Tuổi: {}".format("Vũ", 20))
print("Tên: %s, Điểm: %.2f" % ("Vũ", 8.5))

4. Các phương thức chuỗi

Chữ hoa / thường

s = "hello, PYTHON"
s.upper() # "HELLO, PYTHON"
s.lower() # "hello, python"
s.capitalize() # "Hello, python"
s.title() # "Hello, Python"

Tìm kiếm

s = "Học Python rất vui, Python rất hay"
s.find("Python") # 4
s.rfind("Python") # 18
s.count("Python") # 2
"Python" in s # True
s.startswith("Học") # True
s.endswith("hay") # True

Thay thế & Cắt bỏ

" Hello ".strip() # "Hello"
"Tôi thích Java".replace("Java", "Python") # "Tôi thích Python"

Tách & Nối

"Python là tuyệt vời".split() # ['Python', 'là', 'tuyệt', 'vời']
"Toán,Lý,Hóa".split(",") # ['Toán', 'Lý', 'Hóa']
" - ".join(["Toán", "Lý", "Hóa"]) # "Toán - Lý - Hóa"

Kiểm tra nội dung

Đây là các phương thức kiểm tra kiểu ký tự trong chuỗi (string) của Python, mỗi phương thức trả về giá trị True/False:

1. str.isdigit() — kiểm tra chữ số

"12345".isdigit() # True

Trả về True nếu tất cả ký tự trong chuỗi đều là chữ số (0-9), và chuỗi không rỗng.

"123".isdigit() # True
"12.3".isdigit() # False (dấu chấm không phải chữ số)
"".isdigit() # False (chuỗi rỗng)
"12a".isdigit() # False (có chữ cái)

2. str.isalpha() — kiểm tra chữ cái

"hello".isalpha() # True

Trả về True nếu tất cả ký tự đều là chữ cái (a-z, A-Z, kể cả chữ có dấu như "hồ") và chuỗi không rỗng.

"Hello".isalpha() # True
"hello123".isalpha() # False (có số)
"hello world".isalpha() # False (có dấu cách)

3. str.isalnum() — kiểm tra chữ cái hoặc chữ số

"abc123".isalnum() # True

Trả về True nếu tất cả ký tự đều là chữ cái hoặc chữ số (không có ký tự đặc biệt, dấu cách...).

"abc123".isalnum() # True
"abc 123".isalnum() # False (có dấu cách)
"abc_123".isalnum() # False (dấu gạch dưới không tính)

4. str.isspace() — kiểm tra khoảng trắng

" ".isspace() # True

Trả về True nếu tất cả ký tự đều là ký tự khoảng trắng (space, tab \t, xuống dòng \n,...) và chuỗi không rỗng.

" ".isspace() # True
"\t\n".isspace() # True
" a ".isspace() # False (có chữ 'a')
"".isspace() # False (chuỗi rỗng)

Lưu ý chung

  • Nếu chuỗi rỗng (""), tất cả các phương thức trên đều trả về False.
  • Các phương thức này thường dùng để kiểm tra dữ liệu đầu vào (validate input), ví dụ kiểm tra người dùng nhập đúng số điện thoại, mật khẩu hợp lệ, v.v.

Ví dụ thực tế

def kiem_tra_tuoi(chuoi):
if chuoi.isdigit():
print(f"Tuổi hợp lệ: {chuoi}")
else:
print("Vui lòng nhập số!")

kiem_tra_tuoi("25") # Tuổi hợp lệ: 25
kiem_tra_tuoi("25a") # Vui lòng nhập số!

5. Chuỗi bất biến (Immutable)

s = "Python"
# s[0] = "J" # TypeError!
s_moi = "J" + s[1:] # "Jython"

Bài tập thực hành

Trắc nghiệm

  1. "Python"[1:4] trả về gì?

    • A. "Pyt"
    • B. "yth"
    • C. "ytho"
    • D. "Pyth"
  2. "hello world".title() trả về gì?

    • A. "Hello World"
    • B. "HELLO WORLD"
    • C. "Hello world"
    • D. "hello World"

Thực hành


Bài 1: Nhập và in chuỗi

Đề bài: Viết chương trình nhập tên người dùng từ bàn phím, sau đó in ra lời chào theo định dạng: Xin chào, [Tên]! Chào mừng bạn đến với Python.

Bài 2: Độ dài chuỗi

Đề bài: Viết chương trình nhập một câu bất kỳ, sau đó in ra:

  • Số ký tự trong câu (kể cả khoảng trắng)
  • Số ký tự trong câu (không kể khoảng trắng)

Bài 3: Chuyển đổi chữ hoa / chữ thường

Đề bài: Cho chuỗi s = "heLLo WoRLd". Hãy in ra:

  1. Chuỗi chữ HOA hoàn toàn
  2. Chuỗi chữ thường hoàn toàn
  3. Chuỗi với chữ cái đầu mỗi từ viết hoa
  4. Chuỗi với chữ cái đầu câu viết hoa

Bài 4: Cắt chuỗi (Slicing)

Đề bài: Cho chuỗi s = "Python Programming". Hãy dùng slicing để lấy ra:

  1. 6 ký tự đầu tiên
  2. 11 ký tự cuối cùng
  3. Chuỗi đảo ngược

Bài 5: Kiểm tra chuỗi con

Đề bài: Viết chương trình nhập một câu và một từ khóa. Kiểm tra xem từ khóa có xuất hiện trong câu không và nếu có thì xuất hiện ở vị trí nào.

Bài 6: Tách và ghép chuỗi

Đề bài: Cho chuỗi s = "táo,cam,xoài,chuối,nho". Hãy:

  1. Tách chuỗi thành danh sách các loại quả
  2. In ra từng loại quả trên một dòng
  3. Ghép lại danh sách bằng dấu -

Bài 7: Xóa khoảng trắng thừa

Đề bài: Cho chuỗi s = " Xin chào các bạn! ". Hãy xóa khoảng trắng ở đầu và cuối chuỗi, sau đó in ra độ dài trước và sau khi xóa.

Bài 8: Đếm ký tự và từ

Đề bài: Viết chương trình đọc một đoạn văn bản, đếm và in ra:

  1. Tổng số ký tự
  2. Tổng số từ
  3. Số lần xuất hiện của chữ cái a (không phân biệt hoa thường)

Bài 9: Thay thế chuỗi

Đề bài: Viết chương trình nhận một câu, sau đó thay thế tất cả các khoảng trắng bằng dấu gạch dưới _ và in kết quả. Đây là kỹ thuật thường dùng để tạo tên file hoặc URL.

Bài 10: Kiểm tra Palindrome

Đề bài: Viết chương trình kiểm tra một từ hoặc câu có phải là palindrome không (đọc xuôi hay ngược đều giống nhau), bỏ qua khoảng trắng và không phân biệt hoa thường.

Ví dụ: "racecar", "A man a plan a canal Panama"

Tổng hợp các phương thức chuỗi đã học

Phương thứcChức năngVí dụ
len(s)Độ dài chuỗilen("abc")3
s.upper()Chữ HOA"hello".upper()"HELLO"
s.lower()Chữ thường"HELLO".lower()"hello"
s.title()Đầu từ viết hoa"hello world".title()"Hello World"
s.capitalize()Đầu câu viết hoa"hELLO".capitalize()"Hello"
s.strip()Xóa khoảng trắng 2 đầu" hi ".strip()"hi"
s.split(sep)Tách chuỗi"a,b".split(",")["a","b"]
sep.join(list)Ghép chuỗi"-".join(["a","b"])"a-b"
s.replace(a, b)Thay thế"ab".replace("a","x")"xb"
s.find(sub)Tìm vị trí"hello".find("ll")2
s.count(sub)Đếm số lần xuất hiện"aaa".count("a")3
s[i:j]Cắt chuỗi (slicing)"hello"[1:3]"el"
sub in sKiểm tra chuỗi con"ell" in "hello"True