Pythonのフォーマット文字列の桁数部を可変にする方法についてまとめます。
前提
1〜100までの数字を右揃えで表示したいとします。
1
2
...
10
...
100
この場合、以下のように記述することで実現できます。
# 数字を出力
for i in range(100):
print('{:3d}'.format(i + 1))
本題
上の例で、表示する最大の数字を決め打ちできない場合に、フォーマット文字列を指定する方法としては、以下のようなものがあります。
方法1
import sys
# 数字の最大値 (標準入力より取得)
max_number = int(sys.stdin.readline())
# 数字の表示幅(最大値の桁数に合わせる)
width_number = len(str(max_number))
# 数字を出力
for i in range(max_number):
print('{number:{width}d}'.format(number=i + 1, width=width_number))
方法2 (Python 3.6以降)
import sys
# 数字の最大値 (標準入力より取得)
max_number = int(sys.stdin.readline())
# 数字の表示幅(最大値の桁数に合わせる)
width_number = len(str(max_number))
# 数字を出力
for number in range(max_number):
print(f'{number + 1:{width_number}d}')