Cách hiển thị số trong Python

Trong chương này của hướng dẫn Python, chúng ta sẽ xem xét kỹ hơn các cách khác nhau để tạo đầu ra đẹp hơn trong Python. Chúng tôi trình bày tất cả các cách khác nhau, nhưng chúng tôi khuyên bạn nên sử dụng phương thức định dạng của lớp chuỗi mà bạn sẽ tìm thấy ở cuối chương này. "định dạng chuỗi" cho đến nay là cách tiếp cận Pythonic và linh hoạt nhất

Cho đến giờ chúng ta đã sử dụng chức năng in theo hai cách, khi chúng ta phải in ra nhiều hơn hai giá trị

Cách dễ nhất, nhưng không phải là cách thanh lịch nhất

Chúng tôi đã sử dụng tính năng in với danh sách các giá trị được phân tách bằng dấu phẩy để in ra kết quả, như chúng tôi có thể thấy trong ví dụ sau. Tất cả các giá trị được phân tách bằng khoảng trống, đây là hành vi mặc định. Chúng ta có thể thay đổi giá trị mặc định thành một chuỗi tùy ý, nếu chúng ta gán chuỗi này cho tham số từ khóa "sep" của hàm print

q = 459
p = 0.098
print(q, p, p * q) 

ĐẦU RA

459 0.098 44.982

print(q, p, p * q, sep=",")

ĐẦU RA

459,0.098,44.982

print(q, p, p * q, sep=" :-) ")

ĐẦU RA

459 :-) 0.098 :-) 44.982

Ngoài ra, chúng ta có thể phân tích một chuỗi mới từ các giá trị bằng cách sử dụng toán tử nối chuỗi

print(str(q) + " " + str(p) + " " + str(p * q))

ĐẦU RA

459 0.098 44.982

Phương thức thứ hai kém hơn phương thức thứ nhất trong ví dụ này

Đào tạo Python trực tiếp

Cách hiển thị số trong Python

Thưởng thức trang này?

Thấy. Tổng quan về các khóa học Python trực tiếp

đăng ký tại đây

Cách cũ hoặc printf và sprintf không tồn tại

Cách hiển thị số trong Python

Có printf trong Python không? . Để trả lời "Python có chức năng in và không có chức năng printf" chỉ là một mặt của đồng xu hoặc một nửa sự thật. Người ta có thể đi xa hơn để nói rằng câu trả lời này là không đúng. Vì vậy, có một "printf" trong Python? . Với mục đích này, toán tử modulo "%" được lớp chuỗi quá tải để thực hiện định dạng chuỗi. Do đó, nó thường được gọi là toán tử chuỗi modulo (hoặc đôi khi còn được gọi là modulo), mặc dù nó không có nhiều điểm chung với phép tính modulo thực tế trên các số. Một thuật ngữ khác cho nó là "nội suy chuỗi", bởi vì nó nội suy các loại lớp khác nhau (như int, float, v.v.) thành một chuỗi được định dạng. Trong nhiều trường hợp, chuỗi được tạo thông qua cơ chế nội suy chuỗi được sử dụng để xuất giá trị theo cách đặc biệt. Nhưng nó cũng có thể được sử dụng, ví dụ, để tạo định dạng phù hợp để đưa dữ liệu vào cơ sở dữ liệu. Kể từ Python 2. 6 đã được giới thiệu, nên sử dụng định dạng phương thức chuỗi thay vì định dạng kiểu cũ này. Thật không may, chuỗi modulo "%" vẫn có sẵn trong Python3 và tệ hơn nữa, nó vẫn được sử dụng rộng rãi. Đó là lý do tại sao chúng tôi đề cập đến nó rất chi tiết trong hướng dẫn này. Bạn phải có khả năng hiểu nó, khi bạn gặp nó trong một số mã Python. Tuy nhiên, rất có thể một ngày nào đó kiểu định dạng cũ này sẽ bị xóa khỏi ngôn ngữ. Vì vậy, bạn nên làm quen với str. định dạng()

