String là một kiểu dữ liệu trong Python, được sử dụng để đại diện cho các chuỗi ký tự. Các chuỗi trong Python được bao quanh bởi dấu nháy đơn ('') hoặc dấu nháy kép (""). Người dùng có thể thực hiện nhiều thao tác với chuỗi như cắt chuỗi, nối chuỗi, tìm kiếm chuỗi, thay thế chuỗi, chuyển đổi chuỗi thành các ký tự hoa hoặc thường, và nhiều thao tác khác. Ngoài ra, Python cũng hỗ trợ chuỗi định dạng, cho phép người dùng chèn các giá trị khác vào trong chuỗi một cách dễ dàng. Chuỗi trong Python là một trong những kiểu dữ liệu cơ bản và quan trọng, thường được sử dụng trong nhiều ứng dụng Python khác nhau.
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.
That is why I created days of python.'''
print(multiline_string)
# cách 2
multiline_string = """I am a teacher and enjoy teaching.
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.
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
- Nối các chuỗi 'Thirty', 'Days', 'Of', 'Python' thành Thirty Days Of Python.
- Nối chuỗi 'Coding', 'For', 'All' thành một chuỗi duy nhất, Coding For All.
- Khai báo một biến company và gán cho nó một giá trị ban đầu là Coding For All.
- In ra biến khai báo ở trên company bằng cách sử dụng
print()
. - In độ dài của chuỗi company bằng phương thức
len()
vàprint()
. - 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().
- 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().
- Sử dụng các phương thức
capitalize()
,title()
,swapcase()
để định dạng giá trị của chuỗi Coding For All. - Cắt (slice) từ đầu tiên của chuỗi Coding For All.
- 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. - Thay thế từ Coding trong chuỗi Coding For All thành Python.
- 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.
- 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()
. - "Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon" tách chuỗi tại dấu phẩy.
- Ký tự ở chỉ số 0 trong chuỗi Coding For All là gì.
- Chỉ số cuối cùng của chuỗi Coding For All là gì.
- Ký tự nào ở vị trí thứ 10 trong chuỗi "Coding For All".
- Tạo một từ viết tắt hoặc một chữ viết tắt cho tên Python For Everyone.
- Tạo một từ viết tắt hoặc một chữ viết tắt cho tên Coding For All.
- Sử dụng index để xác định vị trí xuất hiện đầu tiên của C trong Coding For All.
- Xác định vị trí xuất hiện đầu tiên của F trong Coding For All.
- 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.
- 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'.
- 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'.
- 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'.
- 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'
- Chuỗi 'Coding For All' có bắt đầu bằng chuỗi con 'Coding' không?
- Chuỗi 'Coding For All' có kết thúc bằng chuỗi con 'Coding' không?
- ' 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.
- Biến nào sau đây trả về True khi chúng ta sử dụng phương thức
isidentifier()
: 30DaysOfPython, thirty_days_of_python - 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.
- Sử dụng Escape Sequence để tách các câu sau:
I am enjoying this challenge. I just wonder what is next.
- Sử dụng Escape Sequence để viết mẫu sau:
Name Age Country Messi 250 Argentina
- 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.
- 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