Kiểu dữ liệu chuỗi trong Python - Phần 3

Lập trình Python cơ bản

4.8 (38 đánh giá)
Tạo bởi Kteam Cập nhật lần cuối 3 năm trước 191.707 lượt xem 115 bình luận
Tác giả/Dịch giả: Kteam Nông Thanh Toàn
Học nhanh

Danh sách bài học

Kiểu dữ liệu chuỗi trong Python - Phần 3

Dẫn nhập

Trong bài trước, Kteam đã giới thiệu thêm cho các bạn KIỂU DỮ LIỆU CHUỖI TRONG PYTHON – P2

Ở bài này Kteam lại tiếp tục nói đến KIỂU DỮ LIỆU CHUỖI trong Python. Cụ thể là vấn đề ĐỊNH DẠNG CHUỖI


Nội dung chính

Để đọc hiểu bài này tốt nhất bạn cần:

Trong bài này, chúng ta sẽ cùng tìm hiểu những nội dung sau đây:

  • Giới thiệu về định dạng chuỗi trong Python
  • Định dạng bằng toán tử %
  • Định dạng bằng chuỗi f (f-string)
  • Định dạng bằng phương thức format
  • Câu hỏi củng cố

Giới thiệu về định dang chuỗi trong Python

Với Python, có rất nhiều cách Định dạng chuỗi, và nó vô cùng tuyệt vời. Và ở phần này, Kteam xin được giới thiệu với các bạn ba kiểu định dạng cơ bản và được sử dụng nhiều nhất trong việc định dạng chuỗi.


Định dạng bằng toán tử %

Kiểu định dạng này sẽ là rất quen thuộc nếu bạn từng tiếp xúc với ngôn ngữ lập trình C. Hãy đến với một số ví dụ

Cú pháp:

<chuỗi> (giá trị thứ 1, giá trị thứ 2, .., giá trị thứ n – 1, giá trị thứ n)

Lưu ý:

Không hề có dấu , tách phần chuỗi và phần giá trị cần định dạng

Để hiểu rõ hơn cách hoạt động của cách định dạng này, mời các bạn xem hình sau

Kiểu dữ liệu chuỗi trong Python - Phần 3

Với hình vẽ trên, bạn có thể dễ dàng biết được cách mà nó hoạt động. Đó là từng phần kí hiệu %s sẽ lần lượt được thay thế lần lượt bởi các giá trị nằm trong cặp dấu ngoặc đơn (Đây là kiểu dữ liệu Tuple, sẽ được Kteam giới thiệu ở bài KIỂU DỮ LIỆU TUPLE).

Thêm một số ví dụ minh họa

Nếu các bạn để ý trong các ví dụ. Kteam không chỉ sử dụng mỗi kí hiệu %s, mà còn có %d. Vậy sự khác nhau giữa %s và %d là gì? Liệu có còn kí hiệu % nào khác nữa không?

Kteam sẽ giải đáp cho bạn ngay sau đây

Dưới đây là một số các toán tử % cơ bản trong Python

Kiểu dữ liệu chuỗi trong Python - Phần 3

Có thể bạn sẽ cảm thấy khó hiểu ở hai toán tử %s%r. Mọi thứ trong Python đều là các đối tượng của một lớp nào đó. Do đó nó đều có các phương  thước, thuộc tính riêng. Các đối tượng trong Python luôn luôn có hai phương thức đó là __str__ __repr__.

Tuy các bạn chưa tiếp xúc với hướng đối tượng bao giờ để hiểu được khái niệm này. Nhưng Kteam sẽ viết một lớp đơn giản để giải thích cho bạn hiểu sự khác biệt giữa %r %s.

Vừa rồi, mình đã tạo một lớp với tên là SomeThing, giờ mình sẽ tạo một đối tượng thuộc lớp đó

Đừng vội bối rối! thật ra nó cũng là một giá trị bình thường thôi. Cũng giống như một chuỗi, một con số.

Và giờ, hãy xem giá trị của đối tượng sthing nhé.

Nó có sự khác biệt. Và giờ, ta sẽ thấy sự khác biệt giữa %s và %r

Đó là sự khác biệt giữa %s %r.  Đây là một thứ mà nhiều bạn học Python nhầm lẫn.

Nếu bạn từng học ngôn ngữ C thì ngỡ %s là thay thế cho một chuỗi thì chưa đủ chính xác.

  • %s thay thế cho giá trị của phương thức __str__ tạo nên đối  tượng đó.
  • Còn về %r thì là phương thức __repr__.

