String trong Python

Bất kỳ ký tự nào nằm trong cặp dấu nháy đơn hoặc nháy kép điều là một String (một chuỗi ký tự). Có nhiều phương thức xử lý chuỗi khác nhau. Để kiểm tra độ dài của một chuỗi, ta sử dụng phương thức len().

letter = 'P'                # Chuỗi có thể là một ký tự đơn lẻ hoặc một loạt các ký tự
print(letter)               # P
print(len(letter))          # 1

greeting = 'Hello, World!'  # String could be  a single or double quote,"Hello, World!"
print(greeting)             # Hello, World!
print(len(greeting))        # 13

sentence = "I hope you are enjoying days of Python Challenge"
print(sentence)

Tạo chuỗi

Để tạo một chuỗi gồm nhiều dòng ta sử dung 3 dấu nháy đơn hoặc 3 dấu nháy kép. Hãy xem ví dụ sau:

# cách 1
multiline_string = '''I am a teacher and enjoy teaching.
I didn't find anything as rewarding as empowering people.
That is why I created days of python.'''
print(multiline_string)

# cách 2
multiline_string = """I am a teacher and enjoy teaching.
I didn't find anything as rewarding as empowering people.
That is why I created days of python."""
print(multiline_string)

Nối chuỗi

Chúng ta có thể nối các chuỗi lại với nhau. Xem ví dụ bên dưới:

first_name = 'Leonel'
last_name = 'Messi'
space = ' '
full_name = first_name  +  space + last_name
print(full_name) # Leonel Messi

# Kiểm tra độ dài của chuỗi
print(len(first_name))  # 6
print(len(last_name))   # 5
print(len(first_name) > len(last_name)) # True
print(len(full_name)) # 12

Escape Sequence

Trong python hoặc các ngôn ngữ lập trình khác, theo sau dấu \ là một ký tự.

  • \n Xuống dòng
  • \t Tab
  • \\ Dấu gạch chéo ngược \
  • \' Dấu nháy đơn `
  • \" Dấu ngoặc kép `
print('I hope everyone is enjoying the Python Challenge.\nAre you ?')
print('Days\tTopics\tExercises')
print('Day 1\t3\t5')
print('Day 2\t3\t5')
print('Day 3\t3\t5')
print('Day 4\t3\t5')
print('This is a backslash  symbol (\\)')
print('In every programming language it starts with \"Hello, World!\"')

# output
I hope every one is enjoying the Python Challenge.
Are you ?
Days	Topics	Exercises
Day 1	5	    5
Day 2	6	    20
Day 3	5	    23
Day 4	1	    35
This is a backslash  symbol (\)
In every programming language it starts with "Hello, World!"

Định dạng

% Operator

Trong python có rất nhiều cách tạo chuỗi. Trong phần này, ta sẽ đề cập đến một số trong số chúng. Toán tử % được sử dụng để định dạng một tập hợp các biến nằm trong một tuple (danh sách có kích thước cố định), cùng với một chuỗi định dạng, chứa văn bản bình thường cùng với "mã chỉ định đối số", các ký hiệu đặc biệt như "%s" , "%d", "%f", "%.f".

  • %s - Chuỗi (hoặc bất kỳ đối tượng nào có biểu diễn chuỗi, như số)
  • %d - Số nguyên
  • %f - Số dấu phẩy động
  • %.f - Số dấu phẩy động với độ chính xác cố định
# Strings
first_name = 'Leonel'
last_name = 'Messi'
language = 'Python'
formated_string = 'I am %s %s. I teach %s' %(first_name, last_name, language)
print(formated_string) # I am Leonel Messi. I teach Python

# Strings và Numbers
radius = 10
pi = 3.14
area = pi * radius ** 2
formated_string = 'The area of circle with a radius %d is %.2f.' %(radius, area)
print(formated_string) #The area of circle with a radius 10 is 314.00.

python_libraries = ['Django', 'Flask', 'Numpy', 'Pandas']
formated_string = 'The following are python libraries:%s' % (python_libraries)
print(formated_string) # "The following are python libraries:['Django', 'Flask', 'Numpy', 'Pandas']"

str.format

