[ATBS2nd]Chương 1 - Python cơ bản - Phần 21

Chào các bạn,
Chúng ta tiếp tục với phần python cơ bản, ở phần này chúng ta sẽ tìm hiểu kĩ hơn thao tác trên chuỗi(string) trong Python.
Văn bản là một trong những dạng dữ liệu phổ biến nhất mà chương trình của bạn sẽ xử lý. Bạn đã biết cách nối hai giá trị chuỗi cùng với toán tử +, nhưng bạn có thể làm được nhiều hơn thế. Bạn có thể trích xuất một phần chuỗi từ các giá trị chuỗi, thêm hoặc xóa khoảng cách, chuyển đổi chữ cái thành chữ thường hoặc chữ hoa và kiểm tra xem chuỗi có được định dạng chính xác không. Bạn thậm chí có thể viết mã Python để truy cập vào bảng tạm(clipboard) để sao chép và dán văn bản.
Bảng tạm(clipboard) trong windows có được khi bạn bôi đen một dòng văn bản và nhấn Ctrl+C hoặc nhấn phải chuột chọn Copy thì nó sẽ được lưu vào clipboard-được gọi là bảng tạm - chú thích của người dịch.
Trong phần này, bạn sẽ học được tất cả những điều này và hơn thế nữa. Sau đó, bạn sẽ làm việc thông qua hai dự án lập trình khác nhau: một bảng tạm đơn giản lưu trữ nhiều chuỗi văn bản và một chương trình để tự động hóa công việc nhàm chán của các định dạng văn bản.
Làm việc với chuỗi
Chúng ta hãy xem vài cách xử lý của Python với chuỗi, viết , in truy nhập.
String literals
Việc gõ các giá trị chuỗi trong mã Python khá đơn giản: chúng bắt đầu và kết thúc bằng một trích dẫn đơn(dấu '). Nhưng sau đó, làm thế nào bạn có thể sử dụng một trích dẫn(dấu ') trong một chuỗi? Gõ ‘That is Alice’s cat.’ sẽ không được thực hiện đúng, bởi vì Python nghĩ chuỗi kết thúc sau Alice và phần còn lại s cat là mã Python không hợp lệ. May mắn thay, có nhiều cách để gõ chuỗi.
Double quote-dấu trích dẫn kép
Chuỗi có thể bắt đầu và kết thúc với dấu ngoặc kép, giống như chúng làm với dấu ngoặc đơn. Một lợi ích của việc sử dụng dấu ngoặc kép là chuỗi có thể có một ký tự trích dẫn trong đó. Nhập thông tin sau vào command-line:
>>> spam = "That is Alice's cat."
Vì chuỗi bắt đầu bằng một trích dẫn kép, Python biết rằng trích dẫn đơn là một phần của chuỗi và không đánh dấu sự kết thúc của chuỗi. Tuy nhiên, nếu bạn cần sử dụng cả dấu ngoặc đơn và dấu ngoặc kép trong chuỗi, bạn sẽ cần sử dụng các ký tự thoát(escape character).
Escape characters
Một ký tự escape cho phép bạn sử dụng các ký tự mà không thể đưa vào chuỗi. Một ký tự escape bao gồm dấu gạch chéo ngược () theo sau là ký tự bạn muốn thêm vào chuỗi. (Mặc dù bao gồm hai ký tự, nó thường được gọi là ký tự escape số ít.) Ví dụ: ký tự escape cho một trích dẫn là \ '. Bạn có thể sử dụng điều này trong một chuỗi bắt đầu và kết thúc bằng dấu ngoặc đơn. Để xem các ký tự escape hoạt động như thế nào, hãy nhập thông tin sau vào trình command line:
>>> spam = 'Say hi to Bob\'s mother.'
Python biết rằng vì một trích dẫn trong Bob \ 's có dấu gạch chéo ngược, nên nó không phải là một trích dẫn duy nhất có nghĩa là kết thúc giá trị chuỗi. Các ký tự escape \ 'và \ "cho phép bạn đặt các dấu ngoặc đơn và dấu ngoặc kép bên trong các chuỗi của mình, Bảng sau đây liệt kê các ký tự escape bạn có thể sử dụng.
b40
Gõ đoạn mã sau vào command line của bạn

