Python bài 04: Chuỗi, Unicode, slicing và f-string
- 18-10-2026
- Toanngo92
- 0 Comments
Giáo trình Python miễn phí · Chương 2/12: Kiểu dữ liệu, toán tử và chuỗi · Bài 04/24.
Mục lục
Mục tiêu bài học
Xử lý văn bản tiếng Việt, truy cập chuỗi, chuẩn hóa dữ liệu và định dạng kết quả rõ ràng.
Chuỗi là dãy ký tự Unicode
str lưu văn bản Unicode. Có thể dùng nháy đơn hoặc nháy kép, miễn mở và đóng khớp nhau. Dấu \n biểu diễn xuống dòng, \t biểu diễn tab; raw string r"…" hữu ích khi không muốn diễn giải phần lớn escape sequence.
Chuỗi là immutable: các phương thức như strip(), lower(), replace() trả về chuỗi mới, không sửa trực tiếp chuỗi ban đầu. Chỉ số bắt đầu từ 0; chỉ số âm đếm từ cuối. Slicing s[start:stop:step] lấy đoạn và không bao gồm vị trí stop.
ten = " Nguyễn Văn An "
ten_sach = " ".join(ten.split())
print(ten_sach)
print(ten_sach[:6])
print("Python"[-1])
print("Python"[::-1])
print("a,b,c".split(","))
Kết quả:
Nguyễn Văn An Nguyễn n nohtyP ['a', 'b', 'c']
Tìm kiếm, chuẩn hóa và so sánh
Dùng in để kiểm tra chuỗi con, startswith()/endswith() để kiểm tra đầu/cuối. split() không truyền dấu phân cách sẽ tách theo khoảng trắng và bỏ các đoạn trắng thừa. join() ghép một iterable các chuỗi bằng dấu phân cách.
Hai chuỗi tiếng Việt nhìn giống nhau có thể dùng cách tổ hợp Unicode khác nhau. Khi đối chiếu dữ liệu nhập từ nhiều nguồn, có thể chuẩn hóa về NFC rồi casefold() cho so sánh không phân biệt hoa thường. Đây là so sánh giữ nguyên dấu, không tự động biến tiếng Việt thành không dấu.
import unicodedata
def chuan_hoa(text):
return unicodedata.normalize("NFC", text).strip().casefold()
print(chuan_hoa(" PYTHON ") == chuan_hoa("python"))
so_luong = 3
don_gia = 125000
print(f"Số lượng: {so_luong}; thành tiền: {so_luong * don_gia:,} đồng")
Kết quả:
True Số lượng: 3; thành tiền: 375,000 đồng
Văn bản và dữ liệu nhị phân
str khác bytes. Văn bản được encode thành bytes để lưu hoặc truyền; bytes được decode bằng encoding tương ứng. Khi đọc ghi tệp tiếng Việt nên chỉ rõ UTF-8. Không dùng str(bytes) để thay cho decode(), vì str(bytes) thường tạo phần biểu diễn có tiền tố b thay vì văn bản mong muốn.
Lỗi thường gặp và lưu ý
- s[100] có thể gây IndexError, trong khi s[:100] an toàn khi chuỗi ngắn hơn 100.
- len() đếm các code point trong chuỗi Python; không luôn trùng số ký tự hiển thị mà mắt người cảm nhận với emoji hoặc dấu kết hợp.
Ghi nhớ
Xử lý văn bản tốt bắt đầu từ hiểu immutable, chỉ số, slicing và encoding. Dùng f-string để định dạng, không ghép chuỗi thủ công cho mọi biểu thức.

