在Python中计算表达式的值
可能重复的问题:
python 将字符串转换为运算符
大家好!
我刚开始学习Python,有个简单的问题。
这个表达式的结果(计算)能得到吗?
['10', '/', '5']
我的问题是:我可以把 '10'
和 '5'
转换成 10
和 5
,但是我该怎么把 '/'
转换成 /
呢?我现在用的是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,
}