1. 程式人生 > >課時15:字符串:格式化

課時15:字符串:格式化

lan .com 答案 鈴聲 糾正 key 我們 轉義 erro

目錄:

    一、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.14format前邊的字符串應該怎麽填寫呢?

‘‘.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.14format前邊的字符串應該怎麽填寫呢?

>>> {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:字符串:格式化