Python基礎之好玩的字串格式化之類C風格

runfox545發表於2019-01-08

今天白月黑羽和大家說說字串格式化,在python3中,字串格式化主要有2種方法,今天先和大家介紹類C風格的printf。

printf 風格

這種方式 和 傳統的C語言printf函式使用一樣的格式化語法。

比如上面的例子裡面,我們使用這種方法可以這樣格式化字串

salary = input('請輸入薪資:')

# 計算出繳稅額,存入變數tax
tax = int(salary) *25/100  
# 計算出稅後工資,存入變數aftertax aftertax = int(salary) *75/100
print('稅前薪資是:%s 元, 繳稅:%s 元, 稅後薪資是:%s 元' %(salary,tax,aftertax))

  

大家執行一下看看,可以發現也能正確的輸出結果。

大家可以發現,和前面的字串拼接不同, 我們使用了下面這樣模板一樣的字串

稅前薪資是:%s 元, 繳稅:%s 元, 稅後薪資是:%s 元

其中 %s 就是模板中的佔位符,表示這個位置先佔著,待會兒要有資料填入到這裡。

然後再提供一個元組,裡面依次存放需要填入到 %s 佔位位置 資料。

這裡是使用變數 (salary,tax,aftertax) 。

%s 是一種格式化符號, Python 直譯器 看到 %s , 就會呼叫內建函式 str(),並將對應的格式化物件作為的引數傳入 , 返回的結果字串填入對應占位符。

簡單說 %s 位置填入的結果,就是呼叫str函式的返回值。

str()內建函式,它的引數幾乎所有內建型別的物件,字串、 整數、 浮點數 、list 等等都可以

所以 我們可以用 %s 為佔位符, 對應的格式化物件, 不僅僅是字串,可以是整數、 浮點數 、list 等等。

格式化字串裡面佔位符的個數 必須 和 後面對應的格式化物件個數相同,

比如

'稅前薪資:%s 元, 繳稅:%s 元, 稅後薪資:%s 元' %(salary,tax,aftertax)

  

佔位符是3個,那麼後面的元組裡面的格式化物件就是3個。

如果佔位符是2個,後面的元組裡面的格式化物件就應該是2個。像這樣

'稅前薪資:%s 元, 繳稅:%s 元' % (salary,tax)

  

如果佔位符是1個,後面的元組裡面的格式化物件就應該是1個。像這樣

'稅前薪資:%s 元' % (salary,)

  

還記得,我們說過, 元組裡面只有1個元素,後面別忘了加個逗號。

像這種只有一個格式化物件的情況下,可以直接就用格式化物件,不需要放到元組裡面,像這樣

'稅前薪資:%s 元' % salary

  

指定寬度和對齊

如果我們需要將下面這樣的3個字串進行格式化

'稅前薪資:%s 元' % 100000
'稅前薪資:%s 元' % 10000
'稅前薪資:%s 元' % 1000

  

得到的結果如下

稅前薪資:100000 元
稅前薪資:10000 元
稅前薪資:1000 元

  

會發現,由於被格式化的數字對應的字串長度不同,導致結果不對齊。這樣的輸出結果顯得不夠美觀。

右對齊

我們可以指定格式化結果的字串長度,比如我想要格式化結果至少10個字元,不足10個字元補空格,就可以這樣

'稅前薪資:%10s 元' % 100000
'稅前薪資:%10s 元' % 10000
'稅前薪資:%10s 元' % 1000

  

%10s 中的 10 就是指定了格式化結果至少10個字元。

得到的結果就是

稅前薪資:    100000 元
稅前薪資:     10000 元
稅前薪資:      1000 元

  

左對齊

如果我們希望是左邊對齊,而不是右邊對齊,就可以加一個 - 好,像這樣

'稅前薪資:%-10s 元' % 100000
'稅前薪資:%-10s 元' % 10000
'稅前薪資:%-10s 元' % 1000

  

可以得到如下結果

稅前薪資:100000     元
稅前薪資:10000      元
稅前薪資:1000       元

  

%d 和 %f

佔位符除了 %s ,還有其它的一些。常見的是 %d 和 %f 。

%d 用在 格式化物件 是 整數的情況 ,比如

'稅前薪資:%d 元' % 10000

  

%f 用在 格式化物件 是 浮點數的情況,比如

'稅前薪資:%f 元' % 10000.32

  

前面我們說過了 %s 也可以用來格式化 整數和 浮點數,但是有些情況下, %d %f 有特別的用處。比如,列印數字的時候,我們指定寬度,而且不足寬度,希望補零,而不是補空格,就可以這樣

'稅前薪資:%010d 元' % 100000
'稅前薪資:%010d 元' % 10000
'稅前薪資:%010d 元' % 1000

  

可以得到如下結果

稅前薪資:0000100000 元
稅前薪資:0000010000 元
稅前薪資:0000001000 元

  

對於小數的格式化,通常使用 %f,如下

'稅前薪資:%010f 元' % 1000.4522
'稅前薪資:%010f 元' % 1008.6621
'稅前薪資:%010f 元' % 1009.3351

  

可以得到如下結果

稅前薪資:1000.452200 元
稅前薪資:1008.662100 元
稅前薪資:1009.335100 元

  

如果我們想保留小數點後面2位數字,就可以加上 .2 像這樣

'稅前薪資:%010.2f 元' % 1000.4522
'稅前薪資:%010.2f 元' % 1008.6621
'稅前薪資:%010.2f 元' % 1009.3351

  

可以得到如下結果

稅前薪資:0001000.45 元
稅前薪資:0001008.66 元
稅前薪資:0001009.34 元

  

另外白月黑羽Python3教程中不斷在加入視訊講解幫助大家學習Python,歡迎大家一起學習

相關文章