01/10/2018, 11:58

10 - Định dạng chuỗi trong Python (Phần 3)

#Đị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ĩ.
Đầu tiên là đơn giản nhất

>>> 'a: {}, b: {}, c: {}'.format(1, 2, 3)
'a: 1, b: 2, c: 3'
>>> 'a: %d, b: %d, c: %d' % (1, 2, 3) # tương tự như dùng phương thức format trên
'a: 1, b: 2, c: 3'

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

>>> 'a: {2}, b: {3}, c: {1}'.format('one', 'two', 'three')
'a: two, b: three, c: one'

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

Giá trị ở vị trí thứ nhất sẽ thay thế cho vị trí thứ nhất ở trong chuỗi, và cứ thế.
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ị

>>> 'only one value: {0}'.format(1, 2)
'only one value: 1'
>>> 'only one value: {1}'.format(1, 2)
'only one value: 2'
>>> 'two same values: {0}, {0}'.format(1, 2) # và cũng có thể lặp lại
'two same values: 1, 1'

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.

>>> '1: {one}, 2: {two}'.format(one=111, two=222)
'1: 111, 2: 222'

Cách này khá tương tự với việc sử dụng f-string đúng không nào?
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.
Dưới đây là 3 cách căn lề cơ bản của phương thức format

+---------+-------+
| Căn lề trái  |	{:(c)<n}  |
+---------+-------+
| Căn lề phải |	{:(c)>n}  |
+---------+-------+
| Căn giữa     |  {:(c)^n}  |
+---------+-------+

Với 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, còn n là số kí tự dùng để căn lề. Hãy đến với ví dụ.

>>> '{:^10}'.format('aaaa')  # căn giữa
'   aaaa   '
>>> '{:<10}'.format('aaaa') # căn lề trái
'aaaa      '
>>> '{:>10}'.format('aaaa') # căn lề phải
'      aaaa'
>>> '{:*>10}'.format('aaaa') # căn lề trái, thay thế khoảng trắng bằng kí tự *
'******aaaa'
>>> '{:*<10}'.format('aaaa') # căn lề phải, thay thế khoảng trắng bằng kí tự *
'aaaa******'
>>> '{:*^10}'.format('aaaa') # căn giữa, thay thế khoảng trắng bằng kí tự *
'***aaaa***'

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.

# phần định dạng
row_1 = '+ {:-<6} + {:-^15} + {:->10} +'.format(', ', ')
row_2 = '| {:<6} | {:^15} | {:>10} |'.format('ID', 'Ho va ten', 'Noi sinh')
row_3 = '| {:<6} | {:^15} | {:>10} |'.format('123', 'Yui Hatano', 'Japanese')
row_4 = '| {:<6} | {:^15} | {:>10} |'.format('6969', 'Sunny Leone', 'Canada')
row_5 = '+ {:-<6} + {:-^15} + {:->10} +'.format(', ', ')

# phần xuất kết quả
print(row_1)
print(row_2)
print(row_3)
print(row_4)
print(row_5)

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

#Câu hỏi
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
Nếu bạn rút gọn được từ 5 dòng trở xuống thì bạn đã giải được câu hỏi trên. Còn đây là cách rút gọn ngắn nhất theo mình nghĩ

print('+ {:-<6} + {:-^15} + {:->10} +
'.format(', ', ') + '| {:<6} | {:^15} | {:>10} |
'.format('ID', 'Ho va ten', 'Noi sinh') + '| {:<6} | {:^15} | {:>10} |
'.format('123', 'Yui Hatano', 'Japanese') + '| {:<6} | {:^15} | {:>10} |
'.format('6969', 'Sunny Leone', 'Canada') + '+ {:-<6} + {:-^15} + {:->10} +'.format(', ', '))

Link video của Howkteam


#NEXT
11 - CÁC PHƯƠNG THỨC CHUỖI TRONG PYTHON
#PREVIOUS
9 - ĐỊNH DẠNG CHUỖI TRONG PYTHON (PHẦN 2)

Bài liên quan
0