评估变量包含 f 字符串中的数学表达式
Evaluating variable contain mathematical expression in f-strings
我必须像 10**5
一样接受输入(使用 raw_input()
)作为幂表达式,然后打印它的值。我尝试了一些代码,但这些代码没有给出预期的结果:
print(f'{2**4}') #<-- prints 16 correctly
a = '{2**4}'
print(f'{{}}'.format(a)) #<-- prints {2**4}
是否可以实现类似的东西:
var = '2**4'
print(f'{<some way to expand var in here>}') #<-- prints 16
所以这适用于所有表达式(例如 ((2+4-10+88*2)/100)**5
)但我不确定这是否是正确的方法(因为不推荐 eval
)
a = '2**4'
print(eval (a)) #<-- prints 16
在 f-strings 中,表达式的解析等同于:
ast.parse('(' + expression + ')', '<fstring>', 'eval')
见https://docs.python.org/3/library/ast.html#ast.parse
但变量将被替换为它们的实际值。您正在寻找的是一种 f 字符串不支持的嵌套评估。相反,作为一种安全的方法,您可以先使用 '**' 拆分,然后转换为 int,最后使用 power:
In [9]: s = "2**4"
In [10]: print(f"{pow(*map(int, s.split('**')))}")
16
我必须像 10**5
一样接受输入(使用 raw_input()
)作为幂表达式,然后打印它的值。我尝试了一些代码,但这些代码没有给出预期的结果:
print(f'{2**4}') #<-- prints 16 correctly
a = '{2**4}'
print(f'{{}}'.format(a)) #<-- prints {2**4}
是否可以实现类似的东西:
var = '2**4'
print(f'{<some way to expand var in here>}') #<-- prints 16
所以这适用于所有表达式(例如 ((2+4-10+88*2)/100)**5
)但我不确定这是否是正确的方法(因为不推荐 eval
)
a = '2**4'
print(eval (a)) #<-- prints 16
在 f-strings 中,表达式的解析等同于:
ast.parse('(' + expression + ')', '<fstring>', 'eval')
见https://docs.python.org/3/library/ast.html#ast.parse
但变量将被替换为它们的实际值。您正在寻找的是一种 f 字符串不支持的嵌套评估。相反,作为一种安全的方法,您可以先使用 '**' 拆分,然后转换为 int,最后使用 power:
In [9]: s = "2**4"
In [10]: print(f"{pow(*map(int, s.split('**')))}")
16