如何将字符串格式作为变量传递给 f 字符串
How to pass string format as a variable to an f-string
我正在使用 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
有什么方法可以让这段代码正常工作吗?要点是能够使用变量来控制间距以确定填充量。
您需要将对齐和填充标记彼此分开:
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)
所以我真的不能说为什么你的方法行不通...
你应该把 format_string
作为变量
temp = f'{i:{format_string}}' + temp
:
之后的下一个代码在您明确指出之前不会被解析为变量。
并感谢@timpietzcker 对文档的 link:formatted-string-literals
我正在使用 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
有什么方法可以让这段代码正常工作吗?要点是能够使用变量来控制间距以确定填充量。
您需要将对齐和填充标记彼此分开:
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)
所以我真的不能说为什么你的方法行不通...
你应该把 format_string
作为变量
temp = f'{i:{format_string}}' + temp
:
之后的下一个代码在您明确指出之前不会被解析为变量。
并感谢@timpietzcker 对文档的 link:formatted-string-literals