Buổi 11: Xâu ký tự (string)
Hôm nay em sẽ học
- Lấy ký tự, cắt xâu, duyệt xâu
- Các hàm hay dùng:
upper,lower,isdigit,count,split,join - Xâu không sửa trực tiếp được – tạo xâu mới
- Bài toán chuẩn hóa xâu – rất hay gặp trong đề thi
Bấm vào slide rồi dùng phím ← → để chuyển, phím F để xem toàn màn hình.
Mở toàn màn hình1. Kiến thức chính
Xâu giống một dãy ký tự
Với s = "Python":
| Chỉ số | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| Ký tự | P | y | t | h | o | n |
| Chỉ số âm | -6 | -5 | -4 | -3 | -2 | -1 |
s = "Tin hoc tre" len(s) # 11 – độ dài s[0], s[-1] # "T", "e" s[0:3] # "Tin" – từ vị trí 0 đến 2 s[4:] # "hoc tre" s[::-1] # "ert coh niT" – đảo ngược "hoc" in s # True – s có chứa "hoc" for c in s: # duyệt từng ký tự ...
Hộp đồ nghề xử lý xâu
| Lệnh | Kết quả |
|---|---|
"Abc".upper(), "Abc".lower() | "ABC", "abc" |
c.isdigit(), c.isalpha() | c là chữ số? c là chữ cái? |
c.isupper(), c.islower() | c là chữ hoa? chữ thường? |
"banana".count("a") | 3 |
" a b ".split() | ["a", "b"] – tách từ, bỏ mọi dấu cách thừa |
" ".join(["a", "b"]) | "a b" – ghép các từ |
ord("A"), chr(66) | 65, "B" – mã ký tự |
Xâu không sửa trực tiếp được
s[0] = "M" gây lỗi TypeError. Muốn thay đổi phải tạo xâu mới: s = "M" + s[1:].
Mẫu xây dựng xâu kết quả:
kq = "" for c in s: if c.isdigit(): # chọn ký tự cần giữ kq += c print(kq)
Mã ký tự
Các chữ cái thường có mã liên tiếp: ord("a") = 97, ord("b") = 98, … Vị trí của chữ c trong bảng chữ cái là ord(c) - ord("a") (từ 0 đến 25).
2. Ghi nhớ và lỗi thường gặp
| Lỗi | Ví dụ |
|---|---|
| Sửa trực tiếp ký tự | s[0] = "A" → TypeError |
Tách từ bằng split(" ") | dấu cách liền nhau tạo ra "từ rỗng" – dùng split() |
| Quên số nằm ở cuối xâu | khi tách số từ xâu, nhớ xử lý phần còn lại sau vòng lặp |
Nhầm len(s) với chỉ số cuối | chỉ số cuối là len(s) - 1 |
3. Câu hỏi tự kiểm tra
- Với
s = "Tin hoc",s[4:]vàs[::-1]là gì? " hoc lap trinh ".split()cho kết quả gì?chr(ord("c") + 2)bằng ký tự nào?
4. Bài tập về nhà
Bài 1 ★ – BONGUYENAM
Input: một dòng chứa xâu s (độ dài ≤ 10⁵).
Output: xâu s sau khi xóa hết các nguyên âm a e i o u (cả chữ thường và chữ hoa).
| Input | Output |
|---|---|
Tin hoc tre | Tn hc tr |
PYTHON | PYTHN |
Bài 2 ★★ – TANSUAT
Input: một dòng chứa xâu s.
Output: với mỗi chữ cái thường có xuất hiện trong s, in một dòng gồm chữ cái đó và số lần xuất hiện, theo thứ tự a → z.
| Input | Output |
|---|---|
banana | a 3b 1n 2 |
Bài 3 ★★ – DAOCHU
Hai xâu là đảo chữ của nhau nếu xếp lại các ký tự của xâu này thì được xâu kia (ví dụ listen và silent).
Input: hai dòng, mỗi dòng một xâu (không có dấu cách).
Output: YES hoặc NO.
| Input | Output |
|---|---|
listensilent | YES |
abcabd | NO |
Bài 4 ★★★ (thử thách) – TUDAINHAT
Input: một dòng gồm các từ cách nhau bởi một hoặc nhiều dấu cách.
Output: từ dài nhất. Nếu có nhiều từ dài bằng nhau, in từ xuất hiện đầu tiên.
| Input | Output |
|---|---|
hoc lap trinh python | python |
ab cd ef | ab |
.py đặt tên theo tên bài. Chạy thử với tất cả ví dụ trước khi nộp!Chưa mở đáp án
Đáp án sẽ được mở sau khi các em nộp bài tập về nhà.
Chưa mở đáp án
Đáp án sẽ được mở sau khi các em nộp bài tập về nhà.