1. 程式人生 > >小甲魚《零基礎入門學習》Python(15)--格式化

小甲魚《零基礎入門學習》Python(15)--格式化

前言

上節課我們介紹了字串N多種奇葩方法的用法,但是我們唯獨漏掉了format方法,那為何不把format方法和上節課的內容一起講呢? 

因為小甲魚覺得format方法,跟今天的主題是如出一轍的,都是討論字串的格式問題。哎呀,那有些朋友聽到格式化就來勁了,那格式化跟我們的硬碟格式化有關係嗎?  沒有關係的。 

那什麼是字串的格式化呢?又為什麼需要對字串進行格式化呢?  我們舉個小例子,給大家講一下:

某天小甲魚召開了魚c國際安全大會,到會的朋友有來自世界各方各地的精英人士, 
有這個小烏龜啦,有喵星人啦,有汪星人啦,當然還有這個米奇和唐老鴨,哇塞,那氣勢 
簡直就像小甲魚開了個動物園一樣,但是呢,那問題來了,那真是雞同鴨講,驢脣不對馬嘴, 
不知所云,但是呢,小甲魚還是聰明,想辦法把問題解決了,什麼辦法呢? 
小甲魚在各界找一個翻譯,翻譯成普通話之後,再開會,最後呢,大會完美舉行成功。

舉這個例子,是想跟大家說,格式化字串,就是按照統一的規格去輸出,成為一個字串。如果規格不統一,就可能會造成誤會。

例如說,十六進位制的10,十進位制的10 ,二進位制的10完全就是不同的概念。

十六進位制的10 對於 10進位制是等於16 
十進位制的10 對於 10進位制等於10 
二進位制的10 對於 10進位制等於2

所以他們是完全不同概念。字串格式化就是幫助我們糾正規範這類可能出現的問題。

知識點

format 方法,有兩個引數,分別是 位置引數關鍵字引數 

位置引數

>>> "{0} love {1}.{2}".format("I","FishC","com")
'I love FishC.com'

#欄位0,欄位1,欄位2,分別用'{}'括起來,表示'欄位',
#它通過位置引數"I","FishC","com"傳遞給我們的format方法,
#然後再用format方法對字串進行格式化處理,得到了我們最終的目標:'I love FishC.com'

關鍵字引數

>>> "{a} love {b}.{c}".format("I","FishC","com")
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    "{a} love {b}.{c}".format("I","FishC","com")
KeyError: 'a'

#必須新增關鍵字賦值
>>> "{a} love {b}.{c}".format(a="I",b="FishC",c="com")
'I love FishC.com'

 位置引數關鍵字引數一起使用

>>> "{a} love {b}.{c}".format(a="I",b="FishC",c="com")
'I love FishC.com'
>>> "{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:.1f}{1}'.format(27.658,'GB')
'27.7GB'

#為什麼不是列印27.658GB,而是27.7GB呢?
#位置引數跟以前的不一樣,化了點小妝,
#後邊多了一個冒號,在替換域中,
#冒號:表示格式化符號的開始,後邊接的就是格式化符號。

符串格式化符號含義  

符號

說明

%c

格式化字元及其 ASCII 碼
>>> '%c' % 97
'a'
>>> '%c %c %c' % (97,98,99)
'a b c'
>>> '%c,%c,%c' % (97,98,99)
'a,b,c

%s

格式化字串
>> '%s' % 'I love FishC.com'
'I love FishC.com'

%d

格式化整數
>>> '%d + %d = %d' % (4,5,4+5)
'4 + 5 = 9'

%o

格式化無符號八進位制數
>>> '%o' % 10
'12'

%x

格式化無符號十六進位制數
>>> '%x' % 10
'a'

%X

格式化無符號十六進位制數(大寫)
>>> '%X' % 10
'A'

%f

格式化浮點數字,可指定小數點後的精度
>>> '%f' % 27.658
'27.658000'

%e

用科學計數法格式化浮點數
>>> '%e' % 27.658
'2.765800e+01'

%E

作用同 %e,用科學計數法格式化浮點數
>>> '%E' % 27.658
'2.765800E+01'

%g

根據值的大小決定使用 %f 或 %e
>>> '%g' % 27.658
'27.658'
>>> '%g' % 271111111111.6581111111111
'2.71111e+11

%G

作用同 %g,根據值的大小決定使用 %f 或者 %E
>>> '%G' % 27.658
'27.658'
>>> '%G' % 271111111111.6581111111111
'2.71111E+11

格式化操作符輔助命令  

符號

說明

m.n

m 是顯示的最小總寬度,n 是小數點後的位數
>>> '%5.1f' % 27.658
' 27.7'
>>> '%.2e' % 27.658
'2.77e+01'
>>> '%10d' % 5
' 5'#有9個空格在5前面

-

用於左對齊
>> '%-10d' % 5
'5 '#有9個空格在5後面

+

在正數前面顯示加號(+)
>>> '%+d' % 5
'+5'
>>> '%+d' % -5
'-5'

#

在八進位制數前面顯示 '0o',在十六進位制數前面顯示 '0x' 或 '0X'
>>> '%#o' % 10
'0o12'
>>> '%#X' % 109
'0X6D'
>>> '%#d' % 10
'10'

0

顯示的數字前面填充 '0' 取代空格
>>> '%010d' % 5
'0000000005'
>>> '%0-10d' % 5
'5 '有9個空格在5後面
>>> '%0+10d' % -5
'-000000005'

Python 的轉義字元及其含義  

符號

說明

\'

單引號
>>> print('\'')
'

\"

雙引號
>>> print('\"')
"

\a

發出系統響鈴聲
>>> print('\a')

\b

退格符
>>> print('1\bf')
1f

\n

換行符
>>> print('1\nf')
1
f

\t

橫向製表符(TAB)
>>> print('1\tf')
1 f

\v

縱向製表符
>>> print('1\vf')
1f

\r

回車符
>>> print('1\rf')
1
f

\f

換頁符
>>> print('1\f111111')
1111111

\o

八進位制數代表的字元
>>> print('\o1111')
\o1111

\x

十六進位制數代表的字元
>>> print('\x1111')
11

\0

表示一個空字元
>>> print('\01234')

34

\\

反斜槓
>>> print('\\')
\

課後習題

測試題

請問以下程式碼會列印什麼內容?

>>> "{{1}}".format("不列印","列印")

執行結果:
'{1}'

如果想要顯示Pi=3.14,format前邊的字串應該怎麼填寫?

''.format('Pi = ', 3.1415)


>>> '{0}{1:.2f}'.format('pi= ',3.1415)
'pi= 3.14'

動動手

編寫一個進位制轉換程式,程式演示如下(提示,十進位制轉換二進位制可以用bin()這個BIF)

while True:
    temp=input("請輸入一個整數:")
    if temp=='Q':
        break
    else:
        if temp.isdigit():
            int_num=int(temp)
            print('十進位制->十六進位制:',int_num,'->','%#x' % int_num)
            print('十進位制->八進位制: ',int_num,'->','%#o' % int_num)
            print('十進位制->二進位制: ',int_num,'->','->',bin(int_num))
        else:
            print('抱歉',end="")