Bỏ qua

Image

KIỂU CHUỖI - STRING TRONG PYTHON

I. Định nghĩa và đặc điểm

1. String là gì?

String (chuỗi) là một dãy các ký tự được đặt trong dấu ngoặc kép hoặc dấu ngoặc đơn.

# Các cách tạo chuỗi
ten = "Nguyễn Văn A"
lop = '9A'
dia_chi = """Hà Nội,
Việt Nam"""

2. Đặc điểm của String

  • Bất biến (immutable): Không thể thay đổi từng ký tự
  • Có thể truy cập theo chỉ số
  • Có thể nối chuỗi
  • Hỗ trợ nhiều phương thức xử lý

II. Cách khai báo và sử dụng

1. Khai báo chuỗi

# Dấu ngoặc kép
chuoi1 = "Xin chào"

# Dấu ngoặc đơn
chuoi2 = 'Python'

# Dấu ngoặc kép ba
chuoi3 = """Đây là chuỗi
nhiều dòng"""

# Dấu ngoặc đơn ba
chuoi4 = '''Chuỗi
nhiều dòng'''

2. Truy cập ký tự

ten = "Python"
print("Chuỗi:", ten)
print("Ký tự đầu:", ten[0])      # P
print("Ký tự cuối:", ten[-1])    # n
print("Ký tự thứ 2:", ten[1])    # y

3. Cắt chuỗi (Slicing)

chuoi = "Hello World"
print("Chuỗi gốc:", chuoi)
print("5 ký tự đầu:", chuoi[:5])     # Hello
print("5 ký tự cuối:", chuoi[-5:])   # World
print("Từ ký tự 6:", chuoi[6:])      # World
print("Ký tự 2-7:", chuoi[2:7])      # llo W

III. Các thao tác cơ bản

1. Nối chuỗi

# Sử dụng dấu +
ten = "Nguyễn"
ho = "Văn"
ten_dem = "A"
ten_day_du = ho + " " + ten + " " + ten_dem
print("Tên đầy đủ:", ten_day_du)

# Sử dụng f-string
ten_day_du = f"{ho} {ten} {ten_dem}"
print("Tên đầy đủ:", ten_day_du)

# Sử dụng format()
ten_day_du = "{} {} {}".format(ho, ten, ten_dem)
print("Tên đầy đủ:", ten_day_du)

2. Lặp chuỗi

# Lặp chuỗi với *
print("=" * 20)  # ====================
print("Python " * 3)  # Python Python Python

3. Kiểm tra chuỗi con

chuoi = "Python Programming"
print("'Python' có trong chuỗi:", "Python" in chuoi)  # True
print("'Java' có trong chuỗi:", "Java" in chuoi)      # False

IV. Các hàm chuỗi cơ bản

1. len() - Độ dài chuỗi

chuoi = "Hello World"
do_dai = len(chuoi)
print(f"Độ dài chuỗi '{chuoi}': {do_dai}")  # 11

2. upper() và lower() - Chuyển đổi chữ hoa/thường

chuoi = "Python Programming"
print("Chuỗi gốc:", chuoi)
print("Chữ hoa:", chuoi.upper())
print("Chữ thường:", chuoi.lower())

3. strip() - Loại bỏ khoảng trắng

chuoi = "   Python   "
print("Chuỗi gốc:", repr(chuoi))
print("Sau strip():", repr(chuoi.strip()))
print("Sau lstrip():", repr(chuoi.lstrip()))
print("Sau rstrip():", repr(chuoi.rstrip()))

4. replace() - Thay thế chuỗi

chuoi = "Python là ngôn ngữ lập trình"
print("Chuỗi gốc:", chuoi)
print("Sau replace():", chuoi.replace("Python", "Java"))

5. split() - Tách chuỗi

chuoi = "Toán,Lý,Hóa,Sinh"
danh_sach = chuoi.split(",")
print("Chuỗi gốc:", chuoi)
print("Sau split():", danh_sach)

# Tách theo khoảng trắng
ten = "Nguyễn Văn A"
phan_tu = ten.split()
print("Tên:", phan_tu)

6. join() - Nối chuỗi

danh_sach = ["Toán", "Lý", "Hóa", "Sinh"]
chuoi = ", ".join(danh_sach)
print("Danh sách:", danh_sach)
print("Sau join():", chuoi)