Sơ đồ sau đây mô tả cách hoạt động của toán tử modulo chuỗi


Cách hiển thị số trong Python

Ở phía bên trái của "toán tử modulo chuỗi" có cái gọi là chuỗi định dạng và ở phía bên phải là một bộ có nội dung, được nội suy trong chuỗi định dạng. Các giá trị có thể là chữ, biến hoặc biểu thức số học tùy ý

Cách hiển thị số trong Python

Chuỗi định dạng chứa các trình giữ chỗ. Có hai trong số đó trong ví dụ của chúng tôi. "%5d" và "%8. 2f"

Cú pháp chung cho một trình giữ chỗ định dạng là

________số 8_______


Cách hiển thị số trong Python

Hãy xem các trình giữ chỗ trong ví dụ của chúng tôi. Cái thứ hai "%8. 2f" là mô tả định dạng cho số float. Giống như các trình giữ chỗ khác, nó được giới thiệu bằng ký tự "%". Tiếp theo là tổng số chữ số mà chuỗi phải chứa. Con số này bao gồm dấu thập phân và tất cả các chữ số, i. e. trước và sau dấu thập phân. Số phao của chúng tôi 59. 058 phải được định dạng với 8 ký tự. Phần thập phân của số hoặc độ chính xác được đặt thành 2, i. e. số sau dấu ". " trong trình giữ chỗ của chúng tôi. Cuối cùng, ký tự cuối cùng "f" của trình giữ chỗ của chúng tôi là viết tắt của "float"

Nếu bạn nhìn vào đầu ra, bạn sẽ nhận thấy rằng 3 chữ số thập phân đã được làm tròn. Hơn nữa, số đã được đặt trước trong đầu ra với 3 khoảng trống ở đầu

Trình giữ chỗ đầu tiên "%5d" được sử dụng cho thành phần đầu tiên của bộ dữ liệu của chúng tôi, tôi. e. số nguyên 453. Số sẽ được in với 5 ký tự. Vì 453 chỉ bao gồm 3 chữ số nên đầu ra được đệm bằng 2 khoảng trống ở đầu. Bạn có thể mong đợi một "%5i" thay vì "%5d". Đâu là sự khác biệt? . Không có sự khác biệt giữa "d" và "i" cả hai đều được sử dụng để định dạng số nguyên. Ưu điểm hoặc vẻ đẹp của đầu ra được định dạng chỉ có thể được nhìn thấy nếu có nhiều hơn một dòng được in với cùng một mẫu. Trong ảnh sau, bạn có thể thấy nó trông như thế nào nếu năm số float được in với phần giữ chỗ "%6. 2f" trong các dòng tiếp theo

Cách hiển thị số trong Python

Chuyển đổiÝ nghĩadSố thập phân có chữ ký. iSign số nguyên thập phân. oBát phân không dấu. uObsolete và tương đương với 'd', i. e. số thập phân có dấu. x Thập lục phân không dấu (chữ thường). XUnsigned thập lục phân (chữ hoa). Định dạng số mũ dấu phẩy động (chữ thường). Định dạng số mũ dấu phẩy động (chữ hoa). định dạng thập phân dấu phẩy động. Định dạng thập phân dấu phẩy động. gGiống như "e" nếu số mũ lớn hơn -4 hoặc nhỏ hơn độ chính xác, "f" nếu không. GGiống như "E" nếu số mũ lớn hơn -4 hoặc nhỏ hơn độ chính xác, "F" nếu không. Ký tự đơn (chấp nhận số nguyên hoặc chuỗi ký tự đơn). rString (chuyển đổi bất kỳ đối tượng python nào bằng repr()). chuỗi (chuyển đổi bất kỳ đối tượng python nào bằng chuỗi()). %Không có đối số nào được chuyển đổi, dẫn đến ký tự "%" trong kết quả

Các ví dụ sau đây cho thấy một số trường hợp ví dụ về quy tắc chuyển đổi từ bảng trên

print("%10.3e"% (356.08977))

ĐẦU RA

459 0.098 44.982
0

