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:
- Nhập tên đầy đủ từ bàn phím
- Tách tên thành các từ bằng split()
- Lấy ký tự đầu của mỗi từ và viết hoa
- 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:
- Nhập một câu từ bàn phím
- Sử dụng split() để tách thành danh sách từ
- Đếm số phần tử trong danh sách bằng len()
- 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:
- Nhập chuỗi từ bàn phím
- Chuyển về chữ thường để so sánh không phân biệt hoa/thường
- Đảo ngược chuỗi bằng slicing [::-1]
- 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:
- Nhập họ tên đầy đủ và tên miền email
- Tách họ tên thành các từ
- Lấy tên (từ cuối) và họ (từ đầu)
- Tạo email theo format: tên.họ@domain.com
- 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:
- Nhập đoạn văn từ bàn phím
- Đếm ký tự bằng len() (trừ khoảng trắng nếu cần)
- Đếm từ bằng split()
- Đếm câu bằng số dấu chấm, chấm hỏi, chấm than
- 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:
- Nhập chuỗi cần mã hóa và số bước dịch chuyển
- Duyệt từng ký tự trong chuỗi
- Nếu là chữ cái: dịch chuyển theo alphabet
- Xử lý việc vòng tròn (z → a)
- 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:
- Nhập số điện thoại từ bàn phím
- Loại bỏ khoảng trắng và ký tự đặc biệt
- Kiểm tra độ dài (10-11 số)
- Kiểm tra đầu số hợp lệ (03, 05, 07, 08, 09...)
- Đị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)