V. Ví dụ minh họa

Ví dụ 1: Xử lý tên học sinh

# Nhập tên học sinh
ten_day_du = input("Nhập tên đầy đủ: ")

# Tách thành các phần
phan_tu = ten_day_du.split()
ho = phan_tu[0]
ten = phan_tu[-1]

# In kết quả
print(f"Họ: {ho}")
print(f"Tên: {ten}")
print(f"Tên viết tắt: {ho[0]}. {ten}")

Ví dụ 2: Kiểm tra mật khẩu

# Nhập mật khẩu
mat_khau = input("Nhập mật khẩu: ")

# Kiểm tra độ mạnh
do_dai = len(mat_khau)
co_chu_hoa = any(c.isupper() for c in mat_khau)
co_chu_thuong = any(c.islower() for c in mat_khau)
co_so = any(c.isdigit() for c in mat_khau)

print(f"Độ dài: {do_dai}")
print(f"Có chữ hoa: {co_chu_hoa}")
print(f"Có chữ thường: {co_chu_thuong}")
print(f"Có số: {co_so}")

if do_dai >= 8 and co_chu_hoa and co_chu_thuong and co_so:
    print("Mật khẩu mạnh!")
else:
    print("Mật khẩu yếu!")

Ví dụ 3: Định dạng văn bản

# Văn bản gốc
van_ban = "   python là ngôn ngữ lập trình dễ học   "

# Xử lý văn bản
van_ban = van_ban.strip()  # Loại bỏ khoảng trắng đầu cuối
van_ban = van_ban.title()  # Viết hoa chữ cái đầu
van_ban = van_ban.replace("Python", "Python")

print("Văn bản sau xử lý:", van_ban)

VI. Bài tập thực hành tại lớp

Bài 1: Tạo tên viết tắt

Đề bài: Viết chương trình nhập tên đầy đủ và in ra tên viết tắt.

💡 Phân tích đề

Các bước thực hiện:

  1. Nhập tên đầy đủ từ bàn phím
  2. Tách tên thành các từ bằng split()
  3. Lấy ký tự đầu của mỗi từ và viết hoa
  4. Nối các ký tự đầu với dấu chấm

Input/Output mẫu:

Input Xử lý Output
"Nguyễn Văn An" ["Nguyễn", "Văn", "An"] "N.V.A."
"trần thị bình" ["trần", "thị", "bình"] "T.T.B."
💡 Gợi ý code
# Nhập tên đầy đủ
ten_day_du = input("Nhập tên đầy đủ: ")

# Tách thành các từ
phan_tu = ten_day_du.split()

# Tạo tên viết tắt
ten_viet_tat = ""
for phan in phan_tu:
    ten_viet_tat += phan[0].upper() + "."

# In kết quả
print("Tên viết tắt:", ten_viet_tat)

Bài 2: Đếm số từ trong câu

Đề bài: Viết chương trình đếm số từ trong một câu.

💡 Phân tích đề

Các bước thực hiện:

  1. Nhập một câu từ bàn phím
  2. Sử dụng split() để tách thành danh sách từ
  3. Đếm số phần tử trong danh sách bằng len()
  4. In kết quả

Input/Output mẫu:

Input Tách từ Output
"Python là ngôn ngữ lập trình" ["Python", "là", "ngôn", "ngữ", "lập", "trình"] 6 từ
"Xin chào" ["Xin", "chào"] 2 từ
💡 Gợi ý code
# Nhập câu
cau = input("Nhập một câu: ")

# Đếm số từ
so_tu = len(cau.split())

# In kết quả
print(f"Số từ trong câu: {so_tu}")

Bài 3: Kiểm tra palindrome

Đề bài: Viết chương trình kiểm tra chuỗi có phải là palindrome không.

💡 Phân tích đề

Các bước thực hiện:

  1. Nhập chuỗi từ bàn phím
  2. Chuyển về chữ thường để so sánh không phân biệt hoa/thường
  3. Đảo ngược chuỗi bằng slicing [::-1]
  4. So sánh chuỗi gốc với chuỗi đảo ngược

Input/Output mẫu:

