--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

Python (11) - Một số xử lý trên chuỗi

Bài trước: Python (10) - Chuỗi
-----

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 đầuvị 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ớ:

Lệnh

Ý nghĩa

s[2:5]

Lấy từ 2 đến 4

s[:5]

Lấy từ đầu đến 4

s[2:]

Lấy từ 2 đến hết

s[-5:-2]

Cắt bằng cách đếm ngược từ cuối lên

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:

Command

Meaning

s[2:5]

From index 2 to 4

s[:5]

From start to index 4 

s[2:]

From index 2 to the end 

s[-5:-2]

Slice using reverse counting from the end

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

-----