11. Một số xử lý trên chuỗi
Ở bài học trước, bạn đã biết, chuỗi là một một mảng các ký tự. Vì là mảng nên bạn có thể duyệt từng phần tử và thực hiện các xử lý trên mỗi phần tử. Phần này, chúng ta sẽ tiếp tục tìm hiểu các xử lý trên chuỗi.
11.1 Kiểm tra chuỗi
Để kiểm tra một ký tự hoặc một chuỗi “con” có xuất hiện trong một chuỗi hay không? Chúng ta sử dụng từ khóa in.
Ví dụ
txt = "Trong cuộc sống, những thứ tốt đẹp nhất lại luôn miễn phí, như sức khỏe, gia đình, tình yêu, tình bạn! Vì vậy, hãy cảm nhận và trải nghiệm."
print("tình bạn" in txt)
# True
print("nóng giận" in txt)
# False
Để kiểm tra một ký tự hoặc một chuỗi “con” không xuất hiện trong một chuỗi? Chúng ta sử dụng từ khóa not in.
Ví dụ
txt = "Trong cuộc sống, những thứ tốt đẹp nhất lại luôn miễn phí, như sức khỏe, gia đình, tình yêu, tình bạn! Vì vậy, hãy cảm nhận và trải nghiệm."
print("vàng bạc" not in txt)
# True
print("tình bạn" not in txt)
# False
11.2 Cắt chuỗi
Trong Python, bạn có thể lấy ra một phần của chuỗi (giống như việc cắt các toa của một đoàn tàu) bằng cách sử dụng cú pháp slice (cắt lát).
Cú pháp cơ bản
Để cắt một đoạn, bạn cần chỉ định vị trí bắt đầu và vị trí kết thúc, ngăn cách nhau bởi dấu hai chấm (:)
ten_bien[bắt_đầu : kết_thúc]
Lưu ý: Ký tự ở vị trí kết_thúc sẽ không được bao gồm trong kết quả. (Lấy từ bắt_đầu đến kết_thúc - 1). Mặc định, vị trí của ký tự đầu tiên trong chuỗi luôn là 0.
Ví dụ: Lấy các ký tự từ vị trí số 2 đến vị trí số 5 (không bao gồm số 5).
b = "Hello, World!"
print(b[2:5])
# Kết quả: "llo"
# (Vị trí 2 là 'l', vị trí 3 là 'l', vị trí 4 là 'o'. Vị trí 5 là dấu phẩy bị bỏ qua)
Cắt từ đầu chuỗi
Nếu bạn để trống vị trí bắt_đầu, Python sẽ hiểu là bạn muốn cắt từ ký tự đầu tiên (vị trí số 0).
Ví dụ: Lấy từ đầu đến vị trí số 5 (không bao gồm số 5).
b = "Hello, World!"
print(b[:5])
# Kết quả: "Hello"
Cắt đến cuối chuỗi
Nếu bạn để trống vị trí kết_thúc, Python sẽ cắt từ vị trí bạn chọn cho đến hết chuỗi.
Ví dụ: Lấy từ vị trí số 2 đến hết.
b = "Hello, World!"
print(b[2:])
# Kết quả: "llo, World!"
Sử dụng chỉ số âm (Negative Indexing)
Đôi khi đếm từ đầu chuỗi rất khó nếu chuỗi quá dài. Python cho phép bạn đếm ngược từ cuối chuỗi lên bằng dấu trừ (-).
- -1 là ký tự cuối cùng
- -2 là ký tự kế cuối...
Ví dụ: Lấy một đoạn ở gần cuối chuỗi.
Cụ thể: Lấy từ chữ "o" (vị trí -5) đến trước chữ "d" (vị trí -2).
b = "Hello, World!"
print(b[-5:-2])
# Kết quả: "orl"
Bảng tóm tắt để dễ nhớ:
11.3 Bài tập và câu hỏi
Bài tập 11a. Viết chương trình cho người dùng nhập một chuỗi bất kỳ, và nhập vào số ký tự cần xóa. Thực hiện xóa từ đầu chuỗi đến hết ký tự thứ n. Xuất các ký tự đã bị xóa.
Đầu vào:
Nhap mot chuoi: hi bac Teo
So ki tu can xoa: 6
Kết quả mong đợi:
hi bac
Bài tập 11b. Viết chương trình cho người dùng nhập một chuỗi bất kỳ. Tạo một chuỗi mới bằng cách ghép ký tự đầu tiên, ở giữa, và cuối của chuỗi do người dùng nhập vào.
Đầu vào:
Nhap vao chuoi:vanteo
Kết quả mong đợi:
Chuoi ket qua: vto
Bài tập 11c. Viết chương trình cho người dùng nhập một chuỗi bất kỳ. Tạo một chuỗi mới bằng cách lấy 3 ký tự ở giữa của chuỗi do người dùng nhập vào.
Đầu vào 1:
Nhap vao chuoi:vanteo
Kết quả mong đợi 1:
Chuoi ket qua: nte
Đầu vào 2:
Nhap vao chuoi:vangteo
Kết quả mong đợi 2:
Chuoi ket qua: ngt
Câu hỏi 11.1 Cho biết kết quả của đoạn mã sau:
x = 'Welcome'
print(x[3:5])
A. lcome
B. come
C. com
D. co
Câu hỏi 11.2 Cho txt = "Hello World". Lệnh nào dùng để lấy từ ký tự từ vị trí 2 đến vị trí 4 (llo)
A. x = txt[2:5]
B. x = txt[2:]
C. x = txt[:5]
D. x = txt[2:4]
Câu hỏi 11.3 Cho biết kết quả của đoạn mã sau:
x = 'Welcome'
print(x[3:])
A. lcome
B. come
C. com
D. co
11. String Operations
In the previous lesson, you learned that a string is an array of characters. Since it is an array, you can iterate through its elements and perform operations on each one. In this section, we will further explore string manipulation techniques.
11.1 String Membership Testing
To check if a character or a "substring" exists within a string, we use the in keyword.
Example:
txt = "In life, the best things are always free, like health, family, love, and friendship! So, feel and experience it."
print("friendship" in txt)
# Output: True
print("anger" in txt)
# Output: False
To check if a character or a "substring" does not exist in a string, use the not in keyword.
Example:
txt = "In life, the best things are always free, like health, family, love, and friendship! So, feel and experience it."
print("gold" not in txt)
# Output: True
print("friendship" not in txt)
# Output: False
11.2 String Slicing
In Python, you can extract a portion of a string (similar to detaching cars from a train) by using the slice syntax.
Basic Syntax
To slice a segment, specify the start index and the end index, separated by a colon (:): variable_name[start : end]
Note: The character at the end index is not included in the result. (The slice goes from start to end - 1). By default, the index of the first character in a string is always 0.
Example:
Get the characters from index 2 to index 5 (index 5 not included).
b = "Hello, World!"
print(b[2:5])
# Output: "llo"
# (Index 2 is 'l', index 3 is 'l', index 4 is 'o'. Index 5 is a comma, which is excluded)
Slice From the Start
If you leave the start index empty, Python assumes you want to start from the first character (index 0). Example: Get characters from the start to index 5 (not included).
b = "Hello, World!"
print(b[:5])
# Output: "Hello"
Slice To the End
If you leave the end index empty, Python will slice from your chosen start position to the very end of the string.
Example:
Get characters from index 2 to the end.
b = "Hello, World!"
print(b[2:])
# Output: "llo, World!"
Negative Indexing
When dealing with long strings, counting from the start can be difficult. Python allows you to count backwards from the end using the minus sign (-).
- -1 is the last character
- -2 is the second to last character
…
Example:
Slice a segment near the end of the string. Specifically: From "o" (index -5) to before "d" (index -2).
b = "Hello, World!"
print(b[-5:-2])
# Output: "orl"
Summary Table:
11.3 Exercises and Questions
Exercise 11a. Write a program that prompts the user to enter a string and the number of characters to delete (n). Delete the first n characters and display the deleted portion.
Input:
Enter a string: hi bac Teo
Number of characters to delete: 6
Expected Output:
hi bac
Exercise 11b. Write a program that prompts the user to enter a string. Create a new string by concatenating the first, middle, and last characters of the input string.
Input:
vanteo
Expected Output:
vto
Exercise 11c. Write a program that prompts the user to enter a string. Create a new string consisting of the 3 middle characters of the input string.
Input 1:
Vanteo
Output 1:
nte
Input 2:
vangteo
Output 2:
ngt
Question 11.1 What is the result of the following code?
x = 'Welcome'
print(x[3:5])
A. come
B. come
C. com
D. co
Question 11.2 Given txt = "Hello World", which command extracts the characters from index 2 to 4 (llo)?
A. x = txt[2:5]
B. x = txt[2:]
C. x = txt[:5]
D. x = txt[2:4]
Question 11.3 What is the result of the following code?
x = 'Welcome'
print(x[3:])
A. come
B. come
C. com
D. co