Input Chuyển thường Đảo ngược Kết quả
"Madam" "madam" "madam" Là palindrome
"Hello" "hello" "olleh" Không phải palindrome
"Level" "level" "level" Là palindrome
💡 Gợi ý code
# Nhập chuỗi
chuoi = input("Nhập chuỗi: ")

# Chuyển về chữ thường
chuoi_thuong = chuoi.lower()

# Đảo ngược chuỗi
chuoi_dao = chuoi_thuong[::-1]

# Kiểm tra palindrome
if chuoi_thuong == chuoi_dao:
    print("Là palindrome!")
else:
    print("Không phải palindrome!")

VII. Bài tập về nhà

Bài 1: Tạo email từ họ tên

Đề bài: Viết chương trình nhập họ tên và tạo email theo format: tên.họ@domain.com

💡 Phân tích đề

Các bước thực hiện:

  1. Nhập họ tên đầy đủ và tên miền email
  2. Tách họ tên thành các từ
  3. Lấy tên (từ cuối) và họ (từ đầu)
  4. Tạo email theo format: tên.họ@domain.com
  5. Chuyển tất cả về chữ thường

Input/Output mẫu:

Input Xử lý Output
"Nguyễn Văn An" tên="an", họ="nguyen" an.nguyen@gmail.com
"Trần Thị Mai Linh" tên="linh", họ="tran" linh.tran@company.com

Bài 2: Thống kê văn bản

Đề bài: Viết chương trình đếm số ký tự, số từ, số câu trong một đoạn văn.

💡 Phân tích đề

Các bước thực hiện:

  1. Nhập đoạn văn từ bàn phím
  2. Đếm ký tự bằng len() (trừ khoảng trắng nếu cần)
  3. Đếm từ bằng split()
  4. Đếm câu bằng số dấu chấm, chấm hỏi, chấm than
  5. In thống kê chi tiết

Input/Output mẫu:

Loại Input Cách đếm Output
Ký tự "Hello world! How are you?" len() - spaces 20 ký tự
Từ ["Hello", "world!", "How", "are", "you?"] len(split()) 5 từ
Câu ["Hello world!", "How are you?"] count('.?!') 2 câu

Bài 3: Mã hóa Caesar

Đề bài: Viết chương trình mã hóa đơn giản: thay thế mỗi chữ cái bằng chữ cái kế tiếp.

💡 Phân tích đề

Các bước thực hiện:

  1. Nhập chuỗi cần mã hóa và số bước dịch chuyển
  2. Duyệt từng ký tự trong chuỗi
  3. Nếu là chữ cái: dịch chuyển theo alphabet
  4. Xử lý việc vòng tròn (z → a)
  5. Giữ nguyên ký tự khác (số, dấu cách...)

Input/Output mẫu:

Input Dịch chuyển Output
"Hello" +1 "Ifmmp"
"abc xyz" +3 "def abc"
"Python123" +2 "Ravjqp123"

Bài 4: Kiểm tra số điện thoại

Đề bài: Viết chương trình kiểm tra và định dạng số điện thoại Việt Nam.

💡 Phân tích đề

Các bước thực hiện:

  1. Nhập số điện thoại từ bàn phím
  2. Loại bỏ khoảng trắng và ký tự đặc biệt
  3. Kiểm tra độ dài (10-11 số)
  4. Kiểm tra đầu số hợp lệ (03, 05, 07, 08, 09...)
  5. Định dạng lại theo chuẩn: 0xxx.xxx.xxx

Input/Output mẫu:

Input Kiểm tra Output
"0123 456 789" ✓ Hợp lệ 0123.456.789
"84987654321" ✓ Chuyển đổi 0987.654.321
"012345" ✗ Không hợp lệ Số không đúng định dạng

VIII. Ghi chú quan trọng

1. Đặc điểm của String

  • String là immutable (không thể thay đổi)
  • Có thể truy cập theo chỉ số từ 0
  • Chỉ số âm đếm từ cuối chuỗi

2. Escape characters

# Các ký tự đặc biệt
print("Dòng 1\nDòng 2")  # Xuống dòng
print("Tab\tTab")         # Tab
print("Dấu ngoặc kép: \"Hello\"")  # Dấu ngoặc kép

3. So sánh chuỗi

# So sánh theo thứ tự từ điển
print("apple" < "banana")  # True
print("Apple" < "apple")   # True (chữ hoa < chữ thường)