from math import *
PI = "1*pi"
str1 = "2*PI"
PI = str(eval(PI)) # Turns our PI string into a number
str1 = str1.replace("PI",PI) # Sets our PI number in
print(eval(str1)) # Calculates it one last time
from math import pi
PI = "1*pi"
str1 = f"2*({PI})" # or for versions < Python-3.6: "2*({})".format(PI)
print(str1) # '2*(1*pi)'
print(eval(str1)) # 6.283185307179586
如果您无法控制PI,可以先计算PI,然后将其格式化为表达式。你知道吗
eval(f"2*({eval(PI)})") # or equivalently eval("2*({})".format(eval(PI)))
如果先计算-eval()-PI字符串,然后通过str()命令将计算结果作为str插入str1,然后计算str1,会怎么样
输出
eval(str1)
返回1.*pi1.*pi
,因为eval(str1)
的计算结果是2*"1*pi"
,字符串和整数之间的乘法会导致字符串的重复。你知道吗将字符串直接格式化为
str1
。你知道吗如果您无法控制
PI
,可以先计算PI
,然后将其格式化为表达式。你知道吗如果您也不能控制
str1
,那么可以用它的文本字符串值替换所有PI
标记:1*pi
。你知道吗但是这不处理边缘情况,比如
2*PIE
(如果它们出现的话)。一个更健壮的解决方案是使用regex并用PI
字符环绕\b
以匹配完整的令牌。你知道吗这适当地排除了诸如
2*PIZZA
或2*API
之类的字符串。你知道吗感谢你,我似乎已经解决了这个问题。你知道吗
所以我现在有了
避免了任何替换的需要
相关问题 更多 >
编程相关推荐