首頁 > 軟體

Python實現格式化輸出的範例詳解

2022-08-22 14:01:56

一、format格式輸出字串

使用 % 操作符對各種型別的資料進行格式化輸出,這是早期 Python提供的方法。

字串型別(str)提供了 format() 方法對字串進行格式化。format() 方法的語法格式如下:

str.format(args)

在該方法中,str 用於指定字串的顯示樣式;args 用於指定要進行格式轉換的項,如果有多項,之間有逗號進行分割。

在建立顯示樣式模板時,需要使用{}和:來指定預留位置,其完整的語法格式如下:

{ [index][ : [ [fill] align] [sign] [#] [width] [.precision] [type] ] }

格式中用 [] 括起來的引數都是可選引數,即可以使用,也可以不使用。各個引數的含義如下:

  • index:指定:後邊設定的格式要作用到args中第幾個引數值,引數的索引值從 0 開始。如果省略此選項,則會根據 args中引數的先後順序自動分配。
  • fill:指定空白處填充的字元。注意,當填充字元為逗號(,),且作用於整數或浮點數時,該整數(或浮點數)會以逗號分隔的形式輸出,如1000000會輸出為1,000,000。
  • align:指定資料的對齊方式,具體的對齊方式如表1所示。

表 1 align引數及含義

字元含義
<資料左對齊
>資料右對齊
=資料右對齊,同時將符號放置在填充內容的最左側,該選項只對數位型別有效
^資料居中,此選項需和 width 引數一起使用

表 2 sign引數以含義

字元含義
+正數前加正號,負數前加負號
-正數前不加正號,負數前加負號
空格正數前加空格,負數前加負號
#對於二進位制數、八進位制數和十六進位制數,使用此引數,各進位制數前會分別顯示 0b、0o、0x字首;反之則不顯示字首

表 3 type預留位置型別及含義

字元含義
s對字串型別格式化
d十進位制整數
c將十進位制整數自動轉換成對應的 Unicode 字元
e 或者 E轉換成科學計數法後,再格式化輸出
g 或 G自動在 e 和 f(或 E 和 F)中切換
b將十進位制數自動轉換成二進位制表示,再格式化輸出
o將十進位制數自動轉換成八進位製表示,再格式化輸出
x 或者 X將十進位制數自動轉換成十六進位製表示,再格式化輸出
f 或者 F轉換為浮點數(預設小數點後保留 6 位),再格式化輸出
%顯示百分比(預設顯示小數點後 6 位)

二、format格式輸出字串範例

範例1、網站名稱

def func1():
    str = "網站名稱:{:>20s}t網址:{:s}"
    print(str.format("Python中文網", "http://www.python-china.com/"))


if __name__ == '__main__':
    func1()

輸出結果為:

網站名稱:           Python中文網    網址:http://www.python-china.com/

範例2、數值格式化為不同的形式

在實際開發中,數值型別有多種顯示需求,比如貨幣形式、百分比形式等,使用 format() 方法可以將數值格式化為不同的形式。

def func2():
    # 以貨幣形式顯示
    print("貨幣形式:{:,d}".format(1000000))
    # 科學計數法表示
    print("科學計數法:{:E}".format(1200.12))
    # 以十六進位製表示
    print("100的十六進位制:{:#x}".format(100))
    # 輸出百分比形式
    print("0.01的百分比表示:{:.0%}".format(0.01))

if __name__ == '__main__':
    # func1()
    func2()

輸出結果為:

貨幣形式:1,000,000
科學計數法:1.200120E+03
100的十六進位制:0x64
0.01的百分比表示:1%

範例3、{}中不設引數

def func3():
    print("{} {}".format("hello", "world"))  # 不設定指定位置,按預設順序

    print("{0} {1}".format("hello", "world"))  # 設定指定位置

    print("{1} {0} {1}".format("hello", "world"))  # 設定指定位置

if __name__ == '__main__':
    # func1()
    # func2()
    func3()

輸出結果為:

hello world
hello world
world hello world

範例4、 {}中設引數

def func4():
    # 通過變數設定引數
    print("My name is {name},and I am {age} years old!".format(name="zhangsan", age="25"))

    # 通過字典設定引數,需要解包
    info = {"name": "zhangsan", "age": "25"}
    print("My name is {name},and I am {age} years old!".format(**info))

    # 通過列表索引設定引數
    msg = ["zhangsan", "25"]
    print("My name is {0[0]},and I am {0[1]} years old!".format(msg))


if __name__ == '__main__':
    # func1()
    # func2()
    # func3()
    func4()

輸出結果為:

My name is zhangsan,and I am 25 years old!
My name is zhangsan,and I am 25 years old!
My name is zhangsan,and I am 25 years old!

範例5、str.format() 格式化數位

def func5():
    print("{:.2f}".format(3.1415926))  # 保留小數點後兩位

    print("{:+.2f}".format(3.1415926))  # 帶符號保留小數點後兩位

    print("{:+.2f}".format(-1))  # 帶符號保留小數點後兩位

    print("{:.0f}".format(2.71828))  # 不帶小數

    print("{:0>2d}".format(5))  # 數位補零 (填充左邊, 寬度為2)

    print("{:x<4d}".format(5))  # 數位補x (填充右邊, 寬度為4)

    print("{:x<4d}".format(10))  # 數位補x (填充右邊, 寬度為4)

    print("{:,}".format(1000000))  # 以逗號分隔的數位格式

    print("{:.2%}".format(0.25))  # 百分比格式

    print("{:.2e}".format(1000000000))  # 指數記法

    print("|{:>10d}|".format(13))  # 右對齊 (預設, 寬度為10)

    print("|{:<10d}|".format(13))  # 左對齊 (寬度為10)

    print("|{:^10d}|".format(13))  # 中間對齊 (寬度為10)

    print("{}今年{{25}}歲了".format("張三"))  # 使用大括號 {} 來跳脫大括號


if __name__ == '__main__':
    # func1()
    # func2()
    # func3()
    # func4()
    func5()

輸出結果為:

3.14
+3.14
-1.00
3
05
5xxx
10xx
1,000,000
25.00%
1.00e+09
|        13|
|13        |
|    13    |
張三今年{25}歲了

Process finished with exit code 0

三、%格式化輸出範例

範例3.1、整數的輸出

簡單提示:

  • %o —— oct 八進位制
  • %d —— dec 十進位制(digit )
  • %x —— hex 十六進位制
def func6():
    print('%o' % 20)
    print('%d' % 20)
    print('%x' % 20)


if __name__ == '__main__':
    # func1()
    # func2()
    # func3()
    # func4()
    # func5()
    func6()

輸出結果為:

24
20
14

範例3.2、 浮點數輸出

簡單提示:

  • %f —— float 保留小數點後面六位有效數位
  • %.3f,保留3位小數位
  • %e —— 保留小數點後面六位有效數位,指數形式輸出
  • %.3e,保留3位小數位,使用科學計數法
  • %g —— 在保證六位有效數位的前提下,使用小數方式,否則使用科學計數法
  • %.3g,保留3位有效數位,使用小數或科學計數法
def func7():
    print('%f' % 1.11)  # 預設保留6位小數

    print('%.1f' % 1.11)  # 取1位小數

    print('%e' % 1.11)  # 預設6位小數,用科學計數法

    print('%.3e' % 1.11)  # 取3位小數,用科學計數法

    print('%g' % 1111.1111)  # 預設6位有效數位

    print('%.7g' % 1111.1111)  # 取7位有效數位

    print('%.2g' % 1111.1111)  # 取2位有效數位,自動轉換為科學計數法


if __name__ == '__main__':
    # func1()
    # func2()
    # func3()
    # func4()
    # func5()
    # func6()
    func7()

輸出結果為:

1.110000
1.1
1.110000e+00
1.110e+00
1111.11
1111.111
1.1e+03

範例3.3、字串輸出

簡單提示:

  • %s —— string 字串
  • %10s —— 右對齊,預留位置10位
  • %-10s —— 左對齊,預留位置10位
  • %.2s —— 擷取2位字串
  • %10.2s —— 10位預留位置,擷取兩位字串
def func8():
    print('%s' % 'hello world')  # 字串輸出

    print('%20s' % 'hello world')  # 右對齊,取20位,不夠則補位

    print('%-20s' % 'hello world')  # 左對齊,取20位,不夠則補位

    print('%.2s' % 'hello world')  # 取2位

    print('%10.2s' % 'hello world')  # 右對齊,取2位

    print('%-10.2s' % 'hello world')  # 左對齊,取2位


if __name__ == '__main__':
    # func1()
    # func2()
    # func3()
    # func4()
    # func5()
    # func6()
    # func7()
    func8()

輸出結果為:

hello world
         hello world
hello world         
he
        he
he   

範例3.4、格式化輸出使用者資訊

編寫程式,調查使用者的姓名、年齡、職業和薪水,然後格式化輸出使用者資訊,格式如下所示

------------info of 張三------------
Name:張三
Age:24
Job:計算機
Salary:52000
----------------end---------------

def func9():
    name = input("Name:")
    age = int(input("Age:"))
    job = input("Job:")
    salary = int(input("Salary:"))

    msg = """
    ------------info of %s------------
    Name:%s
    Age:%d
    Job:%s
    Salary:%d
    ----------------end---------------
    """ % (name, name, age, job, salary)

    print(msg)


if __name__ == '__main__':
    # func1()
    # func2()
    # func3()
    # func4()
    # func5()
    # func6()
    # func7()
    # func8()
    func9()

輸出結果為:

Name:BLACKPINK
Age:18
Job:sing
Salary:6688

    ------------info of BLACKPINK------------
    Name:BLACKPINK
    Age:18
    Job:sing
    Salary:6688
    ----------------end---------------  

四、完整程式

def func1():
    str = "網站名稱:{:>20s}t網址:{:s}"
    print(str.format("Python中文網", "http://www.python-china.com/"))


def func2():
    # 以貨幣形式顯示
    print("貨幣形式:{:,d}".format(1000000))
    # 科學計數法表示
    print("科學計數法:{:E}".format(1200.12))
    # 以十六進位製表示
    print("100的十六進位制:{:#x}".format(100))
    # 輸出百分比形式
    print("0.01的百分比表示:{:.0%}".format(0.01))


def func3():
    print("{} {}".format("hello", "world"))  # 不設定指定位置,按預設順序

    print("{0} {1}".format("hello", "world"))  # 設定指定位置

    print("{1} {0} {1}".format("hello", "world"))  # 設定指定位置


def func4():
    # 通過變數設定引數
    print("My name is {name},and I am {age} years old!".format(name="zhangsan", age="25"))

    # 通過字典設定引數,需要解包
    info = {"name": "zhangsan", "age": "25"}
    print("My name is {name},and I am {age} years old!".format(**info))

    # 通過列表索引設定引數
    msg = ["zhangsan", "25"]
    print("My name is {0[0]},and I am {0[1]} years old!".format(msg))


def func5():
    print("{:.2f}".format(3.1415926))  # 保留小數點後兩位

    print("{:+.2f}".format(3.1415926))  # 帶符號保留小數點後兩位

    print("{:+.2f}".format(-1))  # 帶符號保留小數點後兩位

    print("{:.0f}".format(2.71828))  # 不帶小數

    print("{:0>2d}".format(5))  # 數位補零 (填充左邊, 寬度為2)

    print("{:x<4d}".format(5))  # 數位補x (填充右邊, 寬度為4)

    print("{:x<4d}".format(10))  # 數位補x (填充右邊, 寬度為4)

    print("{:,}".format(1000000))  # 以逗號分隔的數位格式

    print("{:.2%}".format(0.25))  # 百分比格式

    print("{:.2e}".format(1000000000))  # 指數記法

    print("|{:>10d}|".format(13))  # 右對齊 (預設, 寬度為10)

    print("|{:<10d}|".format(13))  # 左對齊 (寬度為10)

    print("|{:^10d}|".format(13))  # 中間對齊 (寬度為10)

    print("{}今年{{25}}歲了".format("張三"))  # 使用大括號 {} 來跳脫大括號


def func6():
    print('%o' % 20)
    print('%d' % 20)
    print('%x' % 20)


def func7():
    print('%f' % 1.11)  # 預設保留6位小數

    print('%.1f' % 1.11)  # 取1位小數

    print('%e' % 1.11)  # 預設6位小數,用科學計數法

    print('%.3e' % 1.11)  # 取3位小數,用科學計數法

    print('%g' % 1111.1111)  # 預設6位有效數位

    print('%.7g' % 1111.1111)  # 取7位有效數位

    print('%.2g' % 1111.1111)  # 取2位有效數位,自動轉換為科學計數法


def func8():
    print('%s' % 'hello world')  # 字串輸出

    print('%20s' % 'hello world')  # 右對齊,取20位,不夠則補位

    print('%-20s' % 'hello world')  # 左對齊,取20位,不夠則補位

    print('%.2s' % 'hello world')  # 取2位

    print('%10.2s' % 'hello world')  # 右對齊,取2位

    print('%-10.2s' % 'hello world')  # 左對齊,取2位


def func9():
    name = input("Name:")
    age = int(input("Age:"))
    job = input("Job:")
    salary = int(input("Salary:"))

    msg = """
    ------------info of %s------------
    Name:%s
    Age:%d
    Job:%s
    Salary:%d
    ----------------end---------------
    """ % (name, name, age, job, salary)

    print(msg)


if __name__ == '__main__':
    print("------func1------")
    func1()
    
    print("------func2------")
    func2()
    
    print("------func3------")
    func3()
    
    print("------func4------")
    func4()
    
    print("------func5------")
    func5()
    
    print("------func6------")
    func6()
    
    print("------func7------")
    func7()
    
    print("------func8------")
    func8()
    
    print("------func9------")
    func9()

輸出結果為:

D:SoftWarePythonAnaconda3envsspiderpython.exe E:/Document/programmLanguageExper/Python/spider/pythonBase/python基礎.py
------func1------
網站名稱:           Python中文網    網址:http://www.python-china.com/
------func2------
貨幣形式:1,000,000
科學計數法:1.200120E+03
100的十六進位制:0x64
0.01的百分比表示:1%
------func3------
hello world
hello world
world hello world
------func4------
My name is zhangsan,and I am 25 years old!
My name is zhangsan,and I am 25 years old!
My name is zhangsan,and I am 25 years old!
------func5------
3.14
+3.14
-1.00
3
05
5xxx
10xx
1,000,000
25.00%
1.00e+09
|        13|
|13        |
|    13    |
張三今年{25}歲了
------func6------
24
20
14
------func7------
1.110000
1.1
1.110000e+00
1.110e+00
1111.11
1111.111
1.1e+03
------func8------
hello world
         hello world
hello world         
he
        he
he        
------func9------
Name:BLACKPINK
Age:18
Job:SING
Salary:6686

    ------------info of BLACKPINK------------
    Name:BLACKPINK
    Age:18
    Job:SING
    Salary:6686
    ----------------end---------------
    
Process finished with exit code 0

以上就是Python實現格式化輸出的範例詳解的詳細內容,更多關於Python格式化輸出的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com