Do đó, bạn có thể sử dụng %s hoặc %r với mọi đối tượng trong Python.

Ở kí hiệu %d, nó đơn giản dễ hiểu hơn với hai kí hiệu ta vừa biết qua ở trên. Kí hiệu này chỉ thay thế cho một số.

Như bạn thấy, %d không phù hợp cho số thực, đó là lí do ta có %f


Định dạng bằng chuỗi f (f-string)

Phương pháp định dạng này cho bạn khả năng thay thế một số chỗ ở trong một chuỗi bằng  giá trị của các biến mà bạn đã khởi tạo và có. Và để có thể sử dụng cách này, bạn phải có một chuỗi f.

Một chuỗi f sẽ có cú pháp:

giá trị trong chuỗi

Ví dụ:

Nhưng nó sẽ khác biệt, nếu bạn có một f-string theo kiểu này

Đúng rồi đấy, giá  trị của biến variable được thay thế trong cặp dấu ngoặc nhọn chứa tên của nó. Nếu bạn có biết qua PHP, bạn sẽ thấy cách này tương tự với việc bạn sử dụng cặp dấu “” để định dạng.

Mời các bạn xem hình ảnh minh họa sau đây

Kiểu dữ liệu chuỗi trong Python - Phần 3

Vậy, khi bạn sử dụng chuỗi f, đặt một giá trị biến chưa được khai báo, hoặc có trong chương trình thì sao?

Điều này đặt ra cho bạn một vấn đề, nếu như bạn muốn có chuỗi với nội dung như sau

1: {one}, 2: {two}, 3: {variable}

Và chỉ muốn định dạng mỗi chỗ {variable} thôi thì phải làm sao?

Cách giải quyết là hãy đặt thêm một dấu { kế bên {, còn với } là một dấu }. Tương tự như cách chúng ta muốn có một dấu \ mà để Python hiểu không phải là một kí tự bắt đầu kí tự escape sequence thì sẽ thêm một dấu \. 

Ngoài ra, chuỗi f còn hỗ trợ một cách in giá trị khá đặc biệt, cũng như là hỗ trợ toán tử :=.


Định dạng bằng phương thức format

Cách định dạng này cho phép Python định dạng chuỗi một cách tuyệt vời, không chỉ tốt về mặt nội dung mà còn về thẩm mĩ. Định dạng bằng phương thức format

Đầu tiên là đơn giản nhất

Nếu chỉ tương tự với toán tử %, phương thức này sẽ không có gì nổi bật. Vậy hãy đến với ví dụ tiếp theo

Nếu vẫn còn mơ hồ, bạn hãy xem hình ảnh minh họa sau đây

Kiểu dữ liệu chuỗi trong Python - Phần 3

Giá trị ở vị trí thứ nhất sẽ thay thế cho vị trí thứ nhất ở trong chuỗi, và cứ thế với các giá trị sau.

Và với phương thức này, cũng không quá khắt khe việc số các giá trị bằng số các nơi cần định dạng trong chuỗi. Ta có thể cho dư giá trị

Vẫn chưa thỏa mãn, vì các vị trí đánh số còn chưa đủ rõ ràng, và bạn có khả năng bị nhầm lẫn. Phương thức format vẫn chiều lòng được bạn.

Như đã nói, không chỉ định dạng về nội dung, mà nó còn giúp tang tính thẩm mĩ. Cụ thể là phương thức này giúp bạn định dạng căn lề một cách tuyệt vời.Cách này khá tương tự với việc sử dụng f-string đúng không nào?

Dưới đây là 3 cách căn lề cơ bản của phương thức format

Kiểu dữ liệu chuỗi trong Python - Phần 3


Trong đó
  • c là kí tự bạn muốn thay thế vào chỗ trống, nếu để trống thì sẽ là kí tự khoảng trắng
  • n là số kí tự dùng để căn lề.

Để hiểu rõ hơn hãy đến với ví dụ:

Nhờ việc căn lề bằng phương thức này, bạn sẽ dễ dàng hơn để có thể cho kết quả của bạn đẹp mắt.

Ví dụ*: Hãy tạo một file Python với nội dung sau.

Khi chạy file Python đó, bạn sẽ có kết quả là

Kiểu dữ liệu chuỗi trong Python - Phần 3


Củng cố bài học

Đáp án bài trước

Bạn có thể tìm thấy câu hỏi của phần này tại CÂU HỎI CỦNG CỐ trong bài KIỂU DỮ LIỆU CHUỔI TRONG PYTHON – Phần 2.

  1. Có tổng cộng 6 escape sequence. Và 6 escape sequence này là \
  1. Giá trị là chuỗi rỗng ()
  2. Các phép cắt có kết quả là một chuỗi rỗng là b, c, e

