我必须接受输入(使用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
答案 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