tinbc tinbc

Bài 3: Chuỗi (string) và thao tác văn bản trong Python

Thợ Code5 phút đọc1 lượt xem
Bài 3: Chuỗi (string) và thao tác văn bản trong Python

Bài 2 bạn đã nắm biến và kiểu dữ liệu. Giờ ta đào sâu kiểu dữ liệu bạn sẽ dùng nhiều nhất: chuỗi (string) — mọi thứ là văn bản. Xử lý văn bản (cắt, nối, đếm, chuẩn hoá) là việc lập trình gặp hằng ngày. Cuối bài bạn tự viết một chương trình đếm số từ và ký tự trong một đoạn văn, chạy ra kết quả thật.

⏱️ Cách học bài này (~30 phút): đọc khái niệm + code mẫu (10’), tự gõ và chạy các bài thực hành (12’), xem lỗi thường gặp (4’), tự kiểm + lưu code mang về (4’).

Mục tiêu bài học

Sau bài này bạn sẽ:

  • Nối chuỗi bằng f-string (cách gọn, ít lỗi nhất).
  • Dùng các thao tác chuỗi hay gặp: len(), .upper()/.lower(), .strip(), .replace(), .split().
  • Hiểu chuỗi là bất biến (immutable) — vì sao phải gán lại kết quả.
  • Tự viết chương trình đếm từ và ký tự — thêm vào kho code cá nhân.

Nội dung: những thao tác chuỗi hay dùng

1. Tạo và nối chuỗi (f-string)

Chuỗi đặt trong nháy đơn hoặc nháy kép. Cách nối gọn nhất là f-string — thêm f trước dấu nháy, đặt biến trong { }:

ten = "Lan"
tuoi = 25
print(f"Xin chào, tôi là {ten}, {tuoi} tuổi.")
# Kết quả: Xin chào, tôi là Lan, 25 tuổi.

So với cách nối bằng + (phải tự thêm dấu cách và str(tuoi)), f-string gọn và ít lỗi hơn nhiều — hãy ưu tiên dùng.

2. Các phương thức chuỗi thường gặp

text = "  Học Python Rất Vui  "
print(len(text))            # 22 — đếm CẢ khoảng trắng
print(text.strip())         # "Học Python Rất Vui" — bỏ khoảng trắng đầu/cuối
print(text.lower())         # "  học python rất vui  "
print(text.replace("Vui", "Thú vị"))  # "  Học Python Rất Thú vị  " (chưa strip nên còn khoảng trắng)
print("a,b,c".split(","))   # ['a', 'b', 'c'] — cắt thành danh sách

3. Chuỗi là “bất biến” — nhớ gán lại

Các phương thức trên trả về chuỗi mới, không sửa chuỗi gốc. Muốn giữ kết quả, phải gán lại:

ten = "  Lan  "
ten.strip()          # tạo chuỗi mới nhưng KHÔNG lưu → vô ích
ten = ten.strip()    # ĐÚNG: gán lại thì ten mới thành "Lan"

Quên gán lại là lỗi khiến “chạy mà không thấy gì đổi” — rất hay gặp ở người mới.

Code mẫu có chú thích: đếm từ và ký tự

Ghép các thao tác trên thành một chương trình hoàn chỉnh:

text = input("Nhập một đoạn văn: ")   # nhận văn bản từ người dùng

text = text.strip()                   # bỏ khoảng trắng thừa đầu/cuối
so_ky_tu = len(text)                  # đếm ký tự (gồm khoảng trắng giữa)
so_tu = len(text.split())             # split() cắt theo khoảng trắng → đếm từ

print(f"Số ký tự: {so_ky_tu}")
print(f"Số từ: {so_tu}")

Chạy thử với Học Python rất vuiSố ký tự: 18 · Số từ: 4. Mấu chốt: text.split() biến đoạn văn thành danh sách từ, rồi len() đếm số từ đó.

Bài thực hành code (tự gõ)

Bài 1 — Chào hỏi cá nhân hoá: viết chương trình hỏi tên người dùng rồi in Xin chào, <tên>! bằng f-string.
Kết quả mong đợi: nhập Nam → in ra Xin chào, Nam!

Bài 2 — Chuẩn hoá tên: nhận một tên có thể lộn xộn hoa/thường và dư khoảng trắng (vd " nGuYen VaN a "), in ra dạng gọn, viết hoa chữ đầu mỗi từ.
Gợi ý: dùng .strip() rồi .title(). Kết quả: Nguyen Van A

Bài 3 — Đếm một từ xuất hiện bao nhiêu lần: cho một đoạn văn, đếm số lần từ “python” xuất hiện (không phân biệt hoa thường).
Gợi ý: đưa về .lower() rồi dùng .count("python").
⚠️ Lưu ý: .count("python") đếm cả chuỗi con"pythonic" hay "pythons" cũng bị tính. Đây là “đếm chuỗi con”, chưa phải đếm từ chính xác; muốn đúng từng từ phải tách bằng .split() rồi so khớp.

