首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中计算表达式的值

在Python中计算表达式的值
EN

Stack Overflow用户
提问于 2011-03-27 09:21:15
回答 5查看 1.5K关注 0票数 3

可能重复:

python convert a string to an operator

大家好,各位!

我刚开始学习Python,有一个简单的问题。

能否得到这个表达式的答案(计算)?

代码语言:javascript
复制
['10', '/', '5']

我的问题是:我只将'10''5'转换为105。如何将'/'转换为/?我正在使用Python2.7

EN

回答 5

Stack Overflow用户

发布于 2011-03-27 09:28:44

我认为最好的办法是:

检索列表的第一个元素,并将其转换为int。

检索列表中的第三个元素并将其转换为int

将第二个元素映射到一个函数以计算结果

代码语言:javascript
复制
import sys

element = ['10', '/', '5']

operators = {
    '/': lambda a, b: a / b,
    '+': lambda a, b: a + b,
    '-': lambda a, b: a - b,
    '*': lambda a, b: a * b,
}

try:
    a = int(element[0])
    b = int(element[2])
    result = operators[element[1]](a, b)

    print result
except:
    sys.exit(1)

正如ThiefMaster所说,您也可以使用运算符模块。代之以:

代码语言:javascript
复制
operators = {
    '/': lambda a, b: a / b,
    '+': lambda a, b: a + b,
    '-': lambda a, b: a - b,
    '*': lambda a, b: a * b,
}

通过

代码语言:javascript
复制
import operator
operators = {
    '/': operator.div,
    '+': operator.add,
    '-': operator.sub,
    '*': operator.mul,
}
票数 5
EN

Stack Overflow用户

发布于 2011-03-27 09:24:16

代码语言:javascript
复制
eval(''.join(['10', '/', '5']))

上述解决方案适用于任何表达式。例如:

代码语言:javascript
复制
eval(''.join(['10', '/', '5', '+', '3', '*', '2']))

唯一的问题是eval是邪恶的..。如果您想要制作表达式计算器,您应该编写一个lexer,一个语法解析器,生成表达式的AST,然后计算它。

票数 3
EN

Stack Overflow用户

发布于 2011-03-27 09:26:45

operator module包含表示操作符的函数:

代码语言:javascript
复制
import operator
# Now operator.div(a, b) is the same as a / b
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5448297

复制
相关文章

相似问题

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