在字符串中查找子字符串的值?

3
我正在创建一个简单的Python计算器,它使用运算顺序来进行简单的数学计算,并添加了平方根和整数除法功能。概念是用户可以将他们想要开平方根的值包含在函数中(例如,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() 中获取值并将其放回正确的位置方面遇到了困难。我试着在网上寻找解决方案,但这似乎是一个比较晦涩的问题。

请阅读并遵守帮助文档中的发布指南,这是您创建此帐户时建议的。主题相关提问方式同样适用于此处。StackOverflow不是设计、编码、研究或教程服务。 - Prune
“Can Someone Help Me?” 不是一个有效的 Stack Overflow 问题。这通常意味着你需要找当地的导师或者跟随教程学习,而不是在 Stack Overflow 上提问。 - Prune
你应该看一下[ask],并相应地编辑你的问题,具体来说,你应该展示你编写的代码,描述它做了什么,你期望它做什么以及它们之间的差异。至于计算器的问题,我不确定你搜索了什么,但这是一个非常常见的作业类型问题,有几种标准的一般方法,你应该研究一下。它们都比你尝试的更简单和更通用。 - pvg
1
尝试使用正则表达式:re.findall(r'sqr\((\d+)\)', b),将会得到你需要计算平方根的数字。 - user3483203
检查正则表达式能为您做什么。它可以通过仔细定位sqr(和值以及来完成,但是正则表达式是直接了当的,并且会将其结果以易于处理的块形式交给您。 - Jongware
2个回答

2
你可以使用来自re模块的re.sub来解决你在这里的问题。首先,让我们定义一个简单的辅助函数,它接受一个数字字符串并计算平方根,然后返回一个字符串:
def str_2_sqrt(s):
    return str(math.sqrt(int(s)))

现在是难点,我们将使用 re.sub 函数,并使用自定义的 lambda 函数来调用 str_2_sqrt 并将结果放回字符串中:

>>> re.sub(r'sqr\((\d+)\)', lambda x: str_2_sqrt(x.group(1)), b)
5.0+5*3

1
非常感谢,正是我所需要的!+1 - miike3459

0
b = 'sqr(25)+5*3' # equation
import math
def f(s):
   s1=s.replace('sqr','')
   s2=s1.replace(s1.split(')')[0][1:],str(int(math.sqrt(int(s1.split(')')[0][1:])))))
   return s2.replace(')','').replace('(','')
print(f(b))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接