Bài 25

Một số lệnh làm việc với xâu kí tự

Biết và thực hiện được một số lệnh thường dùng với xâu kí tự.

🚀

1. Khởi động (Engagement)

Bài toán tìm kiếm xâu con trong một xâu là một trong những bài toán tin học được ứng dụng nhiều trong thực tế. Công cụ tìm kiếm thông tin trên Internet hay lệnh tìm kiếm trong soạn thảo văn bản được xây dựng trên cơ sở bài toán tìm xâu con.

💡 Câu hỏi suy ngẫm: Cho xâu c = "Trường Sơn" và xâu m = "Bước chân trên dài Trường Sơn". Em hãy cho biết xâu c có là xâu con của xâu m không? Nếu có thì tìm vị trí của xâu c trong xâu m.

Trong bài học này, chúng ta sẽ tìm hiểu các lệnh giúp làm việc hiệu quả với xâu kí tự, bao gồm tìm kiếm xâu con và các phương thức xử lý xâu thông dụng.

📖

2. Hình thành kiến thức (Knowledge)

1. Xâu con và lệnh tìm vị trí xâu con

a) Kiểm tra xâu con với toán tử in

Toán tử in dùng để kiểm tra một xâu có là xâu con của xâu khác không.

Cú pháp:

<xâu_con> in <xâu_mẹ>
Python Script

Ví dụ:

"abc" in "123abc"      # True
"010" in "1101"        # False
Python Script

Nếu đúng thì trả lại giá trị True, nếu sai trả lại giá trị False.

b) Lệnh find() tìm vị trí xâu con

Lệnh find() tìm vị trí xuất hiện của một xâu trong xâu khác.

Cú pháp đơn:

<xâu_mẹ>.find(<xâu_con>)
Python Script

Lệnh sẽ tìm vị trí đầu tiên của xâu con trong xâu mẹ và trả về vị trí đó. Nếu không tìm thấy thì trả về -1.

Ví dụ:

s = "ab bc cd 123 456 00"
s.find("b")        # 1 - Vị trí xuất hiện đầu tiên của "b"
s.find("12")       # 9 - Vị trí tìm thấy đầu tiên của "12"
s.find("AB")       # -1 - Không tìm thấy xâu "AB"
Python Script

Cú pháp đầy đủ:

<xâu_mẹ>.find(<xâu_con>, <vị trí bắt đầu>)
Python Script

Lệnh sẽ tìm vị trí xâu con bắt đầu từ vị trí start.

Ví dụ:

sub = "Đà Nẵng"
s = "Hà Nội - Đà Nẵng - Hồ Chí Minh"
s.find(sub)         # 9
s.find(sub, 10)     # -1 - Bắt đầu tìm từ vị trí 10 trở đi
Python Script

2. Một số lệnh thường dùng với xâu kí tự

a) Lệnh split() tách xâu thành danh sách

Lệnh split() tách một xâu thành các từ và đưa vào một danh sách. Kí tự tách dùng để phân tách các từ mặc định là dấu cách, tuy nhiên có thể thay thế kí tự tách bằng kí tự khác.

Cú pháp:

<xâu>.split(<kí tự tách>)
Python Script

Ví dụ:

s = "Tiên học lễ hậu học văn"
s.split()  # Tách xâu dùng dấu cách để phân biệt tách
# ['Tiên', 'học', 'lễ', 'hậu', 'học', 'văn']

st = "0,1,2,3,4,5,6,10"
st.split(",")  # Tách xâu dùng dấu "," để phân biệt tách
# ['0', '1', '2', '3', '4', '5', '6', '10']
Python Script

b) Lệnh join() nối danh sách thành xâu

Lệnh join() nối danh sách gồm các từ thành một xâu.

Ví dụ:

ds = ['Tiên', 'học', 'lễ']
" ".join(ds)  # "Tiên học lễ"

ds_so = ['0', '1', '2', '3']
",".join(ds_so)  # "0,1,2,3"
Python Script
🧩

3. Luyện tập (Practice)

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

Bài tập 1:

Biểu thức logic sau là đúng hay sai?

"010" in "001100"
Python Script

Bài tập 2:

