1. Khởi động (Engagement)
Em đã biết dữ liệu xâu kí tự (gọi tắt là xâu) từ Bài 16 và chúng ta có thể tạo các biến kiểu xâu kí tự theo nhiều cách như sau:
💡 Câu hỏi suy ngẫm: Liệu có lệnh nào trích ra từng kí tự của một xâu kí tự? Đếm số kí tự của một xâu?
Xâu kí tự là kiểu dữ liệu rất quan trọng trong Python, dùng để lưu trữ và xử lý văn bản, tên, thông điệp, và nhiều loại dữ liệu khác.
2. Hình thành kiến thức (Knowledge)
1. Xâu là một dãy các kí tự
a) Cấu trúc của xâu kí tự
Một xâu kí tự được hiểu là một dãy các kí tự. Tương tự danh sách, ta có thể truy cập từng kí tự của xâu thông qua chỉ số, chỉ số bắt đầu từ 0.
Ví dụ:
Lệnh len() sẽ tính độ dài của xâu hay số lượng các kí tự có trong xâu.
b) Sự khác nhau giữa xâu và danh sách
Điểm giống nhau:
- Cả hai đều là dãy các phần tử
- Đều có chỉ số bắt đầu từ 0
- Đều có thể dùng len() để tính độ dài
- Đều có thể duyệt bằng for
Điểm khác nhau quan trọng:
Python không cho phép thay đổi từng kí tự của một xâu. Điều này khác với danh sách.
2. Các đặc điểm quan trọng của xâu kí tự
a) Không có kiểu dữ liệu kí tự riêng
Python không có kiểu dữ liệu kí tự. Kí tự chính là xâu có độ dài 1.
b) Xâu là dãy các kí tự Unicode
Xâu kí tự trong Python là dãy các kí tự Unicode, cho phép hiển thị nhiều ngôn ngữ khác nhau.
c) Xâu không thay đổi được (Immutable)
Xâu có thể được coi là danh sách các kí tự nhưng không thay đổi từng kí tự của xâu. Truy cập từng kí tự của xâu qua chỉ số, chỉ số từ 0 đến độ dài len() – 1.
3. Duyệt kí tự của xâu
Có hai cách duyệt kí tự của xâu kí tự bằng lệnh for: theo chỉ số và theo phần tử của xâu kí tự.
a) Duyệt theo chỉ số
Biến i lần lượt chạy theo chỉ số của xâu kí tự s, từ 0 đến len(s) – 1. Kí tự tại chỉ số i là s[i].
b) Duyệt theo từng kí tự
Biến ch sẽ được gán lần lượt các kí tự của xâu s từ đầu đến cuối.
4. Toán tử in với xâu
Toán tử in dùng để kiểm tra một xâu con có nằm trong xâu khác không:
s₁ in s₂ trả lại giá trị True nếu s₁ là xâu con của s₂.
3. Luyện tập (Practice)
Bài tập thực hành
Bài tập 1:
Các xâu kí tự sau có hợp lệ không? a) "123&*()+-ABC" b) "10101108&101001" c) "Tây Nguyên" d) 11111111 = 256
Bài tập 2:
Mỗi xâu hợp lệ ở Câu 1 có độ dài bằng bao nhiêu?
Bài tập 3:
Sau khi thực hiện các lệnh sau, biến skq sẽ có giá trị bao nhiêu?
Bài tập 4:
Cho s1 = "abc", s2 = "ababcabca". Các biểu thức logic sau cho kết quả là đúng hay sai? a) s1 in s2 b) s1 + s1 in s2 c) "abcabca" in s2 d) "abc123" in s2
Thực hành tại máy:
Viết chương trình nhập số tự nhiên n là số học sinh, sau đó nhập họ và tên học sinh. Lưu họ và tên học sinh vào một danh sách. In danh sách ra màn hình, mỗi họ tên trên một dòng.
Chương trình mẫu:
4. Vận dụng (Application)
Bài tập vận dụng
Bài tập 1: Đếm kí tự đặc biệt
Viết chương trình nhập một xâu kí tự và đếm xem có bao nhiêu kí tự là chữ số, bao nhiêu kí tự là chữ cái, bao nhiêu kí tự là ký tự khác.
Gợi ý:
Bài tập 2: Đảo ngược xâu
Viết chương trình nhập một xâu và in ra xâu đảo ngược.
Gợi ý:
Bài tập 3: Kiểm tra xâu đối xứng
Viết chương trình kiểm tra xem một xâu có đối xứng không (đọc từ trái sang phải hay từ phải sang trái đều như nhau).
Ví dụ: "radar", "level" là xâu đối xứng.
Gợi ý: So sánh xâu với xâu đảo ngược của nó.
Thảo luận:
- Tại sao xâu trong Python lại không thể thay đổi từng kí tự?
- Khi nào nên dùng duyệt theo chỉ số, khi nào nên dùng duyệt theo phần tử?
- Lợi ích của việc xâu không thay đổi được là gì?
Ghi nhớ kiến thức 🎯
- ✅ Xâu là dãy các kí tự Unicode, đặt trong '' hoặc "".
- ✅ Chỉ số bắt đầu từ 0, truy cập bằng xau[chỉ_số].
- ✅ len() tính độ dài xâu.
- ✅ Xâu không thể thay đổi từng kí tự (immutable).
- ✅ for...in duyệt từng kí tự của xâu.
- ✅ toán tử in kiểm tra xâu con.