『無為則無心』Python基礎 — 10、Python字串的格式化輸出

繁華似錦Fighting發表於2021-06-27

1、什麼是格式化輸出

資料按照某種特殊的要求輸出,假如字串中有各種格式的資料,要拼接輸出:

  • 如果輸入一個整數,希望整數按照十六進位制,八進位制輸出。
  • 如果輸入一個小數,希望小數保留後面2位數然後輸出。
  • 以科學計數法的方式來輸出小數。
  • 字串的輸出希望在十個格子內輸出,或者左對齊,居中等等

即所謂的格式化輸出就是需要按照一定的格式輸出內容。

2、Python格式化輸出的五種方式

Python的字串變數有五種輸出方式,下面我們分別來介紹一下。

方式一:字串之間用+號拼接

# 字串之間也可以進行加法運算
# 如果將兩個字串進行相加,則會自動將兩個字串拼接為一個字串
a = 'abc' + 'haha' + '哈哈'
print("a = "+ a)  # a = abchaha哈哈


# 字串只能和字串之間用+號進行拼接,
# 不能和其他的型別進行加法運算,如數值型變數。
# 如果做了會出現異常 TypeError: must be str, not int
a = 123 
print("a = "+a)  # 報錯
# 這種寫法在Python中不常見

方式二:print()函式可同時輸出多個字串

# print()函式可同時輸出多個字串
print("hello","ptyhon")  # hello ptyhon

# 這種寫法無論a是什麼型別變數,
# 都能進行拼接字串輸出了。
a = 123
print('a =',a)  # a = 123
b = 18
print("我今年",b,"歲")  # 我今年 18 歲
# 注意:這種輸出方式拼接的字串,拼接的位置會有空格。
# 這種方式在實際開發中也不常用。

方式三:佔位符方式

表示在建立字串時,可以在字串中指定佔位符。

1)常用格式化符號

