在Python中计算表达式的值

3 投票
5 回答
1679 浏览
提问于 2025-04-16 14:30

可能重复的问题:
python 将字符串转换为运算符

大家好!

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

这个表达式的结果(计算)能得到吗?

['10', '/', '5']

我的问题是:我可以把 '10''5' 转换成 105,但是我该怎么把 '/' 转换成 / 呢?我现在用的是Python 2.7。

5 个回答

2

operator模块里有一些函数,这些函数代表了各种运算符:

import operator
# Now operator.div(a, b) is the same as a / b
3
eval(''.join(['10', '/', '5']))

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

eval(''.join(['10', '/', '5', '+', '3', '*', '2']))

唯一的问题是eval这个东西不太好用……如果你想做一个表达式计算器,你应该先写一个词法分析器,然后是语法解析器,接着生成表达式的抽象语法树(AST),最后再进行计算。

5

我觉得最好的方法是:

先取出你列表中的第一个元素,然后把它转换成整数。

接着取出列表中的第三个元素,也把它转换成整数。

然后对第二个元素使用一个函数来计算结果。

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所说,你也可以使用操作符模块。把这个:

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

换成

import operator
operators = {
    '/': operator.div,
    '+': operator.add,
    '-': operator.sub,
    '*': operator.mul,
}

撰写回答