Giới thiệu: Chuỗi (string) là một trong những kiểu dữ liệu cơ bản và quan trọng nhất trong Python, được sử dụng để lưu trữ và xử lý văn bản. Hiểu rõ các thao tác với chuỗi là kỹ năng thiết yếu cho mọi lập trình viên Python.
Mục tiêu bài học:
– Hiểu cách tạo và thao tác cơ bản với chuỗi
– Sử dụng thành thạo các phương thức xử lý chuỗi
– Áp dụng định dạng chuỗi (formatting) linh hoạt
– Nắm vững các kỹ thuật cắt (slicing) và nối chuỗi
– Xử lý được các bài toán thực tế liên quan đến chuỗi
1. Khái Niệm Và Cách Tạo Chuỗi
Định nghĩa: Chuỗi là một dãy các ký tự Unicode. Trong Python, chuỗi là bất biến (immutable) – không thể thay đổi sau khi tạo.
Cú pháp tạo chuỗi:
# Sử dụng dấu nháy đơn
chuoi_1 = 'Hello World'
# Sử dụng dấu nháy kép
chuoi_2 = "Python Programming"
# Chuỗi nhiều dòng
chuoi_3 = '''Đây là chuỗi
nhiều dòng'''
# Chuỗi raw (không xử lý ký tự đặc biệt)
chuoi_4 = r'C:\new\folder'2. Các Thao Tác Cơ Bản Với Chuỗi
A. Truy cập ký tự trong chuỗi:
s = "Python"
print(s[0]) # 'P' - ký tự đầu
print(s[-1]) # 'n' - ký tự cuốiB. Cắt chuỗi (slicing):
s = "Hello World"
print(s[0:5]) # 'Hello' - từ 0 đến 4
print(s[6:]) # 'World' - từ 6 đến hết
print(s[:5]) # 'Hello' - từ đầu đến 4
print(s[::2]) # 'HloWrd' - mỗi bước 2 ký tự
print(s[::-1]) # 'dlroW olleH' - đảo ngược chuỗiC. Nối chuỗi:
s1 = "Hello"
s2 = "World"
s3 = s1 + " " + s2 # 'Hello World'
s4 = s1 * 3 # 'HelloHelloHello'3. Các Phương Thức Xử Lý Chuỗi Quan Trọng
A. Kiểm tra chuỗi:
s = "Python123"
print(s.isalnum()) # True - chỉ chứa chữ cái và số
print(s.isalpha()) # False - có chứa số
print(s.isdigit()) # False - không phải toàn số
print(s.islower()) # False - có chữ hoa
print(s.isupper()) # False - có chữ thườngB. Biến đổi chuỗi:
s = " hello world "
print(s.strip()) # 'hello world' - xóa khoảng trắng hai đầu
print(s.lstrip()) # 'hello world ' - xóa bên trái
print(s.rstrip()) # ' hello world' - xóa bên phải
s2 = "Hello World"
print(s2.lower()) # 'hello world'
print(s2.upper()) # 'HELLO WORLD'
print(s2.capitalize()) # 'Hello world'
print(s2.title()) # 'Hello World'C. Tìm kiếm và thay thế:
s = "Hello World"
print(s.find("World")) # 6 - vị trí bắt đầu
print(s.find("Python")) # -1 - không tìm thấy
print(s.replace("World", "Python")) # 'Hello Python'
print(s.count("l")) # 3 - số lần xuất hiện của 'l'D. Phân tách và nối chuỗi:
s = "apple,banana,orange"
items = s.split(",") # ['apple', 'banana', 'orange']
new_s = "-".join(items) # 'apple-banana-orange'
lines = "Line1\nLine2\nLine3"
line_list = lines.splitlines() # ['Line1', 'Line2', 'Line3']5. Các Ký Tự Đặc Biệt Và Chuỗi Raw
Ký tự đặc biệt:
\n– Xuống dòng\t– Tab\\– Dấu gạch chéo ngược\'– Dấu nháy đơn\"– Dấu nháy kép
Chuỗi raw (không xử lý ký tự đặc biệt):
path = r'C:\Users\Name\Documents' # Không xử lý \U, \N, \D
print(path) # C:\Users\Name\Documents6. Ứng Dụng Thực Tế
Ví dụ 6.1: Kiểm tra mật khẩu mạnh
def kiem_tra_mat_khau(password):
if len(password) < 8:
return "Mật khẩu quá ngắn"
if not any(char.isdigit() for char in password):
return "Mật khẩu cần ít nhất một chữ số"
if not any(char.isupper() for char in password):
return "Mật khẩu cần ít nhất một chữ hoa"
return "Mật khẩu mạnh"
print(kiem_tra_mat_khau("Abc12345"))Ví dụ 6.2: Đếm từ trong văn bản
def dem_tu(van_ban):
tu = van_ban.split()
return len(tu)
van_ban = "Python là ngôn ngữ lập trình tuyệt vời"
print(f"Số từ: {dem_tu(van_ban)}")Ví dụ 6.3: Ẩn email
def an_email(email):
parts = email.split('@')
username = parts[0]
domain = parts[1]
an_username = username[0] + '*' * (len(username) - 2) + username[-1]
return f"{an_username}@{domain}"
print(an_email("example@gmail.com")) # e*****e@gmail.comBài Tập Thực Hành
Bài 1: Viết chương trình/hàm nhập tên và tuổi, in ra thông báo: “Xin chào [tên], năm nay bạn [tuổi] tuổi”
Bài 2: Viết chương trình/hàm Nhập một câu, đếm xem có bao nhiêu từ trong câu (từ cách nhau bởi khoảng trắng)
Bài 3: Viết chương trình/hàm Nhập một chuỗi, in ra chuỗi đó viết hoa và viết thường
Bài 4: Viết chương trình/hàmNhập một chuỗi, kiểm tra xem chuỗi có bắt đầu bằng “Hello” không
Bài 5: Viết chương trình/hàmNhập một chuỗi, thay thế tất cả khoảng trắng bằng dấu gạch ngang “-“
Bài 6: Viết chương trình/hàm Nhập một chuỗi, cắt lấy 5 ký tự đầu và 5 ký tự cuối, nối chúng lại
Bài 7: Viết chương trình/hàm Nhập tên đầy đủ (họ và tên), tách và in riêng họ, tên đệm, tên
Bài 8: Viết chương trình/hàm Nhập một email, kiểm tra xem email có hợp lệ không (có chứa ký tự @)
Bài 9: Viết chương trình/hàm Nhập một chuỗi số (ví dụ: “12345”), tính tổng các chữ số trong chuỗi
Bài 10: Viết chương trình/hàm Nhập một câu, đảo ngược thứ tự các từ trong câu (không đảo từng từ)
Bài 11: Viết hàm đảo ngược một chuỗi
Bài 12: Viết hàm kiểm tra chuỗi có phải là palindrome không
Bài 13: Viết hàm đếm số ký tự hoa, thường, số trong chuỗi
Bài 14: Viết hàm mã hóa chuỗi bằng cách thay thế ký tự
Bài 15: Viết hàm tách họ và tên từ chuỗi họ tên đầy đủ
Bài 16: Viết hàm chuẩn hóa tên (viết hoa chữ cái đầu mỗi từ)
Bài 17: Viết hàm xóa tất cả khoảng trắng thừa trong chuỗi
Bài 18: Viết hàm tìm từ dài nhất trong chuỗi
Bài 19: Viết hàm kiểm tra xem một chuỗi có chứa toàn số không
Bài 20: Viết hàm tách địa chỉ email thành tên người dùng và tên miền
