2013-04-23 37 views
10

Tôi mới dùng Python và cố gắng làm việc trên một số tập lệnh mẫu. Tôi đang làm một điều loại tiền đăng ký đơn giản nhưng tôi muốn để biện minh hoặc phải gắn kết đầu ra để nó trông giống như sau:Định dạng văn bản được biện minh trong Python 3.3 bằng phương thức .format()

subTotal = 24.95 
tax = subTotal * 0.0725 
total = subTotal + tax 
paid = 30 
change = paid-total 
print("The subtotal was: $",subTotal) 
print("The tax was: $",tax) 
print("The total was: $",total) 
print("The customer paid: $",paid) 
print("Change due: $",change) 

Tôi biết tôi có thể đơn giản hóa này với báo cáo in ít hơn rất nhiều, nhưng tôi chỉ muốn nó được dễ dàng hơn để xem những gì tôi đang cố gắng để làm.

Tôi muốn nó xuất ra một cái gì đó như thế này, nhận thấy rằng số tiền đồng đô la là tất cả các liên kết và rằng không có không gian giữa $ và số tiền đô la. Tôi không biết cách làm hai điều này.

The subtotal was: $24.95 
The tax was:   $1.81 
The total was:  $26.76 
The customer paid: $30.00 
Change due:   $3.24 

Tôi đã thử đọc tài liệu Python cho phương pháp định dạng, nhưng tôi không thấy bất kỳ ví dụ nào về định dạng nào có thể được sử dụng để thực hiện những việc nhất định. Cảm ơn trước sự giúp đỡ nào.

+1

nên 'tổng = SUBTOTAL + tax'? – TerryA

+0

Có, xin lỗi vì lỗi đánh máy đó. Tôi đã sửa chữa nó. – SISYN

Trả lời

7

Số tiền có được formated như thế này:

"${:.2f}".format(amount) 

Bạn có thể thêm padding để một chuỗi, ví dụ đối với chiều rộng 20:

"{:20s}".format(mystring) 

Bạn phải có thể sắp xếp các chuỗi, ví dụ có chiều rộng 7:

"{:>7s}".format(mystring) 

Đưa tất cả điều này với nhau:

s = "The subtotal was:" 
a = 24.95 
print("{:20s}{:>7s}".format(s, "${.2f}".format(a)) 
4

Nếu bạn biết kích thước tối đa của văn bản và số, bạn có thể làm

val_str = '${:.2f}'.format(val) 
print('{:<18} {:>6}'.format(name+':', val_str)) 

Nó được trickier nếu chúng không được biết trước. Dưới đây là một cách tiếp cận, giả sử namesvalues là danh sách:

value_format = '${:.2f}'.format 
name_format = '{}:'.format 
values_fmt = [value_format(val) for val in values] 
names_fmt = [name_format(name) for name in names] 
max_value_len = max(len(x) for x in values_fmt) 
max_name_len = max(len(x) for x in names_fmt) 
for name, val in zip(names_fmt, values_fmt): 
    print('{:<{namelen}} {:>{vallen}}'.format(name, val, 
     namelen=max_name_len, vallen=max_value_len)) 
3
subTotal = 24.95 
tax = subTotal * 0.0725 
total = subTotal + tax 
paid = 30 
change = paid-total 

text = [ 
"The subtotal was:", "The tax was:", "The total was:", 
"The customer paid:", "Change due:" 
] 
value = [ subTotal, tax, total, paid, change ] 

for t,v in zip(text, value): 
    print "{0:<25} ${1:.2f}".format(t, v) 

Output

The subtotal was:   $24.95 
The tax was:    $1.81 
The total was:   $26.76 
The customer paid:  $30.00 
Change due:    $3.24 

Bạn cũng có thể nhận được khoảng cách cần thiết như thế này:

maxLen = max(len(t) for t in text) 
for t,v in zip(text, value): 
    print str("{0:<" + str(maxLen) + "} ${1:.2f}").format(t, v) 
+1

Số tiền không được căn chỉnh đúng trong giải pháp của bạn. –

2

Xem http://docs.python.org/2/library/string.html#grammar-token-width

def myformat(name, value): 
    return "{:<18} {:>6}".format(name, "${:.2f}".format(value)) 
print(myformat("The subtotal was:", subTotal)) 
print(myformat("The tax was:", tax)) 
print(myformat("The total was:", total)) 
print(myformat("The customer paid:", paid)) 
print(myformat("Change due:", change)) 

đầu ra:

The subtotal was: $24.95 
The tax was:  $1.81 
The total was:  $26.76 
The customer paid: $30.00 
Change due:   $3.24 
1
subTotal = 24.95 
tax = subTotal * 0.0725 
total = subTotal + tax 
paid = 30 
change = paid-total 
print("The subtotal was: %8s" % ("$%.2f" % subTotal)) 
print("The tax was:  %8s" % ("$%.2f" % tax)) 
print("The total was: %8s" % ("$%.2f" % total)) 
print("The customer paid:%8s" % ("$%.2f" % paid)) 
print("Change due:  %8s" % ("$%.2f" % change)) 
+0

OP đã yêu cầu phương thức '.format()'. –

Các vấn đề liên quan