Định dạng này được giới thiệu trong phiên bản python 3.

first_name = 'Leonel'
last_name = 'Messi'
language = 'Python'
formated_string = 'I am {} {}. I teach {}'.format(first_name, last_name, language)
print(formated_string) # I am Leonel Messi. I teach Python
a = 4
b = 3

print('{} + {} = {}'.format(a, b, a + b))
print('{} - {} = {}'.format(a, b, a - b))
print('{} * {} = {}'.format(a, b, a * b))
print('{} / {} = {:.2f}'.format(a, b, a / b)) # limits it to two digits after decimal
print('{} % {} = {}'.format(a, b, a % b))
print('{} // {} = {}'.format(a, b, a // b))
print('{} ** {} = {}'.format(a, b, a ** b))

# output
4 + 3 = 7
4 - 3 = 1
4 * 3 = 12
4 / 3 = 1.33
4 % 3 = 1
4 // 3 = 1
4 ** 3 = 64

# Strings  and numbers
radius = 10
pi = 3.14
area = pi * radius ** 2
formated_string = 'The area of a cricle with a radius {} is {:.2f}.'.format(radius, area)
print(formated_string) #The area of a cricle with a radius 10 is 314.00.

f-Strings (Python 3.6+)

Một dạng chuỗi mới khác là nội suy chuỗi, f-string. Các chuỗi bắt đầu bằng f và chúng ta có thể đưa dữ liệu vào các vị trí tương ứng của chúng.

a = 4
b = 3
print(f'{a} + {b} = {a +b}')     # 4 + 3 = 7
print(f'{a} - {b} = {a - b}')    # 4 - 3 = 1
print(f'{a} * {b} = {a * b}')    # 4 * 3 = 12
print(f'{a} / {b} = {a / b:.2f}')# 4 / 3 = 1.33
print(f'{a} % {b} = {a % b}')    # 4 % 3 = 1
print(f'{a} // {b} = {a // b}')  # 4 // 3 = 1
print(f'{a} ** {b} = {a ** b}')  # 4 ** 3 = 64

Ký tự trong chuỗi

  • Tách ký tự: Cách đơn giản nhất để trích xuất các ký tự đơn lẻ từ chuỗi và gán chúng thành các biến tương ứng.
language = 'Python'
a,b,c,d,e,f = language
print(a) # P
print(b) # y
print(c) # t
print(d) # h
print(e) # o
print(f) # n
  • Truy cập các ký tự trong một chuỗi: Trong lập trình đếm bắt đầu từ số không. Do đó, ký tự đầu tiên của chuỗi là chỉ số 0 và ký tự cuối cùng của chuỗi là chiều dài của chuỗi trừ đi một.

Chỉ số trong chuỗi, python cơ bản, các xử lý chuỗi trong python

language = 'Python'

first_letter = language[0]
print(first_letter) # P

second_letter = language[1]
print(second_letter) # y

last_index = len(language) - 1
last_letter = language[last_index]
print(last_letter) # n

Nếu chúng ta muốn lấy các ký tự bắt đầu từ bên phải thì chúng ta có thể sử dụng cách sau:

language = 'Python'

last_letter = language[-1]
print(last_letter) # n

second_last = language[-2]
print(second_last) # o

Cắt chuỗi

Trong python, chúng ta có thể cắt một chuỗi mẹ thành nhiều chuỗi con.

language = 'Python'

first_three = language[0:3] # Bắt đầu từ chỉ mục 0 và lên đến 3 nhưng không bao gồm 3
last_three = language[3:6]
print(last_three) # hon

# Cách khác
last_three = language[-3:]
print(last_three)   # hon

last_three = language[3:]
print(last_three)   # hon

Bỏ qua các ký tự

Có thể bỏ qua các ký tự trong khi cắt bằng cách chuyển đối số bước cho phương thức cắt.

language = 'Python'
pto = language[0,6:2]
print(pto) # Pto

Đảo ngược một chuỗi

Chúng ta có thể dễ dàng đảo ngược các ký tự trong chuỗi trong python bằng cách sau:

greeting = 'Hello, World!'
print(greeting[::-1]) # !dlroW ,olleH

Các phương thức khác

Trong ngôn ngữ lập trình Python, có nhiều phương thức xử lý chuỗi cho phép chúng ta định dạng chuỗi (ta có thể sử dụng dir() để xem các phương thức). Hãy xem một số phương thức xử lý chuỗi trong các ví dụ sau:

  • capitalize(): Chuyển ký tự đầu tiên của chuỗi thành ký tự viết hoa
challenge = 'thirty days of python'
print(challenge.capitalize()) # 'Thirty days of python'
  • count(): trả về số lần xuất hiện của chuỗi con trong chuỗi mẹ, count(substring, start=.., end=..)
challenge = 'thirty days of python'
print(challenge.count('y')) # 3
print(challenge.count('y', 7, 14)) # 1
print(challenge.count('th')) # 2
  • endwith(): Kiểm tra xem một chuỗi mẹ có kết thúc bằng một chuỗi con được chỉ định hay không
challenge = 'thirty days of python'
print(challenge.endswith('on'))   # True
print(challenge.endswith('tion')) # False
  • expandtabs(): Thay thế ký tự tab bằng dấu cách (kích thước tab mặc định là 8). Nó nhận đối số là kích thước của tab
challenge = 'thirty\tdays\tof\tpython'
print(challenge.expandtabs())   # thirty  days    of      python
print(challenge.expandtabs(10)) # thirty    days      of        python
  • find(): Trả về chỉ số gần nhất của lần xuất hiện đầu tiên của một chuỗi con, nếu không tìm thấy thì trả về -1
challenge = 'thirty days of python'
print(challenge.find('y'))  # 5
print(challenge.find('th')) # 0
print(challenge.find('thong')) # -1
  • rfind(): Trả về chỉ số cao nhất của lần xuất hiện đầu tiên của một chuỗi con, nếu không tìm thấy thì trả về -1
challenge = 'thirty days of python'
print(challenge.find('y'))  # 5
print(challenge.find('th')) # 1
print(challenge.find('thong')) # -1
  • format(): định dạng chuỗi gọn gàng hơn bằng cách sử dụng biến trong chương trình (để tìm hiểu thêm về định dạng chuỗi, hãy xem thêm tại đây
first_name = 'Leonel'
last_name = 'Messi'
job = 'teacher'
country = 'Argentina'
sentence = 'I am {} {}. I am a {}. I live in {}.'.format(first_name, last_name, job, country)
print(sentence) # I am Leonel Messi. I am a teacher. I live in Argentina.

radius = 10
pi = 3.14
area = pi * radius ** 2
result = 'The area of a circle with radius {} is {}'.format(str(radius), str(area))
print(result) # The area of a circle with radius 10 is 314.0
  • index(): Trả về chỉ số thấp nhất của một chuỗi con, các đối số bổ sung cho biết chỉ số bắt đầu và kết thúc (mặc định là 0 và độ dài chuỗi - 1)
challenge = 'thirty days of python'
sub_string = 'da'
print(challenge.index(sub_string))  # 7
print(challenge.index(sub_string, 9)) # error
  • rindex(): Trả về chỉ số cao nhất của một chuỗi con, các đối số bổ sung cho biết chỉ số bắt đầu và kết thúc (mặc định là 0 và độ dài chuỗi - 1)
challenge = 'thirty days of python'
sub_string = 'da'
print(challenge.rindex(sub_string))  # 8
print(challenge.rindex(sub_string, 9)) # error
  • isalnum(): Kiểm tra ký tự chữ và ký tự số
challenge = 'ThirtyDaysPython'
print(challenge.isalnum()) # True

challenge = '30DaysPython'
print(challenge.isalnum()) # True

challenge = 'thirty days of python'
print(challenge.isalnum()) # False, khoảng trắng không phải là ký tự chữ và số

challenge = 'thirty days of python 2019'
print(challenge.isalnum()) # False
  • isalpha(): Kiểm tra xem tất cả các phần tử chuỗi có phải là các ký tự trong bảng chữ cái (a-z và A-Z) không
challenge = 'thirty days of python'
print(challenge.isalpha()) # False, khoảng trắng không thuộc nhóm ký tự az AZ
challenge = 'ThirtyDaysPython'
print(challenge.isalpha()) # True
num = '123'
print(num.isalpha())       # False
  • isdecimal(): Kiểm tra xem tất cả các ký tự trong chuỗi có phải là số thập phân (0-9) hay không
challenge = 'thirty days of python'
print(challenge.isdecimal()) # False
challenge = '123'
print(challenge.isdecimal()) # True
challenge = '\u00B2'
print(challenge.isdigit())   # False
challenge = '12 3'
print(challenge.isdecimal()) # False, không được phép khoản trắng
  • isdigit(): Kiểm tra xem tất cả các ký tự trong một chuỗi có phải là số không (0-9 và một số ký tự unicode khác cho các số)
challenge = 'Thirty'
print(challenge.isdigit()) # False
challenge = '30'
print(challenge.isdigit())   # True
challenge = '\u00B2' # ²
print(challenge.isdigit())   # True
  • isnumeric(): Kiểm tra xem tất cả các ký tự trong một chuỗi có phải là số hoặc có liên quan đến số hay không (giống như isdigit(), chỉ cần chấp nhận nhiều ký hiệu hơn, như ½)
num = '10'
print(num.isnumeric()) # True
num = '\u00BD' # ½
print(num.isnumeric()) # True
num = '10.5'
print(num.isnumeric()) # False
  • isidentifier(): Kiểm tra giá trị nhận dạng (kiểm tra tên biến có hợp lệ không)
challenge = '30DaysOfPython'
print(challenge.isidentifier()) # False, Bởi vì bắt đầu bằng một con số
challenge = 'thirty_days_of_python'
print(challenge.isidentifier()) # True
  • islower(): Kiểm tra xem tất cả các ký tự trong chuỗi có phải là chữ thường không
challenge = 'thirty days of python'
print(challenge.islower()) # True
challenge = 'Thirty days of python'
print(challenge.islower()) # False
  • isupper(): Kiểm tra xem tất cả các ký tự trong chuỗi có phải là chữ hoa không
challenge = 'thirty days of python'
print(challenge.isupper()) #  False
challenge = 'THIRTY DAYS OF PYTHON'
print(challenge.isupper()) # True
  • join(): Nối một ký tự với một list
web_tech = ['HTML', 'CSS', 'JavaScript', 'React']
result = '# '.join(web_tech)
print(result) # HTML# CSS# JavaScript# React
  • strip(): Loại (xóa) bỏ tất cả các ký tự đã cho (từ đầu đến cuối chuỗi)
challenge = 'thirty days of pythoonnn'
print(challenge.strip('noth')) # irty days of py
  • replace(): Thay thế chuỗi con bằng một chuỗi đã cho (hay nói các khác là tìm kiếm và thay thế)
challenge = 'thirty days of python'
print(challenge.replace('python', 'coding')) # thirty days of codings
  • split(): Tách chuỗi (tách các từ trong chuỗi thành một list)
challenge = 'thirty days of python'
print(challenge.split()) # ['thirty', 'days', 'of', 'python']

challenge = 'thirty, days, of, python'
print(challenge.split(', ')) # ['thirty', 'days', 'of', 'python']
  • swapcase(): Chuyển đổi tất cả các ký tự chữ hoa thành chữ thường và tất cả các ký tự chữ thường thành các ký tự chữ hoa
challenge = 'thirty days of python'
print(challenge.swapcase())   # THIRTY DAYS OF PYTHON
challenge = 'Thirty Days Of Python'
print(challenge.swapcase())  # tHIRTY dAYS oF pYTHON
  • startwith(): Kiểm tra xem một chuỗi có bắt đầu bằng chuỗi được chỉ định hay không
challenge = 'thirty days of python'
print(challenge.startswith('thirty')) # True

challenge = '30 days of python'
print(challenge.startswith('thirty')) # False

Bài tập

  1. Nối các chuỗi 'Thirty', 'Days', 'Of', 'Python' thành Thirty Days Of Python.
  2. Nối chuỗi 'Coding', 'For', 'All' thành một chuỗi duy nhất, Coding For All.
  3. Khai báo một biến company và gán cho nó một giá trị ban đầu là Coding For All.
  4. In ra biến khai báo ở trên company bằng cách sử dụng print().
  5. In độ dài của chuỗi company bằng phương thức len()print().
  6. Thay đổi tất cả các ký tự thành chữ in hoa bằng cách sử dụng phương thức upper().
  7. Thay đổi tất cả các ký tự thành chữ thường bằng cách sử dụng phương thức Lower().
  8. Sử dụng các phương thức capitalize(), title(), swapcase() để định dạng giá trị của chuỗi Coding For All.
  9. Cắt (slice) từ đầu tiên của chuỗi Coding For All.
  10. Kiểm tra xem chuỗi Coding For All có chứa một từ Coding hay không bằng cách sử dụng index(), find() hoặc các phương pháp khác.
  11. Thay thế từ Coding trong chuỗi Coding For All thành Python.
  12. Thay đổi Python for Everyone thành Python for All bằng cách sử dụng replace hoặc các phương pháp khác.
  13. Tách chuỗi 'Coding For All' bằng cách sử dụng dấu cách làm dấu phân tách (split()).
  14. "Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon" tách chuỗi tại dấu phẩy.
  15. Ký tự ở chỉ số 0 trong chuỗi Coding For All là gì.
  16. Chỉ số cuối cùng của chuỗi Coding For All là gì.
  17. Ký tự nào ở vị trí thứ 10 trong chuỗi "Coding For All".
  18. Tạo một từ viết tắt hoặc một chữ viết tắt cho tên Python For Everyone.
  19. Tạo một từ viết tắt hoặc một chữ viết tắt cho tên Coding For All.
  20. Sử dụng index để xác định vị trí xuất hiện đầu tiên của C trong Coding For All.
  21. Xác định vị trí xuất hiện đầu tiên của F trong Coding For All.
  22. Sử dụng rfind để xác định vị trí của lần xuất hiện cuối cùng của ký tự l trong Coding For All People.
  23. Sử dụng index hoặc find để tìm vị trí xuất hiện đầu tiên của từ 'because' trong câu sau: 'You cannot end a sentence with because because because is a conjunction'.
  24. Sử dụng rindex để tìm vị trí xuất hiện cuối cùng của từ 'because' trong câu sau: 'You cannot end a sentence with because because because is a conjunction'.
  25. Cắt bỏ cụm từ 'because because because' trong câu sau: 'You cannot end a sentence with because because because is a conjunction'.
  26. Tìm vị trí xuất hiện đầu tiên của từ 'because' trong câu sau: 'You cannot end a sentence with because because because is a conjunction'
  27. Chuỗi 'Coding For All' có bắt đầu bằng chuỗi con 'Coding' không?
  28. Chuỗi 'Coding For All' có kết thúc bằng chuỗi con 'Coding' không?
  29. ' Coding For All ' loại bỏ các khoảng trống ở cuối bên trái và bên phải trong chuỗi đã cho.
  30. Biến nào sau đây trả về True khi chúng ta sử dụng phương thức isidentifier(): 30DaysOfPython, thirtydaysof_python
  31. Cho list gồm các thư viện trong python như sau: ['Django', 'Flask', 'Bottle', 'Pyramid', 'Falcon']. Hãy chuyển list đó thành một chuỗi và cách nhau bởi dấu cách.
  32. Sử dụng Escape Sequence để tách các câu sau:

    I am enjoying this challenge.
    I just wonder what is next.
  33. Sử dụng Escape Sequence để viết mẫu sau:

    Name      Age     Country
    Messi     250     Argentina
  34. Sử dụng phương pháp định dạng chuỗi để hiển thị thông tin sau:

    radius = 10
    area = 3.14 * radius ** 2
    The area of a cricle with radius 10 is 314 meters square.
  35. Thực hiện bằng các cách định dạng chuỗi để hiển thị:

    8 + 6 = 14
    8 - 6 = 2
    8 * 6 = 48
    8 / 6 = 1.33
    8 % 6 = 2
    8 // 6 = 1
    8 ** 6 = 262144
© 2019-2021 Phan Nhật Chánh