459 0.098 44.982
1

ĐẦU RA

459 0.098 44.982
2

459 0.098 44.982
3

ĐẦU RA

459 0.098 44.982
4

459 0.098 44.982
5

ĐẦU RA

459 0.098 44.982
6

459 0.098 44.982
7

ĐẦU RA

459 0.098 44.982
8

459 0.098 44.982
9

ĐẦU RA

print(q, p, p * q, sep=",")
0

print(q, p, p * q, sep=",")
1

ĐẦU RA

print(q, p, p * q, sep=",")
2

print(q, p, p * q, sep=",")
3

ĐẦU RA

print(q, p, p * q, sep=",")
4

print(q, p, p * q, sep=",")
5

ĐẦU RA

print(q, p, p * q, sep=",")
6

ví dụ

 

print(q, p, p * q, sep=",")
7

ĐẦU RA

print(q, p, p * q, sep=",")
8

print(q, p, p * q, sep=",")
9

ĐẦU RA

459,0.098,44.982
0

459,0.098,44.982
1

ĐẦU RA

459,0.098,44.982
2

459,0.098,44.982
3

ĐẦU RA

459,0.098,44.982
4

459,0.098,44.982
5

ĐẦU RA

459,0.098,44.982
6

459,0.098,44.982
7

ĐẦU RA

459,0.098,44.982
8

459,0.098,44.982
9

ĐẦU RA

459,0.098,44.982
6

print(q, p, p * q, sep=" :-) ")
1

ĐẦU RA

459,0.098,44.982
8

print(q, p, p * q, sep=" :-) ")
3

ĐẦU RA

print(q, p, p * q, sep=" :-) ")
4

Mặc dù có vẻ như vậy, nhưng định dạng không phải là một phần của chức năng in. Nếu bạn xem xét kỹ hơn các ví dụ của chúng tôi, bạn sẽ thấy rằng chúng tôi đã chuyển một chuỗi được định dạng cho hàm in. Hay nói cách khác. Nếu toán tử modulo chuỗi được áp dụng cho một chuỗi, nó sẽ trả về một chuỗi. Đến lượt chuỗi này được chuyển trong các ví dụ của chúng ta tới hàm in. Vì vậy, chúng ta cũng có thể sử dụng chức năng chuỗi modulo của Python theo cách tiếp cận hai lớp, tôi. e. trước tiên hãy tạo một chuỗi được định dạng, chuỗi này sẽ được gán cho một biến và biến này được chuyển đến hàm in

print(q, p, p * q, sep=" :-) ")
5

ĐẦU RA

print(q, p, p * q, sep=" :-) ")
6

Con đường Pythonic. Phương thức chuỗi "định dạng"

Hàm trợ giúp Python không hữu ích lắm đối với phương thức định dạng chuỗi. Tất cả những gì nó nói là điều này

print(q, p, p * q, sep=" :-) ")
7

Hãy đi sâu vào chủ đề này sâu hơn một chút. Phương thức định dạng đã được thêm vào Python 2. 6. Hình thức chung của phương pháp này trông như thế này

print(q, p, p * q, sep=" :-) ")
8

Mẫu (hoặc chuỗi định dạng) là một chuỗi chứa một hoặc nhiều mã định dạng (các trường sẽ được thay thế) được nhúng trong văn bản cố định. "Các trường được thay thế" được bao quanh bởi dấu ngoặc nhọn {}. Các dấu ngoặc nhọn và "mã" bên trong sẽ được thay thế bằng một giá trị được định dạng từ một trong các đối số, theo các quy tắc mà chúng tôi sẽ chỉ định ngay sau đây. Bất kỳ thứ gì khác không có trong dấu ngoặc nhọn sẽ được in theo nghĩa đen, tôi. e. không có bất kỳ thay đổi nào. Nếu một ký tự ngoặc phải được in, nó phải được thoát ra bằng cách nhân đôi nó. {{ và }}

