格式化輸出

1. 轉換字串

如果在字串中,使用由「%」符號開頭,而以csdxfeg型態字元結束,中間依需求可參雜 +-、數字以及小數點等修飾字元所成的集合稱為「轉換字串」。轉換字串是當print()函式將字串內資料顯示時,碰到轉換字串時,會由接在後面的引數串列中依序將對應的引數,以轉換字串所指定的資料格式在此處顯示其值。

2. str.format()方法

  1. Python 2.6版後提供字串的format()方法,也可以用來格式化輸出內容。format()是屬於字串物件的方法。

    語法:print(’ …{[n] }… ‘.format(引數列))

    字串內要代入的文字以大括弧「{n}」作代表,n值由0開始依序編寫,執行時會依照編號,依序代入括弧內的引數;亦可不填編號,程式執行時會讀取對應引數列依序代入。引數列中的引數,可以使用常值或是變數。

    [例]字串的格式化輸出(檔名:format_1.py)

    s1 = '電車月票 '
    s2 = 1280
    print('項目:{0} 金額: {1}元'.format(s1,s2))
    1. 編號可以重複使用,例如: print('{0}{0}{1}'.format('吃','菓')),執行時會顯示 「吃吃菓」
    2. 編號必要時也可以不依照順序,例如: print('{0}{1}{0}'.format('排','一')),執行時會顯示 「排一排」
  2. 如果覺得使用編號不夠直覺,也可以使用有意義的欄位名稱,語法如下:
    語法:print(...(欄位名稱).. ..'.format(欄位名稱=引數))

    [例] 字串的格式化輸出。(檔名:format_2.py)

    str1 = '張三'
    num1 = 17
    print('我是{name}今年{age}歲'.format(name = str1, age = num1)) # 我是張三今年17歲

    說明

    1. 欄位名稱可以利用字典來定義,字典名稱前要加 「**」,例如 :
      data ={‘title’:‘茂谷柑’,‘price’:60}
      print(‘{title}每斤 {price} 元’.format(**data)), 會顯示 「茂谷柑每斤 60 元」。
    2. 也可以使用串列定義引數,使用時編號來代表串列名稱,例如:
      data = [“黑葉荔枝”,“85”]
      print(‘{0[0]}每斤 {0[1]} 元’.format(data)), 會顯示「黑葉荔枝每斤 85 元」。
  3. 大括弧內的編號或欄位名稱後,可以加上轉換字串來指定輸出格式,來強化輸出的功能。語法如下:

    語法:print('...{編號|欄位名稱:轉換字串}...'.format(參數列))

    轉換字串前要以「:」起始,轉換字串的語法如下:
    語法::[修飾字元][寬度][.小數位數]型別字元

    • 型別字元用來指定輸出資料的型別、型別必須與相對應引數的資料型別一致,下表是常用的型別字元:

    • 轉換字串中常用的修飾字元如下表所示:

      [例] 字串的格式化輸出。(檔名:format_3.py)

      s = '字串'
      i = 1000
      p = 0.666666
      print('{:.2f}'.format(p))
      print('{:,}'.format(i*i))
      print('{:.2%}'.format(p))
      print('{:.0f}'.format(p))
      print('|{:6}|'.format(s))
      print('|{:6}|'.format(i))
      print('|{:>6}|'.format(s))
      print('|{:<6}|'.format(i))
      print('{:$^6}'.format(i))
      print('{0}{{}}'.format('顯示{}'))

  4. Python 3.6 版之後新增了格式化字串常值(Formatted String Literal)簡稱為 f-strings,可以直接將運算式嵌入在字串常值中,語法如下:

    print(f'字串{變數名稱:轉換字串}')

    [例] 輸出兩個整數相加的值。

    x, y = 10, 15
    print(f'{x}+{y}={x+y}') #輸出:10+15=25

    [例] 輸出英文姓名(使用capitalize()函式將第一個字母大寫)。

    name = 'jack'
    print(f'我的名字是{name.capitalize()}')

    簡例 (檔名:interest.py)
    使用者輸入存款金額(整數)、年利率(浮點數)和年數(整數)後,會計算並顯示
    單利的本利和。輸出時金額使用千分位顯示,年利率顯示到小數二位,年數的寬
    度設為3,本利和輸出格式為寬度設為9,左側空白自動補零,整數部分用千分位
    顯示。

    # -*- coding: utf-8 -*-
    money = int(input('請輸入存款金額:'))
    rate = float(input('請輸入年利率:'))
    years = int(input('請輸入年數:'))
    print(f'{money:,}元年利率{rate:.2f}% \n{years:3}年', end='')
    print(f'本利和為{money+money*rate/100*years:09,}元')

3. format()函式

format()函式是Python 內建的函式,可以用來格式化輸出內容。語法如下:

語法:format(value, 格式字串)

  1. value引數是要格式化的資料,資料型別可以是數值或字串。

  2. 格式字串引數是指定格式的字串,其用法和前面介紹字串的format()方法大致相同。

  3. format()函式傳回值的資料型別為字串。

    [例] 使用format()函式格式化輸出:(檔名:format_4.py)

    print(format(123.45, '.1f'))   # 輸出: 123.5
    print(format('Python', '>8s')) # 輸出 : △△Python(△ 表空格)  
    print(format('金額', '^6s') + format(12345.678, '012,.2f') + '元') # 輸出: △△金額△△0,012,345.68元(△ 表空格)

4. 常用的字串方法

Python 內建許多字串的方法,幾乎所有常用的字串操作都包含其中。下表中字串方法皆以s1s2 兩個字串常值為例來說明:

檔名: str_fun.py

s1 = 'python內建函式可以對字串做字串轉換、字串搜尋、字串分割。'
s2 = 'hello world!'










相關主題與延伸閱讀