将运算符分配给python中的变量?
Posted
技术标签:
【中文标题】将运算符分配给python中的变量?【英文标题】:assign operator to variable in python? 【发布时间】:2011-02-28 07:33:37 【问题描述】:将数学应用于变量的常用方法是
a * b
它能够像这样计算和操作两个操作数吗?
a = input('enter a value')
b = input('enter a value')
op = raw_input('enter a operand')
那我如何连接 op 和两个变量 a
和 b
?
我知道我可以将 op 与 +
、-
、%
、$
进行比较,然后分配和计算....
但是我可以做类似a op b
的事情吗,如何告诉编译器 op 是一个运算符?
【问题讨论】:
【参考方案1】:您可以使用运算符模块和字典:
import operator
ops =
"+": operator.add,
"-": operator.sub,
"*": operator.mul,
"/": operator.div
op_char = input('enter a operand')
op_func = ops[op_char]
result = op_func(a, b)
【讨论】:
对于 python 3.x,应使用operator.truediv
或 operator.floordiv
代替 docs.python.org/3/library/operator.html
另外,以这种方式使用 op_func 是行不通的。由于此答案的编辑队列已满,我已在下面的答案中修复了这些错误(假设此答案仍然 ACCEPTED w/76 upvotes...)
@RobertHoughton:你认为这个答案“不起作用”是什么? (我也不知道你所说的“编辑队列”是什么意思,但这可能只是我没有看到的东西。)【参考方案2】:
运算符模块http://docs.python.org/library/operator.html 公开了与几乎所有 Python 运算符相对应的函数。您可以将运算符符号映射到这些函数以检索正确的函数,然后将其分配给您的 op 变量并计算 op(a, b)。
【讨论】:
【参考方案3】:您需要手动将用户输入的字符串与您的操作数列表进行比较。这里没有 int() 的类似物,因为运算符是语言中的关键字而不是值。
将输入字符串与操作数列表进行比较并确定其对应的运算符后,您可以使用 Python 标准库的 operator module 来计算将运算符应用于两个操作数的结果。
【讨论】:
【参考方案4】:我知道这是一个非常古老的线程,但我相信当时人们并不知道 eval
函数(也许它是 Python 3 附带的)。所以这里是这个问题的更新答案
a = input('enter a value')
b = input('enter a value')
op = input('enter an operand')
expression = a + op + b # simple string concatenation
result = eval(expression)
如果不希望输入始终有效,则可以使用 ast.literal_eval
代替。如果输入不是有效的 Python 数据类型,则会引发异常,因此如果不是,则不会执行代码。
例如。如果 a
、b
和 op
分别为 5、10、+ 则
result
是 15
【讨论】:
应该是表达式 = a + c + b 。顺便说一句,使用 eval 进行用户输入是一个坏主意。 ast.literal_eval 更好。 @SilentGuy 你说的非常对!我已经更新了答案eval
对 Python 3 并不陌生。人们不建议这样做的原因是因为在用户输入上使用它是不安全的。它可以执行某人输入的任何 Python 表达式(具有任何副作用)。此外,literal_eval
仅评估文字。它不能计算像 '5+10'
这样的算术表达式。【参考方案5】:
您可以使用 operator 模块来创建字典。来自该模块的Python 3 documentation:
"算子模块导出一组高效函数 对应于 Python 的内在运算符。例如, operator.add(x, y) 等价于表达式 x+y。"
import operator
ops =
"+": operator.add,
"-": operator.sub,
"*": operator.mul,
"/": operator.truediv
op_char = input('enter a operand')
a = 1
b = 2
result = ops[op_char](a,b)
print(result)
【讨论】:
以上是关于将运算符分配给python中的变量?的主要内容,如果未能解决你的问题,请参考以下文章