韓梅梅學python之一:python3中f-string 格式化固定寬度的數字

書接上回html

看到工程師李雷能用一行命令,更新flutter工程下全部圖標python

韓梅梅深入的體會到,這(zhe)門(ge)語(nan)言(ren)如此優秀,必定不能錯過。post

因而找到李雷:spa

韓梅梅:「李雷,上次見到你用python更新圖標,感受好棒啊」
李雷:「Python確實是很好用的」
韓梅梅:「我能學會嗎」
李雷:「有我在,怎麼可能學不會呢?咱們先從最簡單的Hello world開始吧」
......
複製代碼

如切如磋,如琢如磨

通過一通折騰,韓梅梅望着屏幕有些不滿設計

第1次 Hello world
第2次 Hello world
...
第8次 Hello world
第9次 Hello world
第10次 Hello world
第11次 Hello world
第12次 Hello world

韓梅梅:「怎麼不齊呢,好心塞」
李雷:「別擔憂,剛纔咱們用的f-string,它提供了固定寬度的格式化方法,只要在須要固定寬度的變量後面加上冒號和表明寬度數字就能夠了。」
複製代碼

修改前

def without_fix(base_index):
    i = 0
    while i < ROW_COUNT:
        print(f'第{base_index+i}次 Hello world')
        i += 1

複製代碼

修改後

def with_fix2(base_index):
    i = 0
    while i < ROW_COUNT:
        print(f'第{base_index+i:2}次 Hello world with_fix2({base_index})')
        i += 1

複製代碼

運行結果:

...
第 8次 Hello world with_fix2(8)
第 9次 Hello world with_fix2(8)
第10次 Hello world with_fix2(8)
第11次 Hello world with_fix2(8)
第12次 Hello world with_fix2(8)
第13次 Hello world with_fix2(8)
...

韓梅梅:「這個 ‘第 8次’裏面8前面空了個位置,8又不能居中,好心塞」
複製代碼

百尺竿頭 更進一步

韓大設計師的心,真的是,很容易塞啊。code

不過,這難不倒李雷,通過一番努力終於知足了韓梅梅。htm

第08次 Hello world with_fix02(8)
第09次 Hello world with_fix02(8)
第10次 Hello world with_fix02(8)
第11次 Hello world with_fix02(8)
第12次 Hello world with_fix02(8)
第13次 Hello world with_fix02(8)

韓梅梅:「舒服,雷哥好棒,你是怎麼作到的」
李雷:「你看看我改的地方就明白了,第{base_index+i:02}次裏面的0表明用0填充空位。」

複製代碼
print(f'第{base_index+i:02}次 Hello world with_fix02({base_index})')
複製代碼

乘勝追擊 窮追猛打

其實咱們還能夠作的更好。讓python本身判斷最大寬度是多大。文檔

def with_auto_fix(base_index):
    MAX_NUM = base_index+ROW_COUNT
    MAX_WIDTH = len(f"{MAX_NUM}")
    i = 0
    while i < ROW_COUNT:
        print(f'第{base_index+i:0{MAX_WIDTH}}次 Hello world with_auto_fix({base_index})')
        i += 1
複製代碼

沒錯,f-string 裏的寬度能夠用變量替代 多虧平時學的紮實,憑藉對以前看過的f-string官方文檔的記憶,get

李雷又爲韓梅梅展現了f-string 固定寬度的進階用法string

def fix_float():
    percent = .01987654321
    print(f"{percent:010.3%}\t-浮點數-保留3位小數位百分比,固定寬度10")
    print(f"{percent:010.3f}\t-浮點數-固定寬度10,保留3位小數")
    print(f"{percent:010.5f}\t-浮點數-固定寬度10,保留5位小數")
    print(f"{1.1:010.5f}\t-浮點數-固定寬度10,保留5位小數")
複製代碼

看到各類輸出都能變得乾淨整齊,韓梅梅終於心情舒暢了。

00001.988%      -浮點數-保留3位小數位百分比,固定寬度10
000000.020      -浮點數-固定寬度10,保留3位小數
0000.01988      -浮點數-固定寬度10,保留5位小數
0001.10000      -浮點數-固定寬度10,保留5位小數

韓梅梅:「雷哥,我想平時在家也能練習python,但是我家裏的電腦沒有安裝python」
李雷:「要不我週末去幫你裝一下?」
...

複製代碼

且不提李雷和韓梅梅下面作了什麼,咱們回顧一下完整代碼:

#!/usr/bin/env python3

ROW_COUNT = 6


def without_fix(base_index):
    # 寬度不固定
    i = 0
    while i < ROW_COUNT:
        print(f'第{base_index+i}次 Hello world')
        i += 1


def with_fix2(base_index):
    # 固定寬度2
    i = 0
    while i < ROW_COUNT:
        print(f'第{base_index+i:2}次 Hello world with_fix2({base_index})')
        i += 1


def with_fix02(base_index):
    # 固定寬度2,前面不足的話補0
    i = 0
    while i < ROW_COUNT:
        print(f'第{base_index+i:02}次 Hello world with_fix02({base_index})')
        i += 1


def with_auto_fix(base_index):
    # 自動判斷寬度
    max_num = base_index+ROW_COUNT
    max_width = len(f"{max_num}")
    i = 0
    while i < ROW_COUNT:
        print(
            f'第{base_index+i:0{max_width}}次 Hello world with_auto_fix({base_index})'
        )
        i += 1


def fix_fmts():
    # 彙總
    number = 123
    print(f"{number:10}\t-整數,固定寬度10")
    print(f"{number:010}\t-整數,固定寬度10,前面不足補0")
    percent = .01987654321
    print(f"{percent:10.3%}\t-浮點數-保留3位小數位百分比,固定寬度10")
    print(f"{percent:010.3%}\t-浮點數-保留3位小數位百分比,固定寬度10,前面不足補0")
    print(f"{percent:10.3f}\t-浮點數-固定寬度10,保留3位小數")
    print(f"{percent:010.3f}\t-浮點數-固定寬度10,保留3位小數,前面不足補0")
    print(f"{percent:10.5f}\t-浮點數-固定寬度10,保留5位小數")
    print(f"{percent:010.5f}\t-浮點數-固定寬度10,保留5位小數,前面不足補0")
    print(f"{1.1:10.5f}\t-浮點數-固定寬度10,保留5位小數")
 
    width = 10
    print(f"{1.1:0{width}.5f}\t-浮點數-經過變量指定寬度10,保留5位小數,前面不足補0")



if __name__ == "__main__":
    print('====================')
    print('-- without_fix(8) --')
    without_fix(8)
    print('-- without_fix(98) --')
    without_fix(98)
    print('-- with_fix2(8) --')
    with_fix2(8)
    print('-- with_fix2(98) --')
    with_fix2(98)
    print('-- with_fix02(8) --')
    with_fix02(8)
    print('-- with_fix02(98) --')
    with_fix02(98)
    print('-- with_auto_fix(8) --')
    with_auto_fix(8)
    print('-- with_auto_fix(98) --')
    with_auto_fix(98)
    print('-- fix_fmts() --')
    fix_fmts()
    print('===============')

複製代碼
相關文章
相關標籤/搜索