Có hai loại lập luận cho. phương thức định dạng(). Danh sách các đối số bắt đầu bằng 0 hoặc nhiều đối số vị trí (p0, p1,. ), nó có thể được theo sau bởi 0 hoặc nhiều đối số từ khóa có dạng name=value

Một tham số vị trí của phương thức định dạng có thể được truy cập bằng cách đặt chỉ số của tham số sau dấu ngoặc mở, e. g. {0} truy cập tham số đầu tiên, {1} tham số thứ hai, v.v. Chỉ mục bên trong dấu ngoặc nhọn có thể được theo sau bởi dấu hai chấm và một chuỗi định dạng, tương tự như ký hiệu của chuỗi modulo, mà chúng ta đã thảo luận ở phần đầu của chương hướng dẫn của chúng tôi, e. g. {0. 5d} Nếu các tham số vị trí được sử dụng theo thứ tự chúng được viết, thì các chỉ định đối số vị trí bên trong dấu ngoặc nhọn có thể được bỏ qua, vì vậy '{} {} {}' tương ứng với '{0} {1} {2} . Nhưng chúng cần thiết, nếu bạn muốn truy cập chúng theo các thứ tự khác nhau. '{2} {1} {0}'

Sơ đồ sau đây với một ví dụ sử dụng mô tả cách hoạt động của phương thức chuỗi "định dạng" đối với các tham số vị trí


Cách hiển thị số trong Python

Ví dụ về tham số vị trí

print(q, p, p * q, sep=" :-) ")
9

ĐẦU RA

459 :-) 0.098 :-) 44.982
0

459 :-) 0.098 :-) 44.982
1

ĐẦU RA

459 :-) 0.098 :-) 44.982
2

459 :-) 0.098 :-) 44.982
3

ĐẦU RA

459 :-) 0.098 :-) 44.982
4

459 :-) 0.098 :-) 44.982
5

ĐẦU RA

459 :-) 0.098 :-) 44.982
0

459 :-) 0.098 :-) 44.982
7

ĐẦU RA

459 :-) 0.098 :-) 44.982
8

Trong ví dụ sau, chúng tôi chứng minh cách sử dụng tham số từ khóa với phương thức định dạng

459 :-) 0.098 :-) 44.982
9

ĐẦU RA

print(str(q) + " " + str(p) + " " + str(p * q))
0

Cách hiển thị số trong Python

It's possible to "left or right justify" data with the format method. To this end, we can precede the formatting with a "<" (left justify) or ">" (right justify). We demonstrate this with the following examples:

print(str(q) + " " + str(p) + " " + str(p * q))
1

ĐẦU RA

print(str(q) + " " + str(p) + " " + str(p * q))
2

print(str(q) + " " + str(p) + " " + str(p * q))
3

ĐẦU RA

print(str(q) + " " + str(p) + " " + str(p * q))
4

FlagMeaning#Được sử dụng với các chỉ định o, x hoặc X, giá trị được bắt đầu bằng 0, 0o, 0O, 0x hoặc 0X tương ứng. 0Kết quả chuyển đổi sẽ được đệm bằng 0 cho các giá trị số. -Giá trị chuyển đổi được điều chỉnh trái Nếu không có dấu (dấu trừ e. g. ) sẽ được viết, một khoảng trống được chèn vào trước giá trị. +Ký tự dấu ("+" hoặc "-") sẽ đứng trước chuyển đổi (ghi đè cờ "dấu cách"). OptionMeaning '<'Trường sẽ được căn trái trong khoảng trống có sẵn. Đây thường là mặc định cho chuỗi. '>'Trường sẽ được căn phải trong khoảng trống có sẵn. Đây là mặc định cho các số. '0'Nếu trường chiều rộng có ký tự số 0 ('0') đứng trước, thì tính năng đệm số 0 nhận biết dấu hiệu cho các loại số sẽ được bật.
print(str(q) + " " + str(p) + " " + str(p * q))
5
','Tùy chọn này báo hiệu việc sử dụng dấu phẩy cho dấu phân cách hàng nghìn.
print(str(q) + " " + str(p) + " " + str(p * q))
6
'='Bắt buộc đặt phần đệm sau dấu (nếu có) nhưng trước các chữ số. Điều này được sử dụng để in các trường ở dạng "+000000120". Tùy chọn căn chỉnh này chỉ hợp lệ cho các loại số. '^'Buộc trường được căn giữa trong khoảng trống có sẵn.
Trường sẽ được căn trái trong khoảng trống có sẵn. Đây thường là mặc định cho chuỗi. '>' Trường sẽ được căn phải trong khoảng trống có sẵn. Đây là mặc định cho các số. '0' Nếu trường chiều rộng có ký tự số 0 ('0') đứng trước, thì tính năng đệm số 0 nhận biết dấu hiệu cho các loại số sẽ được bật.
print(str(q) + " " + str(p) + " " + str(p * q))
5 ',' Tùy chọn này báo hiệu việc sử dụng dấu phẩy cho dấu phân cách hàng nghìn.
print(str(q) + " " + str(p) + " " + str(p * q))
6 '=' Buộc đặt phần đệm sau dấu (nếu có) nhưng trước các chữ số. Điều này được sử dụng để in các trường ở dạng "+000000120". Tùy chọn căn chỉnh này chỉ hợp lệ cho các loại số. '^'Buộc trường được căn giữa trong không gian có sẵn

