Как передать формат строки как переменную в 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
Есть ли способ заставить этот код работать? Основным моментом является возможность контролировать интервал, используя переменную для определения величины заполнения.
2 ответа
Вы должны поставить format_string
как переменная
temp = f'{i:{format_string}}' + temp
следующий код после :
не анализируется как переменная, пока вы четко не укажете. И спасибо @timpietzcker за ссылку на документы: отформатированные строковые литералы
Вы должны держать маркеры выравнивания и отступа отдельно друг от друга:
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)
Поэтому я не могу сказать, почему ваш метод не сработал...