課時15:字符串:格式化
目錄:
一、format()
二、格式化操作符:%
三、Python的轉義字符及含義
四、課時15課後習題及答案
***************
一、format()
***************
格式化字符串,就是按照統一的規格去輸出一個字符串。如果規格不統一,就很有可能造成誤會,例如十六進制的10跟十進制的10完全是不同的概念(十六進制的10等於十進制16,二進制10等於十進制2),字符串格式化。正式幫助我們糾正並規範這類問題而存在的。
format()方法接受位置參數和關鍵字參數(位置參數和關鍵字參數在函數章節有詳細的講解),二者均傳遞到一個叫作replacement字段。而這個replacement字段在字符串內由大括號( { } )表示。
>>> "{0} love {1}.{2}".format("I","FishC","com") ‘I love FishC.com‘
仔細看,字符串中的{0}、{1}和{2}應該跟位置有關,依此被format()的三個參數替換,那麽format()的三個參數就叫作位置參數。那什麽是關鍵字參數呢,再來看一個例子:
>>> "{a} love {b}.{c}".format(a="I",b="FishC",c="com") ‘I love FishC.com‘
{a}{b}和{c}就相當於三個標簽,format()將參數中等值的字符串替換出去,這就是關鍵字參數啦。另外,也可以綜合位置參數和關鍵字參數一起使用:
>>> "{0} love {b}.{c}".format("I",b="FishC",c="com") ‘I love FishC.com‘
但是要註意的是,如果把位置參數和關鍵字參數一起綜合起來使用,那麽位置參數必須在關鍵字參數之前,否則就會出錯;
>>> "{a} love {b}.{0}".format(a="I",b="FishC","com") SyntaxError: positional argument follows keyword argument
如果把大括號打印出來,你有辦法嗎?沒錯,這跟字符串轉義字符有點像,只需要用一層大括號包起來即可(要打印轉義字符(\),只需要轉義字符轉義本身(\\)):
>>> "{{0}}".format("不打印") ‘{0}‘
位置參數“不打印”沒有被輸出,這是因為{0}的特殊功能被外層的大括號( { } )剝奪,因此沒有字段可以輸出。註意,這並不會產生錯誤哦。最後再來看另外一個例子:
>>> "{0}:{1:.2f}".format("圓周率",3.14159) ‘圓周率:3.14‘
可以看到,位置參數{1}跟平常有些不同,後邊多了一個冒號。在替換域中,冒號表示格式化符號開始,“.2”的意思是四舍五入到保留兩位小數點,而f的意思是浮點數,所以按照格式化的要求打印除了3.14。
**************************
二、格式化操作符:%
**************************
剛才講的是字符串的格式化方法,現在來談談字符串所獨享的一個操作符:%,有人說,這不是求余數的操作符嗎?是的,沒錯!當%左右均為數字的時候,那麽它表示求余數的操作;但當它出現在字符串中的時候,它表示的是格式化操作符。下表列舉了Python的格式化符號及含義。
符號 說明 %c 格式化字符及其 ASCII 碼 %s 格式化字符串 %d 格式化整數 %o 格式化無符號八進制數 %x 格式化無符號十六進制數 %X 格式化無符號十六進制數(大寫) %f 格式化浮點數字,可指定小數點後的精度 %e 用科學計數法格式化浮點數 %E 作用同 %e,用科學計數法格式化浮點數 %g 根據值的大小決定使用 %f 或 %e %G 作用同 %g,根據值的大小決定使用 %f 或者 %E
下面舉幾個例子供參考:
>>> ‘%c‘%97 ‘a‘ >>> ‘%c%c%c%c%c‘%(70,105,115,104,67) ‘FishC‘ >>> ‘%d轉換為八進制是:%o‘%(123,123) ‘123轉換為八進制是:173‘ >>> ‘%f用科學計數法表示為:%e‘%(149500000,149500000) ‘149500000.000000用科學計數法表示為:1.495000e+08‘
Python還提供了格式化操作符的輔助指令,如下表所示:
符號 說明 m.n m 是顯示的最小總寬度,n 是小數點後的位數 - 用於左對齊 + 在正數前面顯示加號(+) # 在八進制數前面顯示 ‘0o‘,在十六進制數前面顯示 ‘0x‘ 或 ‘0X‘ 0 顯示的數字前面填充 ‘0‘ 取代空格
同樣列舉幾個例子:
>>> ‘%5.1f‘%27.658 ‘ 27.7‘ >>> ‘%.2e‘%27.658 ‘2.77e+01‘ >>> ‘%10d‘%5 ‘ 5‘ >>> ‘%-10d‘%5 ‘5 ‘ >>> ‘%010d‘%5 ‘0000000005‘ >>> ‘%#X‘%100 ‘0X64‘
**********************************
三、Python的轉義字符及含義
**********************************
Python的部分轉義字符已經使用一段時間,是時候來給它做個總結了,見下表:
符號 說明 \‘ 單引號 \" 雙引號 \a 發出系統響鈴聲 \b 退格符 \n 換行符 \t 橫向制表符(TAB) \v 縱向制表符 \r 回車符 \f 換頁符 \o 八進制數代表的字符 \x 十六進制數代表的字符 \0 表示一個空字符 \\ 反斜杠
*******************************
四、課時15課後習題及答案
*******************************
0. 根據說明填寫相應的字符串格式化符號
符 號 說 明 % 格式化字符及其ASCII碼 % 格式化字符串 % 格式化整數 % 格式化無符號八進制數 % 格式化無符號十六進制數 % 格式化無符號十六進制數(大寫) % 格式化定點數,可指定小數點後的精度 % 用科學計數法格式化定點數 % 根據值的大小決定使用%f或者%e % 根據值的大小決定使用%F或者%E
1. 請問以下這行代碼會打印什麽內容?
>>> "{{1}}".format("不打印", "打印")
2. 以下代碼中,a, b, c是什麽參數?
>>> "{a} love {b}.{c}".format(a="I", b="FishC", c="com")
‘I love FishC.com‘
3. 以下代碼中,{0}, {1}, {2}是什麽參數?
>>> "{0} love {1}.{2}".format("I", "FishC", "com") ‘I love FishC.com‘
4. 如果想要顯示Pi = 3.14,format前邊的字符串應該怎麽填寫呢?
‘‘.format(‘Pi = ‘, 3.1415)
動動手:
0. 編寫一個進制轉換程序,程序演示如下(提示,十進制轉換二進制可以用bin()這個BIF):
答案:
測試題答案:
0. 根據說明填寫相應的字符串格式化符號
符 號 說 明 %c 格式化字符及其ASCII碼 %s 格式化字符串 %d 格式化整數 %o 格式化無符號八進制數 %x 格式化無符號十六進制數 %X 格式化無符號十六進制數(大寫) %f 格式化定點數,可指定小數點後的精度 %e 用科學計數法格式化定點數 %E 作用同%e,用科學計數法格式化定點數 %g 根據值的大小決定使用%f或者%e %G 作用同%g,根據值的大小決定使用%F或者%E
1. 請問以下這行代碼會打印什麽內容?
>>> "{{1}}".format("不打印", "打印") ‘{1}‘
2. 以下代碼中,a, b, c是什麽參數?
>>> "{a} love {b}.{c}".format(a="I", b="FishC", c="com") ‘I love FishC.com‘
關鍵字參數
3. 以下代碼中,{0}, {1}, {2}是什麽參數?
>>> "{0} love {1}.{2}".format("I", "FishC", "com") ‘I love FishC.com‘
位置參數
4. 如果想要顯示Pi = 3.14,format前邊的字符串應該怎麽填寫呢?
>>> ‘{0}{1:.2f}‘.format(‘Pi = ‘, 3.1415) ‘Pi = 3.14‘
動動手答案:
0. 編寫一個進制轉換程序
1 q = True 2 while q: 3 num = input(‘請輸入一個整數(輸入Q結束程序):‘) 4 if num != ‘Q‘: 5 num = int(num) 6 print(‘十進制 -> 十六進制 : %d -> 0x%x‘ % (num, num)) 7 print(‘十進制 -> 八進制 : %d -> 0o%o‘ % (num, num)) 8 print(‘十進制 -> 二進制 : %d -> ‘ % num, bin(num)) 9 else: 10 q = False
課時15:字符串:格式化