Trừ khi độ rộng trường tối thiểu được xác định, chiều rộng trường sẽ luôn có cùng kích thước với dữ liệu để điền vào, do đó tùy chọn căn chỉnh không có ý nghĩa gì trong trường hợp này

Ngoài ra, chúng tôi có thể sửa đổi định dạng bằng tùy chọn ký hiệu, tùy chọn này chỉ hợp lệ đối với các loại số

OptionMeaning '+' chỉ ra rằng một dấu hiệu nên được sử dụng cho cả số dương cũng như số âm. '-'chỉ ra rằng một dấu hiệu chỉ nên được sử dụng cho các số âm, đó là hành vi mặc định. dấu cách cho biết nên sử dụng dấu cách ở đầu trên các số dương và dấu trừ trên các số âm

Đào tạo Python trực tiếp

Cách hiển thị số trong Python

Thưởng thức trang này?

Thấy. Tổng quan về các khóa học Python trực tiếp

Các khóa học trực tuyến sắp tới

Khái niệm cơ bản về Python cho người mới bắt đầu

Khóa học nâng cao chuyên sâu

Python dành cho kỹ sư và nhà khoa học

Lập trình hướng đối tượng với Python

đăng ký tại đây

Sử dụng từ điển trong "định dạng"

Chúng ta đã thấy trong các chương trước rằng chúng ta có hai cách để truy cập các giá trị được định dạng

Sử dụng vị trí hoặc chỉ mục

print(str(q) + " " + str(p) + " " + str(p * q))
7

ĐẦU RA

print(str(q) + " " + str(p) + " " + str(p * q))
8

Chỉ cần đề cập đến nó một lần nữa. Chúng ta có thể đã sử dụng dấu ngoặc nhọn rỗng trong ví dụ trước. Sử dụng tham số từ khóa

print(str(q) + " " + str(p) + " " + str(p * q))
9

ĐẦU RA

print(str(q) + " " + str(p) + " " + str(p * q))
8

Trường hợp thứ hai cũng có thể được diễn đạt bằng từ điển, như chúng ta có thể thấy trong đoạn mã sau

459 0.098 44.982
1

ĐẦU RA

459 0.098 44.982
2

459 0.098 44.982
3

ĐẦU RA

print(str(q) + " " + str(p) + " " + str(p * q))
8

Dấu "*" kép phía trước dữ liệu sẽ tự động biến dữ liệu thành dạng 'tỉnh="Ontario",capital="Toronto"'. Hãy xem chương trình Python sau

459 0.098 44.982
5

ĐẦU RA

459 0.098 44.982
6

Chúng ta có thể viết lại ví dụ trước bằng cách sử dụng trực tiếp từ điển. Đầu ra sẽ giống nhau

459 0.098 44.982
7

ĐẦU RA