Lệnh sau trả lại giá trị gì?

"ababababab".find("ab", 4)
Python Script

Bài tập 3:

Cho xâu S, viết đoạn lệnh trích ra xâu con của S bao gồm ba kí tự đầu tiên của S.

Gợi ý:

ba_dau = S[:3]
Python Script

Bài tập 4:

Viết chương trình kiểm tra xâu S có chứa chữ số không. Thông báo "S có chứa chữ số" hoặc "S không chứa chữ số nào".

Gợi ý:

co_chu_so = False
for ch in S:
    if ch.isdigit():
        co_chu_so = True
        break

if co_chu_so:
    print("S có chứa chữ số")
else:
    print("S không chứa chữ số nào")
Python Script

Thực hành tại máy:

Nhập một xâu kí tự S từ bàn phím rồi kiểm tra xem xâu S có chứa xâu con "10" không.

Cách 1: Duyệt kí tự theo chỉ số

S = input("Nhập xâu kí tự bất kì: ")
kq = False
for i in range(len(S)-1):
    if S[i] == "1" and S[i+1] == "0":
        kq = True
        break

if kq:
    print("Xâu gốc có chứa xâu '10'")
else:
    print("Xâu gốc không chứa xâu '10'")
Python Script

Cách 2: Sử dụng toán tử in

S = input("Nhập xâu kí tự bất kì: ")
if "10" in S:
    print("Xâu gốc có chứa xâu '10'")
else:
    print("Xâu gốc không chứa xâu '10'")
Python Script
🌟

4. Vận dụng (Application)

Bài tập vận dụng

Bài tập 1: Chèn xâu vào giữa

Cho hai xâu s₁, s₂. Viết đoạn chương trình chèn xâu s₁ vào giữa s₂, tại vị trí len(s₂)//2. In kết quả ra màn hình.

Gợi ý:

s1 = input("Nhập xâu s1: ")
s2 = input("Nhập xâu s2: ")

vi_tri = len(s2) // 2
ket_qua = s2[:vi_tri] + s1 + s2[vi_tri:]
print("Kết quả:", ket_qua)
Python Script

Bài tập 2: Đếm tên trùng lặp

Viết chương trình nhập số học sinh và họ tên học sinh. Sau đó đếm xem trong danh sách có bao nhiêu bạn tên là "Hương".

Gợi ý: Sử dụng toán tử in để kiểm tra một xâu có là xâu con của một xâu khác.

Chương trình mẫu:

n = int(input("Nhập số học sinh: "))
ds_lop = []

for i in range(n):
    hoten = input("Nhập họ tên học sinh thứ " + str(i+1) + ": ")
    ds_lop.append(hoten)

dem_huong = 0
for ten in ds_lop:
    if "Hương" in ten:
        dem_huong += 1

print("Số bạn tên Hương:", dem_huong)
Python Script

Bài tập 3: Xử lý dữ liệu CSV

Viết chương trình xử lý xâu dữ liệu dạng CSV (cách nhau bởi dấu phẩy):

  • Nhập xâu: "Tên, Tuổi, Lớp"
  • Tách thành danh sách và in từng phần tử trên dòng riêng

Gợi ý:

du_lieu = input("Nhập dữ liệu CSV: ")
danh_sach = du_lieu.split(",")

for i, phan_tu in enumerate(danh_sach):
    print(f"Phần tử {i+1}: {phan_tu.strip()}")
Python Script

Thảo luận:

  • Khi nào nên dùng find() thay cho in?
  • Lợi ích của split() trong xử lý dữ liệu có cấu trúc?
  • Tại sao join() lại quan trọng trong việc tổng hợp dữ liệu?

Ghi nhớ kiến thức 🎯

  • ✅ toán tử in kiểm tra xâu con, trả về True/False.
  • ✅ find() tìm vị trí xâu con, trả về -1 nếu không tìm thấy.
  • ✅ split() tách xâu thành danh sách theo kí tự phân cách.
  • ✅ join() nối danh sách xâu thành một xâu duy nhất.
  • ✅ Các phương thức giúp xử lý văn bản hiệu quả.

Chúc mừng bạn đã hoàn thành bài học này! 🏆