2

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

2 回答 2

3

在 f-strings 中,表达式被解析为:

ast.parse('(' + expression + ')', '<fstring>', 'eval')

https://docs.python.org/3/library/ast.html#ast.parse

但是变量将被替换为它们的实际值。您正在寻找的是一种 f-strings 不支持的嵌套评估。相反,作为一种安全的方法,您可以首先使用 '**' 拆分,然后转换为 int,最后使用 power:

In [9]: s = "2**4"

In [10]: print(f"{pow(*map(int, s.split('**')))}")
16
于 2018-05-07T07:47:26.963 回答
1

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

a = '2**4'
print(eval (a))  #<-- prints 16
于 2018-05-07T07:45:47.023 回答