Câu hỏi củng cố

Bằng kiến thức về kiểu dữ liệu chuỗi của bạn. Hãy làm gọn code ở ví dụ * hết mức có thể.

Đáp án của phần này sẽ được trình bày ở bài tiếp theo. Tuy nhiên, Kteam khuyến khích bạn tự trả lời các câu hỏi để củng cố kiến thức cũng như thực hành một cách tốt nhất!   


Kết luận

Sau khi kết thúc bài viết này, bạn đã phần nào biết đến việc ĐỊNH DẠNG CHUỖI TRONG PYTHON. Và nhờ đó có thể tự định dạng nội dung của mình một cách đẹp nhất.

Ở bài viết sau, Kteam sẽ giới thiệu cho bạn về CÁC PHƯƠNG THỨC CỦA KIỂU DỮ LIỆU CHUỖI.

Cảm ơn bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Kiểu dữ liệu chuỗi trong Python - Phần 3 dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Tác giả/Dịch giả

Khóa học

Lập trình Python cơ bản

Lập trình Python cơ bản

Đánh giá

0932110332 đã đánh giá 2 tháng trước

NguyenThanhLiem đã đánh giá khoảng 1 năm trước

Thanks for Free Education

Gami Nguyễn đã đánh giá khoảng 1 năm trước

bai viet bai giang rat de hieu cam on cac anh

Haruchiyo đã đánh giá khoảng 1 năm trước

alvin2101 đã đánh giá 2 năm trước

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Lộc Đinh đã bình luận 8 tháng trước

# phần định dạng
row_1 = '+ {:-<6} + {:-^15} + {:->10} +'.format('', '', '')
row_6 = '| {:<6} | {:^15} | {:>10} |\n| {:<6} | {:^15} | {:>10} |\n| {:<6} | {:^15} | {:>10} |'.format('ID', 'Ho va ten', 'Noi sinh', '123', 'Kteam', 'TP HCM', '6969', 'Kquiz', 'Da Lat')
row= row_1 + "\n" + row_6 + "\n" + row_1

# phần xuất kết quả
print(row)

 

Vicelian đã bình luận khoảng 1 năm trước

# phần định dạng
a= '''+ ------ + --------------- + ---------- +
| ID     |    Ho va ten    |   Noi sinh |
| 123    |     Manh        |    TP HCM  |  
| 6969   |     Kquiz       |    Da Lat  | 
+ ------ + --------------- + ---------- +  '''
# phần xuất kết quả
print(a)
 

ahihi.20 đã bình luận khoảng 1 năm trước

row_6 = '+ {:-<6} + {:-^15} + {:->10} +'.format('', '', '')

row_7 = '| {:^6} | {:^15} | {:^10} |'

print(row_6 +'\n'+ row_7.format('ID','Ho và ten','noi sinh') +'\n'+ row_7.format('65','Minh','Can Tho'))

print(row_7.format('67','Huong','An Giang') +'\n'+ row_1)

Ngắn nữa thì nó dài lê thê thấy ghê. 4 dòng là đẹp :))

hieu0812 đã bình luận khoảng 1 năm trước
print('+ {:-<6} + {:-^15} + {:->10} +'.format('', '', '') +"\n" +'| {:<6} | {:^15} | {:>10} |'.format('ID', 'Ho va ten', 'Noi sinh')+ "\n" +'| {:<6} | {:^15} | {:>10} |'.format('123', 'Kteam', 'TP HCM') +"\n"+'| {:<6} | {:^15} | {:>10} |'.format('6969', 'Kquiz', 'Da Lat') +"\n"+'+ {:-<6} + {:-^15} + {:->10} +'.format('', '', '') )

nhiều lúc thấy nghĩ đơn giản lại thì nó lại hay :D

 

Vicelian đã bình luận khoảng 1 năm trước

# Như vậy hoành thành bài tập chưa vậy ad :v mong ad ra nhiều bài đễ ae nắm vững kiến thức hơn
row_1 = '+ {:-<6} + {:-^15} + {:->10} +\n'.format('', '', '')+'\n''| {:<6} | {:^15} | {:>10} |'
print(row_1.format('ID', 'Ho va ten', 'Noi sinh')+'\n'+row_1.format('123', 'Kteam', 'TP HCM'))
print(row_1.format('6969', 'Kquiz', 'Da Lat')+'\n'+row_1)

Không có video.