格式符號 轉換
%s(常用) 字串
%d(常用) 有符號的十進位制整數
%f(常用) 浮點數
%c 字元
%u 無符號十進位制整數
%o 八進位制整數
%x 十六進位制整數(小寫ox
%X 十六進位制整數(大寫OX
%e 科學計數法(小寫e
%E 科學計數法(大寫E
%g %f%e的簡寫
%G %f%E的簡寫

我們常用的格式化符號是前三個,剩下的不用去死記硬背,以後用到的時候可以來筆記中查詢即可。

2)示例

"""
佔位符格式化輸出分為兩個步驟
1. 準備資料(定義輸出變數)
2. 格式化符號輸出資料(執行輸出)
"""

# 1. 今年我的年齡是x歲 -- 整數 %d
# 結果:今年我的年齡是18歲
age = 18
print('今年我的年齡是%d歲' % age)

#如果佔位符沒有新增內容,則原樣輸出佔位符。
#結果:今年我的年齡是%d歲
print('今年我的年齡是%d歲')



# 2. 我的名字是x -- 字串 %s
# 結果:我的名字是TOM
name = 'TOM'
print('我的名字是%s' % name)


# 3. 我的體重是x公斤 -- 浮點數 %f 
# 結果:我的體重是75.500000公斤
weight = 75.5
print('我的體重是%f公斤' % weight)
# 說明%f預設顯示小數點後6位

# %.xf,表示小數點後顯示的小數位數。
# 結果:我的體重是75.50公斤
print('我的體重是%.2f公斤' % weight)


# 4. 我的學號是x -- %d
# 結果:我的學號是1
stu_id = 1
print('我的學號是%d' % stu_id)

# %03d,表示輸出的整數顯示位數,不足以0補全,超出當前位數則原樣輸出
stu_id2 = 1000
print('我的學號是%03d' % stu_id) # 001
print('我的學號是%03d' % stu_id2) # 1000


# 5. 我的名字是x,今年x歲了
# 把前邊的佔位符,按順序在()小括號內進行賦值,用逗號分隔。
# 結果:我的名字是TOM,今年18歲了
print('我的名字是%s,今年%d歲了' % (name, age))

# 我的名字是x,明年x歲了
# 結果:我的名字是TOM,今年19歲了
print('我的名字是%s,明年%d歲了' % (name, age + 1))
# 說明在給佔位符賦值的時候是可以進行運算的。

3)擴充示例

# 接上面練習
# 6. 我的名字是x,今年x歲了,體重x公斤
# 結果:我的名字是TOM,今年18歲了,體重75.50公斤
name = 'TOM'
age = 18
weight = 75.5
print('我的名字是%s,今年%d歲了,體重%.2f公斤,學號是%06d' % (name, age, weight))


# 擴充
# 因為最終結果是以字串輸出完整句子
# 那字串中所有的資料都可以用字串進行佔位輸出
# 我的名字是x,今年x歲了,體重x公斤
# 結果:我的名字是TOM,今年18歲了,體重75.5公斤
print('我的名字是%s,今年%s歲了,體重%s公斤' % (name, age, weight))
# 總結:如果你不太確定應該用什麼,%s永遠起作用,它會把任何資料型別轉換為字串。


# 7、%d佔位符,如果傳入的是小數,只保留整數部分
print('hello %d' % 123.95) # hello 123

# 8、%3.5s字串的長度限制在3-5之間,多了擷取,少了補空格
print('hello %3.5s' % 'abcdefg') # hello abcde
print('hello%3.5s' % 'abc') # helloabc
print('hello%3.5s' % 'ab') # hello ab

# 9、左對齊、右對齊
# 右對齊,取20位,不夠則空格補位
print('%20s' % 'hello python')

# 左對齊,取20位,不夠則空格補位
print('%-20s' % 'hello python')
# 上面兩句程式碼執行結果如下
        hello python
hello python

方式四:f格式化方式(推薦)

格式化字串除了%s,還可以寫為f'{表示式}'

f格式化字串是Python3.6中新增的格式化方法,該方法更簡單易讀,效能更高效。

# 在f格式化字串中可以直接嵌入變數,{ }內就是變數的名稱,也可以進行運算賦值。
age = 18 
name = 'TOM'

# 我的名字是TOM,明年19歲了
# 結果:我的名字是TOM,明年19歲了
print('我的名字是%s,明年%d歲了' % (name, age + 1))

# 我的名字是TOM,明年19歲了
# 結果:我的名字是TOM,明年19歲了
print(f'我的名字是{name},明年{age + 1}歲了')

# 注意:
# 在格式化字串中,所引用的變數一定是被定義過的。
# 如果引用的變數沒有被定義,就會報錯NameError: name 'xx' is not defined
print(f'我的名字是{name},明年{age + 1}歲了,體重{weight}公斤')
# NameError: name 'weight' is not defined

方式五:format()函式方式

通過字串的format()方法進行格式化輸出。

# 1、順序填坑:{} 佔位符
# 輸出結果:姓名是Tom,年齡是20
print('姓名是{},年齡是{}'.format('Tom',20))
 
# 2、下標填坑(自定義順序匹配):
# format方法裡引數的腳標從0開始。
# 輸出結果:姓名是:Tom,年齡是:20
print('姓名是:{1},年齡是:{0}'.format(20,'Tom'))
 
# 3、變數填坑(鍵值匹配):
# 佔位符中的變數名和引數中定義的變數名一一對應。
# 輸出結果:姓名是:Tom,年齡是:20
print('姓名是:{name},年齡是:{age}'.format(name='Tom',age=20))

1)format()函式對齊方式說明

數字 格式 輸出 描述
5 {:0>2} 05 數字補零 (靠右填充左邊, 寬度為2)
5 {:x<4} 5xxx 補x (靠左,填充右邊, 寬度為4)
10 {:x^4} x10x 補x (居中填充, 寬度為4)
13 {:10} 13 右對齊 ( 寬度為10),預設對齊方式
13 {:<10} 13 左對齊 (寬度為10)
13 {:^10} 13 中間對齊 (寬度為10)

說明:

  • 對齊方式直白語法(1):(2)補全的內容(符號)(3)補全方向 (4)字串總寬度
  • (1)冒號:固定寫法
  • (2)補全的內容(符號):自己定義,就是長度不夠的時候,可以補0或者*等。
  • (3)補全方向:<填充右邊,>填充左邊,也就是口向哪邊,就向哪個方向填充,^表示居中。
  • (3)字串總寬度:就是佔位符變數的字元長度,字元長度不夠總寬度,按方向補全(2)定義的符號。
  • 冒號前可定義上邊所說的下標{1:x<4},也可以是變數名{name:x^4}.

2)示例

