web-dev-qa-db-ja.com

文字列形式を変数としてf文字列に渡す方法

F文字列を使用していますが、変数に依存する形式を定義する必要があります。

_def display_pattern(n):
    temp = ''
    for i in range(1, n + 1):
        temp = f'{i:>3}' + temp
        print(temp)
_

関連する場合、display_pattern(5)の出力は次のとおりです。

_  1
  2  1
  3  2  1
  4  3  2  1
  5  4  3  2  1
_

フォーマット_>3_を操作して、代わりに変数を渡すことは可能かどうか疑問に思います。たとえば、私は次のことを試しました。

_def display_pattern(n):
    spacing = 4
    format_string = f'>{spacing}' # this is '>4'
    temp = ''
    for i in range(1, n + 1):
        temp = f'{i:format_string}' + temp
        print(temp)
_

ただし、次のエラーが発生します。

_Traceback (most recent call last):
  File "pyramid.py", line 15, in <module>
    display_pattern(8)
  File "pyramid.py", line 9, in display_pattern
    temp = f'{i:format_string}' + temp
ValueError: Invalid format specifier
_

このコードを機能させる方法はありますか?重要な点は、変数を使用して間隔を制御し、パディングの量を決定できることです。

6
lmiguelvargasf

アラインメントトークンとパディングトークンを互いに分離しておく必要があります。

def display_pattern(n):
    padding = 4
    align = ">"
    temp = ''
    for i in range(1, n + 1):
        temp = f'{i:{align}{padding}}' + temp
        print(temp)

編集:

これは完全に正しくないと思います。私はいくつかのテストを行い、次の作業も行いました:

def display_pattern(n):
    align = ">4"
    temp = ''
    for i in range(1, n + 1):
        temp = f'{i:{align}}' + temp
        print(temp)

だから私はあなたの方法がうまくいかない理由を本当に言うことはできません...

2
Tim Pietzcker