首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何计算字符串和不能计算的单词保持不变?

如何计算字符串和不能计算的单词保持不变?
EN

Stack Overflow用户
提问于 2020-07-14 10:47:51
回答 1查看 56关注 0票数 0
代码语言:javascript
运行
复制
string = input()
string = (''.join([str(eval(s)) if ('(' in s and ')' in s) else s for s in string.split(' ')]))
print(string)

对于这段代码,有一些问题:

  1. ,如果我写5-(2-sp.sqrt(4)),它会给我一个EOF错误,因为它会以sp.sqrt(4)将是sp.sqrt(4)的方式分割单词。应该是sp.sqrt(4)

  1. ,如果我写'2-10‘,它不会计算它,只会返回'2-10';它应该返回'-8’。如果我写“2-10*(2-5)”,它将返回写的答案。

  1. 不只是不计算代码不识别的部分,而是会给我一个错误,说明未识别的部分是未定义的。(例如没有定义'2+x-10-(5*10)‘--名称'x’。它应该返回:'x-58'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-14 11:21:43

发行- 1

,它会给我一个EOF错误,因为它会以sp.sqrt(4)将是sp.sqrt(4)的方式分割单词)

不,它不会那样拆分字符串,因为您正在使用‘’拆分字符串,所以拆分函数的输出将是['5-(2-sp.sqrt(4))']

  • It,除非和直到输入有一个有效的表达式(在本例中,我怀疑问题与sp)有关)。

问题- 2

,如果我写'2-10‘,它不会计算它,只会返回'2-10’,但是当我写'2-10*(2-5)‘时,它会返回写的答案。

这是因为只有在同时存在'(‘和’')‘的情况下,才调用eval()函数。

问题- 3

这是因为eval()只接受有效的python表达式(不能将未声明的变量直接放在参数中)。在您的案例中,x以前没有声明过。

解决方案:

这里有一个交感函数parse_expr,它可能做您想做的事情:

代码语言:javascript
运行
复制
In [20]: from sympy import parse_expr

In [21]: parse_expr('5-(2-sqrt(4))')
Out[21]: 5

In [22]: parse_expr('2-10')
Out[22]: -8

In [23]: parse_expr('2+x-10-(5*10)')
Out[23]: x - 58
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62893427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档