# 輸出結果
# 姓名是:Tom********
# 年齡是:*********20
print('姓名是:{0:*<11}\n年齡是:{1:*>11}'.format('Tom',20))

# 輸出結果
# 姓名是:****Tom****
# 年齡是:****20*****
print('姓名是:{0:*^11}\n年齡是:{1:*^11}'.format('Tom',20))

3、print()函式結束符

如果設定了print()函式的結束符號,我們可以控制格式化輸出資料的各種展示方式。

print()是Python的一個內建函式,它有哪些具體的引數呢?

如下圖所示:

image

簡單說明:

  • print()函式的作用:列印相應的內容。
  • print()函式的返回值為None。(None的內容可以看之前的總結)
  • file引數:原始的sys.stdout指向控制檯。(其他的看錶中描述,更多的自己去擴充套件。)
  • flush引數:flush值為True或者False,預設為Flase。表示是否立刻將輸出語句輸入到引數file指向的物件中(預設是sys.stdout)。

(1)sep引數

sep引數用來間隔多個物件,預設值是一個空格。

# 使用print()函式,同時輸出多個引數,多個引數之間是預設用空格分隔的。
# 輸出結果:
# hello python
print("hello","python")


# 輸出結果:
# hello***python
# www.baidu.com
print("hello","python",sep="***")
print("www","baidu","com",sep=".")

(2)end引數:結束符

想一想,為什麼兩個print()函式之間會換行輸出?

在Python中print()函式, 預設自帶end="\n"這個換行結束符,所以導致每兩個print()函式之間直接會換行展示,使用者可以按需求更改結束符。

總結:end =什麼就會在輸出的末尾新增什麼,預設值是換行符\n,我們可以換成其他字串。

# print()函式預設結束符end="\n"
# 輸出結果:
# hello
# python
print("hello",end="\n")
print("python",end="\n")

# end引數可以換任何符號,如製表符或者自定義符號
# 輸出結果:
# hello	python***
print("hello",end="\t")
print("python",end="***")

4、補充:Python的輸入函式input()

(1)Python的輸入說明

  • 在Python中,程式接收使用者輸入的資料的功能即是輸入。
  • input()函式是Python中的一個內建函式。
  • Python3.x input()函式接受一個標準輸入資料,返回為 String 型別資料。

提示:如何檢視Python的內建函式

我們安裝好Python的直譯器就在本地有一份官方文件了。

官方文件位置:[開始] —> [所有程式] —> [ Python 3.7] —> [Python 3.7 Manuals (64-bit)]

開啟文件:[The Python Standard Library] —> [Built-in Functions] 即可檢視

如下圖所示:

image

跳轉介面就能夠看到,如下圖:

image

(2)輸入的語法

使用input()函式接收使用者輸入的資訊。

# input()函式中可以設定一個字串作為引數,
# 這個字串將會作為提示文字顯示。
input("input函式給使用者的提示資訊")

(3)輸入的特點

  • 當程式執行到input()函式的時候,需要等待使用者輸入,輸入完成回車之後才繼續向下執行。
  • 在Python中,input()函式接收使用者輸入後,一般儲存到變數,方便使用。
  • 在Python中,input()函式會把接收到的任意使用者輸入的資料都當做字串處理,進行返回。

(4)示例

# 用password變數接收鍵盤輸入的值
password = input('請輸入您的密碼:')

# 輸出接收到的資料到控制檯檢視
print(f'您輸入的密碼是{password}')

# 檢視接到的收資料的資料型別
print(type(password))

控制檯輸出結果如下圖:

image

相關文章