Xâu ký tự (string)

Buổi 11

Python cho Tin học trẻ · Bảng B (THCS)

Buổi 11 – Xâu ký tự (string)1 / 23

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
Buổi 11 – Xâu ký tự (string)2 / 23

Khởi động

Trong Scratch, khối kí tự thứ 1 của apple cho ra gì?

  • Trả lời: a
  • Trong Python: "apple"[0]
Xâu giống như một list các ký tự!
Buổi 11 – Xâu ký tự (string)3 / 23

Phần 1: Xâu như một dãy ký tự

Chỉ số, cắt xâu, duyệt xâu
Buổi 11 – Xâu ký tự (string)4 / 23

Chỉ số của xâu

s = "Python"

Chỉ số012345
Ký tựPython
Chỉ số âm-6-5-4-3-2-1
ScratchPython
kí tự thứ i của ss[i - 1]
độ dài của slen(s)
s có chứa a?"a" in s
nối a ba + b
Buổi 11 – Xâu ký tự (string)5 / 23

Cắt xâu và duyệt xâu

s = "Tin hoc tre"
print(len(s))
print(s[0], s[-1])
print(s[0:3])
print(s[4:])
print(s[::-1])
for c in "abc":
    print(c)
11
T e
Tin
hoc tre
ert coh niT
a
b
c
s[a:b] lấy từ vị trí a đến b − 1, giống range.
Buổi 11 – Xâu ký tự (string)6 / 23

Phần 2: Các hàm hay dùng

Hộp đồ nghề xử lý xâu
Buổi 11 – Xâu ký tự (string)7 / 23

Hộp đồ nghề

LệnhKết quả
"Abc".upper()"ABC"
"Abc".lower()"abc"
"5".isdigit()True – là chữ số
"a".isalpha()True – là chữ cái
"banana".count("a")3
" a b ".split()["a", "b"] – tách từ
" ".join(["a", "b"])"a b" – ghép từ
ord("A"), chr(66)65, "B" – mã ký tự
Buổi 11 – Xâu ký tự (string)8 / 23

Tách từ và ghép từ

s = "  hoc   lap  trinh  "
tu = s.split()
print(tu)
print(len(tu))
print("-".join(tu))
print(" ".join(tu))
['hoc', 'lap', 'trinh']
3
hoc-lap-trinh
hoc lap trinh
split() tự bỏ mọi dấu cách thừa ở đầu, cuối và giữa các từ.
Buổi 11 – Xâu ký tự (string)9 / 23

Phần 3: Xâu không sửa được

Muốn đổi thì tạo xâu mới
Buổi 11 – Xâu ký tự (string)10 / 23

Xâu không sửa trực tiếp được

Sai

s = "meo"
s[0] = "M"
TypeError: 'str' object does not
support item assignment

Đúng: tạo xâu mới

s = "meo"
s = "M" + s[1:]
print(s)
Meo
Buổi 11 – Xâu ký tự (string)11 / 23

Mẫu: xây dựng xâu kết quả

s = input()
kq = ""
for c in s:
    if c.isdigit():
        kq += c
print(kq)
a1b2c33
1233
  1. Bắt đầu với xâu rỗng kq = ""
  2. Duyệt từng ký tự, chọn ký tự cần giữ
  3. Nối vào kq
Buổi 11 – Xâu ký tự (string)12 / 23

Mã ký tự: ord và chr

Mỗi ký tự có một mã số:

Ký tựABZabz0
ord656690979812248
c = "c"
print(ord(c) - ord("a"))
print(chr(ord(c) + 1))
2
d
Buổi 11 – Xâu ký tự (string)13 / 23

Luyện tập

Input: một dòng chứa xâu s (độ dài ≤ 10⁵), trừ khi ghi khác
Buổi 11 – Xâu ký tự (string)14 / 23

Bài 1 ★ – DEMSO

Output: số ký tự là chữ số trong s.

InputOutput
Tin hoc tre 20274
Buổi 11 – Xâu ký tự (string)15 / 23

Bài 2 ★ – DEMHOA

Output: số chữ cái in hoa và số chữ cái thường, trên một dòng.

InputOutput
Hello World2 8
Buổi 11 – Xâu ký tự (string)16 / 23

Bài 3 ★★ – XAUDX

Output: YES nếu s là xâu đối xứng (đọc xuôi ngược như nhau), ngược lại NO.

InputOutput
racecarYES
pythonNO
Buổi 11 – Xâu ký tự (string)17 / 23

Bài 4 ★★ – DEMTU

Output: số từ trong s. Các từ cách nhau bởi một hoặc nhiều dấu cách.

InputOutput
hoc lap trinh 3
Buổi 11 – Xâu ký tự (string)18 / 23

Bài 5 ★★ – CHUANHOA

Chuẩn hóa họ tên:

  • Xóa dấu cách thừa: đầu, cuối và giữa các từ chỉ còn 1 dấu cách
  • Chữ cái đầu mỗi từ viết hoa, các chữ còn lại viết thường
InputOutput
nguYEN van aN Nguyen Van An
Buổi 11 – Xâu ký tự (string)19 / 23

Bài 6 ★★★ – MAHOA

Mã hóa Caesar: thay mỗi chữ cái thường bằng chữ cái đứng sau nó k vị trí (quay vòng z → a). Ký tự khác giữ nguyên.

Input: dòng 1 là k (0 ≤ k ≤ 10⁹); dòng 2 là xâu s.

InputOutput
3 xin chao!alq fkdr!
Gợi ý: dùng ord, chr và % 26.
Buổi 11 – Xâu ký tự (string)20 / 23

Bài 7 ★★★ – TONGSO

Output: tổng các số nguyên có trong xâu. Các chữ số đứng liền nhau tạo thành một số.

InputOutput
ab12c3d4560
x7y7
12 + 3 + 45 = 60. Cẩn thận với số nằm ở cuối xâu!
Buổi 11 – Xâu ký tự (string)21 / 23

Tóm tắt buổi 11

s = input()
kq = ""
for c in s:
    if ...:
        kq += c
print(kq)
  • s[i], s[a:b], s[::-1], len(s)
  • upper, lower, isdigit, isalpha, count
  • split() tách từ, " ".join(...) ghép từ
  • Xâu không sửa được → tạo xâu mới
  • ord, chr: mã ký tự
Buổi 11 – Xâu ký tự (string)22 / 23

Bài về nhà

  1. Xóa hết các nguyên âm (a, e, i, o, u) khỏi xâu.
  2. Đếm số lần xuất hiện của mỗi chữ cái thường. In theo thứ tự a → z, chỉ in chữ có xuất hiện.
  3. ★★★ Kiểm tra hai xâu có phải đảo chữ của nhau không (ví dụ listen và silent).
Buổi 11 – Xâu ký tự (string)23 / 23
← → chuyển slide · F toàn màn hình