459 0.098 44.982
6

Sử dụng tên biến cục bộ ở "định dạng"

"locals" là một hàm, trả về một từ điển với các biến cục bộ của phạm vi hiện tại, i. e- tên biến cục bộ là khóa của từ điển này và các giá trị tương ứng là giá trị của các biến này

459 0.098 44.982
9

Từ điển được trả về bởilocal() có thể được sử dụng làm tham số của phương thức định dạng chuỗi. Bằng cách này, chúng ta có thể sử dụng tất cả các tên biến cục bộ bên trong chuỗi định dạng

Tiếp tục với ví dụ trước, chúng ta có thể tạo đầu ra sau, trong đó chúng ta sử dụng các biến cục bộ a, b và f

%[flags][width][.precision]type 
0

ĐẦU RA

%[flags][width][.precision]type 
1

Đào tạo Python trực tiếp

Cách hiển thị số trong Python

Thưởng thức trang này?

Thấy. Tổng quan về các khóa học Python trực tiếp

đăng ký tại đây

Các phương thức chuỗi khác để định dạng

Lớp chuỗi chứa các phương thức khác, cũng có thể được sử dụng cho mục đích định dạng. ljust, rjust, center và zfill

Cho S là một chuỗi, 4 phương thức được định nghĩa như sau

%[flags][width][.precision]type 
2
%[flags][width][.precision]type 
3

Trả về S được căn giữa trong một chuỗi có chiều dài chiều rộng. Việc đệm được thực hiện bằng cách sử dụng ký tự điền được chỉ định. Giá trị mặc định là khoảng trắng

%[flags][width][.precision]type 
4

%[flags][width][.precision]type 
5

ĐẦU RA

%[flags][width][.precision]type 
6

%[flags][width][.precision]type 
7

ĐẦU RA

%[flags][width][.precision]type 
8

%[flags][width][.precision]type 
9
print("%10.3e"% (356.08977))
0

Trả về S căn trái trong một chuỗi có độ dài "chiều rộng". Việc đệm được thực hiện bằng cách sử dụng ký tự điền được chỉ định. Nếu không được cung cấp, một khoảng trắng sẽ được sử dụng làm mặc định

ví dụ

print("%10.3e"% (356.08977))
1

ĐẦU RA

print("%10.3e"% (356.08977))
2

print("%10.3e"% (356.08977))
3

ĐẦU RA

print("%10.3e"% (356.08977))
4

print("%10.3e"% (356.08977))
5
print("%10.3e"% (356.08977))
6

Trả về S căn phải trong một chuỗi có chiều dài chiều rộng. Việc đệm được thực hiện bằng cách sử dụng ký tự điền được chỉ định. Giá trị mặc định lại là một khoảng trắng

ví dụ

print("%10.3e"% (356.08977))
7

ĐẦU RA

print("%10.3e"% (356.08977))
8

print("%10.3e"% (356.08977))
9

ĐẦU RA

459 0.098 44.982
00

459 0.098 44.982
01____1_______02

Đệm một chuỗi S với các số 0 ở bên trái, để điền vào trường có chiều rộng đã chỉ định. Chuỗi S không bao giờ bị cắt ngắn. Phương pháp này có thể dễ dàng mô phỏng với rjust

ví dụ

459 0.098 44.982
03

ĐẦU RA

459 0.098 44.982
04

459 0.098 44.982
05

ĐẦU RA

459 0.098 44.982
04

Chuỗi ký tự được định dạng

Trăn 3. 6 giới thiệu các chuỗi ký tự được định dạng. Chúng có tiền tố là 'f'. Cú pháp định dạng tương tự như các chuỗi định dạng được chấp nhận bởi str. định dạng(). Giống như chuỗi định dạng của phương thức định dạng, chúng chứa các trường thay thế được tạo bằng dấu ngoặc nhọn. Các trường thay thế là các biểu thức, được đánh giá trong thời gian chạy, sau đó được định dạng bằng giao thức format(). Dễ hiểu nhất bằng cách xem các ví dụ sau