>>> print("Hello there!\nHow are you?\nI\'m doing fine.")
Hello there!
How are you?
I'm doing fine.

Chuỗi nguyên bản - raw strings
Bạn có thể đặt r trước dấu ngoặc kép hoặc đơn bắt đầu của chuỗi làm cho nó thành một chuỗi nguyên bản. Một chuỗi nguyên bản hoàn toàn bỏ qua tất cả các ký tự escape và in bất kỳ dấu gạch chéo ngược nào xuất hiện trong chuỗi. Ví dụ: nhập thông tin sau vào command line:

>>> print(r'That is Carol\'s cat.')
That is Carol\'s cat.

Vì đây là một chuỗi nguyên bản, Python coi dấu gạch chéo ngược là một phần của chuỗi chứ không phải là bắt đầu của một ký tự thoát. Chuỗi nguyên bản rất hữu ích nếu bạn nhập các giá trị chuỗi chứa nhiều dấu gạch chéo ngược, chẳng hạn như các chuỗi được sử dụng cho đường dẫn tệp Windows như r’C:\Users\Al\Desktop’ hoặc các biểu thức thông thường(regular expression) được mô tả trong python tiếp theo.
Chuỗi nhiều dòng với 3 dấu nháy
Mặc dù bạn có thể sử dụng ký tự thoát \n để đặt một dòng mới vào một chuỗi, nhưng việc sử dụng các chuỗi đa dòng thường dễ dàng hơn. Một chuỗi nhiều dòng trong Python bắt đầu và kết thúc bằng ba dấu ngoặc đơn hoặc ba dấu ngoặc kép. Bất kỳ dấu ngoặc kép, tab hoặc dòng mới nào ở giữa ba dấu ngoặc, các quy tắc thụt lề Python cho các khối không áp dụng cho các dòng bên trong một chuỗi nhiều dòng.
Mở trình soạn thảo văn bản và viết như sau:

print('''Dear Alice,
Eve's cat has been arrested for catnapping, cat burglary, and extortion.
Sincerely,
Bob''')

Sau đấy lưu dưới tên catnapping.py và chạy nó, nó sẽ hiển thị ra như sau

Dear Alice,
Eve's cat has been arrested for catnapping, cat burglary, and extortion.
Sincerely,
Bob

Lưu ý rằng ký tự trích dẫn trong Eve’s không cần phải có dấu . Dấu \ ngoặc đơn và dấu ngoặc kép là tùy chọn trong chuỗi nhiều dòng. Hàm print () sau đây sẽ in văn bản giống hệt nhau nhưng không sử dụng chuỗi đa dòng:

print('Dear Alice,\n\nEve\'s cat has been arrested for catnapping, cat
burglary, and extortion.\n\nSincerely,\nBob')

Comment trên nhiều dòng
Trong khi ký tự băm (#) đánh dấu sự bắt đầu của một nhận xét cho phần còn lại của dòng, một chuỗi nhiều dòng thường được sử dụng cho các nhận xét trải dài trên nhiều dòng. Sau đây là mã Python hoàn toàn hợp lệ:

"""This is a test Python program.
Written by Al Sweigart al@inventwithpython.com
This program was designed for Python 3, not Python 2.
"""
def spam():
"""This is a multiline comment to help
	explain what the spam() function does."""
	print('Hello!')

Đặt chỉ mục và cắt chuỗi
Các chuỗi sử dụng các chỉ mục và các lát cắt giống như các danh sách. Bạn có thể nghĩ về chuỗi ‘Hello, world!’ dưới dạng danh sách và mỗi ký tự trong chuỗi dưới dạng một mục có chỉ mục tương ứng.

' H e l l o ,   w o r l  d  ! '
  0 1 2 3 4 5 6 7 8 9 10 11 12

Không gian và dấu chấm than được bao gồm trong số ký tự, nên ‘Hello, world!’ dài 13 ký tự, từ H ở chỉ số 0 đến ! tại chỉ số 12.
Gõ đoạn mã sau vào command line của bạn.

>>> spam = 'Hello, world!'
>>> spam[0]
'H'
>>> spam[4]
'o'
>>> spam[-1]
'!'
>>> spam[0:5]
'Hello'
>>> spam[:5]
'Hello'
>>> spam[7:]
'world!'

Nếu bạn chỉ định một chỉ mục, bạn sẽ nhận được ký tự ở vị trí đó trong chuỗi. Nếu bạn chỉ định một phạm vi từ chỉ số này sang chỉ số khác, chỉ mục bắt đầu được bao gồm và chỉ mục kết thúc thì không. Đó là lý do tại sao, nếu spam là ‘Hello, world!’, Thư spam[0: 5] là ‘Hello’. Chuỗi con bạn nhận được từ spam [0: 5] sẽ bao gồm mọi thứ từ spam[0] đến spam[4], bỏ dấu phẩy ở chỉ mục 5 và khoảng trắng ở chỉ mục 6. Điều này tương tự như cách range (5) sẽ gây ra một vòng lặp for để lặp lại, nhưng không bao gồm 5.
Lưu ý rằng việc cắt một chuỗi không sửa đổi chuỗi gốc. Bạn có thể chụp một lát từ một biến trong một biến riêng biệt. Hãy thử nhập nội dung sau vào command line:

>>> spam = 'Hello, world!'
>>> fizz = spam[0:5]
>>> fizz
'Hello'

Bằng cách cắt và lưu trữ chuỗi con kết quả trong một biến khác, bạn có thể có cả chuỗi và chuỗi con tiện dụng để truy cập nhanh chóng, dễ dàng.
Toán tử in và not in trong chuỗi
Các toán tử innot in có thể được sử dụng với các chuỗi giống như với các giá trị danh sách. Một biểu thức có hai chuỗi được nối bằng cách sử dụng in hoặc not in tham gia sẽ đánh giá thành logic Boolean True hoặc False. Nhập thông tin sau vào command line:

>>> 'Hello' in 'Hello, World'
True
>>> 'Hello' in 'Hello'
True
>>> 'HELLO' in 'Hello, World'
False
>>> '' in 'spam'
True
>>> 'cats' not in 'cats and dogs'
False

Các biểu thức này kiểm tra xem chuỗi đầu tiên (chuỗi chính xác, phân biệt chữ hoa) có thể được tìm thấy trong chuỗi thứ hai hay không.
Đặt chuỗi trong một chuỗi khác
Đặt các chuỗi bên trong các chuỗi khác là một hoạt động phổ biến trong lập trình. Cho đến nay, chúng tôi đã sử dụng toán tử + và nối chuỗi để thực hiện điều này:

>>> name = 'Al'
>>> age = 4000
>>> 'Hello, my name is ' + name + '. I am ' + str(age) + ' years old.'
'Hello, my name is Al. I am 4000 years old.'

Tuy nhiên, điều này đòi hỏi rất nhiều kiểu gõ tẻ nhạt. Một cách tiếp cận đơn giản hơn là sử dụng phép nội suy chuỗi, trong đó toán tử %s bên trong chuỗi đóng vai trò là điểm đánh dấu được thay thế bằng các giá trị theo chuỗi. Một lợi ích của phép nội suy chuỗi là str() không phải được gọi để chuyển đổi giá trị thành chuỗi. Nhập thông tin sau command line:

>>> name = 'Al'
>>> age = 4000
>>> 'My name is %s. I am %s years old.' % (name, age)
'My name is Al. I am 4000 years old.'

Python 3.6 đã giới thiệu chuỗi f, tương tự như nội suy chuỗi ngoại trừ việc sử dụng dấu ngoặc nhọn ({}) thay vì %s, với các biểu thức được đặt trực tiếp bên trong dấu ngoặc. Giống như chuỗi nguyên bản, chuỗi f có tiền tố f trước dấu ngoặc kép bắt đầu. Nhập thông tin sau vào command line:

>>> name = 'Al'
>>> age = 4000
>>> f'My name is {name}. Next year I will be {age + 1}.'
'My name is Al. Next year I will be 4001.'

Nhớ bao gồm tiền tố f; mặt khác, dấu ngoặc nhọn và nội dung của chúng sẽ là một phần của giá trị chuỗi:

>>> 'My name is {name}. Next year I will be {age + 1}.'
'My name is {name}. Next year I will be {age + 1}.'

Tổng hợp cách sử dụng f string


Người dịch: Hungdh

3 Likes