评估变量包含f字符串中的数学表达式

时间:2018-05-07 07:41:19

标签: python python-3.x expression-evaluation f-string

我必须接受输入(使用raw_input())作为10**5之类的幂表达式,然后打印其值。我尝试了几段代码,但这些代码没有给出预期的结果:

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 个答案:

答案 0 :(得分:3)

在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

答案 1 :(得分:1)

所以这适用于所有表达式(例如((2+4-10+88*2)/100)**5),但我不确定这是否是正确的方法(因为不推荐eval

a = '2**4'
print(eval (a))  #<-- prints 16