我正在创建一个简单的Python计算器,它使用操作顺序来进行简单的数学运算,并添加平方根和整数除法特性。其概念是用户可以在sqr()函数中括起他们想要的平方根值(例如,sqr(25)等于5)。
问题是,我很难从公式字符串中提取这个值。下面是它应该做什么的伪代码:

b = 'sqr(25)+5*3' # equation

# My pseudo-code:
# 1. Identify use of sqr()
# 2. Pull 'sqr(25)' out to be solved
# 3. Pull value (25) out and solve it with math.sqrt()
# 4. Replace 'sqr(25)' with the solved value (5)
#
# b should now be equal to:
#   '5+5*3'

我无法从sqr()中提取值并将其放回正确的位置。我试着上网,但这似乎是一个更模糊的问题。

最佳答案

您可以使用re.sub模块中的re来解决您的问题。首先,让我们定义一个简单的helper函数,它接受一个数字字符串并计算平方根,然后返回一个字符串:

def str_2_sqrt(s):
    return str(math.sqrt(int(s)))

现在对于困难的部分,我们将使用一个定制lambda函数来调用re.sub,并将结果放回字符串中:
>>> re.sub(r'sqr\((\d+)\)', lambda x: str_2_sqrt(x.group(1)), b)
5.0+5*3

10-04 20:16