Buổi 11: Xâu ký tự (string)

Hôm nay em sẽ học

  1. Lấy ký tự, cắt xâu, duyệt xâu
  2. Các hàm hay dùng: upper, lower, isdigit, count, split, join
  3. Xâu không sửa trực tiếp được – tạo xâu mới
  4. 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ình

1. Kiến thức chính

Xâu giống một dãy ký tự

Với s = "Python":

Chỉ số012345
Ký tựPython
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ệnhKế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ỗiVí 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âukhi 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ốichỉ số cuối là len(s) - 1

3. Câu hỏi tự kiểm tra

  1. Với s = "Tin hoc", s[4:] và s[::-1] là gì?
  2. " hoc lap trinh ".split() cho kết quả gì?
  3. 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).

InputOutput
Tin hoc treTn hc tr
PYTHONPYTHN

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.

InputOutput
bananaa 3
b 1
n 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.

InputOutput
listen
silent
YES
abc
abd
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.

InputOutput
hoc lap trinh pythonpython
ab cd efab
Cách nộp bài: mỗi bài một file .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à.

Zalo