Lỗi thường gặp & cách sửa

  • Quên gán lại kết quả (ten.strip() mà không ten = ...) → chuỗi không đổi. Nhớ gán lại.
  • TypeError: can only concatenate str (not "int") to str → bạn nối chuỗi với số bằng +. Sửa: dùng f-string, hoặc str(so).
  • Lẫn len(text)len(text.split()) → một cái đếm ký tự, một cái đếm từ. Nhớ .split() mới ra số từ.
  • Đọc kỹ thông báo lỗi để sửa nhanh: xem cách đọc lỗi và debug cho người mới.

💾 Mang về — code hoàn chỉnh

Lưu chương trình đếm từ/ký tự này vào kho code cá nhân (bài L3 trong series):

# dem_tu.py — đếm số từ và ký tự trong một đoạn văn
text = input("Nhập một đoạn văn: ").strip()
print(f"Số ký tự: {len(text)}")
print(f"Số từ: {len(text.split())}")

Thuật ngữ chốt

Thuật ngữ Giải thích ngắn
string (chuỗi) Kiểu dữ liệu văn bản, đặt trong dấu nháy
f-string Chuỗi có f phía trước, chèn biến bằng { }
method (phương thức) Hàm gắn với chuỗi, gọi bằng dấu chấm: text.strip()
immutable (bất biến) Không sửa được tại chỗ; phương thức trả về chuỗi mới
split() Cắt chuỗi thành danh sách theo khoảng trắng/ký tự

Tự kiểm tra & lời giải

  1. "Hello".lower() trả về gì? (Đáp án: "hello")
  2. len("a b c") bằng mấy? (Đáp án: 5 — đếm cả 2 khoảng trắng)
  3. Vì sao ten.strip() không làm ten đổi? (Đáp án: chuỗi bất biến; phải ten = ten.strip())

Lời giải Bài thực hành:

# Bài 1
ten = input("Tên bạn: ")
print(f"Xin chào, {ten}!")

# Bài 2
ten = input("Nhập tên: ").strip().title()
print(ten)

# Bài 3
text = input("Đoạn văn: ").lower()
print(text.count("python"))

Ghi nhớ nhanh

  • Nối chuỗi: ưu tiên f-string f"...{bien}...".
  • Thao tác hay dùng: strip, lower/upper, replace, split, len — và gán lại kết quả (chuỗi bất biến).
  • Đếm từ = len(text.split()); đếm ký tự = len(text).

👉 Bài tập về nhà: nâng cấp chương trình đếm từ để in thêm số câu (gợi ý: đếm dấu chấm bằng .count(".")). Bài tiếp theo trong series: Bài 4 — Điều kiện if/else (sắp đăng).

Chia sẻ:
0.0 0 lượt đánh giá

Câu hỏi thường gặp

Nối chuỗi bằng dấu + và f-string khác nhau thế nào?

Cả hai đều ghép chuỗi. Dùng + phải tự thêm dấu cách và phải ép số về chuỗi bằng str() (vd 'Tuổi: ’ + str(age)). f-string (f"…“) gọn hơn nhiều: đặt biến trong { } ngay trong chuỗi, tự hiểu số — f"Tuổi: {age}”. Người mới nên ưu tiên f-string cho gọn và ít lỗi.

Vì sao .strip() và .replace() không thay đổi chuỗi gốc?

Vì chuỗi trong Python là ‘bất biến’ (immutable) — các phương thức này trả về chuỗi MỚI chứ không sửa chuỗi cũ. Muốn giữ kết quả, phải gán lại: ten = ten.strip(). Quên gán lại là lỗi phổ biến khiến ‘chạy mà không thấy đổi gì’.

.split() dùng để làm gì khi đếm từ?

text.split() cắt một đoạn văn thành danh sách các từ dựa trên khoảng trắng. Đếm số phần tử của danh sách đó bằng len() là ra số từ. Đây chính là cách chương trình đếm từ trong bài hoạt động.

Thợ Code

Thợ Code

Thợ code chính hiệu, thích dắt người mới qua mấy đoạn 'khó nhằn' bằng giọng nhẹ tênh. Châm ngôn: cứ làm dự án thật, sai thì sửa, vui là chính.

Bài liên quan

Cách đọc lỗi và debug cho người mới học code
Lập trình

Cách đọc lỗi và debug cho người mới học code

Gặp lỗi đỏ lòm là chuyện thường khi học code — quan trọng là biết đọc và sửa. Hướng dẫn đọc thông báo lỗi, ba loại lỗi hay gặp, và quy trình debug từng bước cho người mới.

Bài 3: HTML — cấu trúc một trang web
Lập trình

Bài 3: HTML — cấu trúc một trang web

Bài 3 series Web cơ bản (bài học 30 phút): hiểu thẻ HTML và khung chuẩn của một trang, tự tay dựng khung trang cá nhân — kèm bài thực hành, lỗi thường gặp và file mang về.

Bài 2: Biến và kiểu dữ liệu trong Python
Lập trình

Bài 2: Biến và kiểu dữ liệu trong Python

Bài 2 series Python cho người mới (bài học 30 phút): hiểu biến, 4 kiểu dữ liệu cơ bản và ép kiểu qua một chương trình tính BMI tự viết — kèm bài tập gõ code, lỗi thường gặp và code mang về.