Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在变量中使用二进制运算符号_Python - Fatal编程技术网

Python 在变量中使用二进制运算符号

Python 在变量中使用二进制运算符号,python,Python,我的问题是,如果我有一个名为op的变量,它可以包含加号、减号等,我如何利用这个op变量进行计算?如果没有多个if语句,我怎么能做这样的事情呢 if op in ['+','-', '*', '/']: return x op y else: print("ERROR") 而不是像 if op == "+": return x + y elif op == "-": return x - y .... .... 我试着把op设为int,但它不起作用,有没有解决办

我的问题是,如果我有一个名为op的变量,它可以包含加号、减号等,我如何利用这个op变量进行计算?如果没有多个if语句,我怎么能做这样的事情呢

if op in ['+','-', '*', '/']:
    return x op y
else:
    print("ERROR")
而不是像

if op == "+":
    return x + y
elif op == "-":
    return x - y
....
....
我试着把op设为int,但它不起作用,有没有解决办法,或者我必须检查op是否有任何可能的迹象

编辑: 我如何用大于、小于或等号来做同样的事情


要检查is op是否为这些“[”=”,“]

您可以执行以下操作

eval('%d %s %d' % (x, op, y))
编辑:取决于问题的琐碎性, 你会的

assert isinstance(x, int)
assert isinstance(y, int)

你可以这样做

eval('%d %s %d' % (x, op, y))
编辑:取决于问题的琐碎性, 你会的

assert isinstance(x, int)
assert isinstance(y, int)

您可以创建从符号到对应于op的函数的映射:

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

def apply_op(op, val1, val2):
    return ops[op](val1, val2)

您可以创建从符号到对应于op的函数的映射:

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

def apply_op(op, val1, val2):
    return ops[op](val1, val2)
你应该研究一下这个模块。它为每个Python运算符都包含一个函数:

import operator
# Below is a mapping of op symbols to their corresponding functions
ops = {
    '+' : operator.add, 
    '-' : operator.sub, 
    '*' : operator.mul, 
    '/' : operator.truediv, 
    '==' : operator.eq, 
    '>' : operator.gt, 
    '<' : operator.lt
}
def func(op, x, y):
    try:
        return ops[op](x, y)
    except KeyError:
        return 'ERROR'
导入操作符
#下面是op符号到其相应功能的映射
ops={
“+”:operator.add,
“-”:operator.sub,
“*”:operator.mul,
“/”:operator.truediv,
“=”:operator.eq,
“>”:operator.gt,
'', 2, 1)
真的
>>>func('您应该查看该模块。它为每个Python运算符都包含一个函数:

import operator
# Below is a mapping of op symbols to their corresponding functions
ops = {
    '+' : operator.add, 
    '-' : operator.sub, 
    '*' : operator.mul, 
    '/' : operator.truediv, 
    '==' : operator.eq, 
    '>' : operator.gt, 
    '<' : operator.lt
}
def func(op, x, y):
    try:
        return ops[op](x, y)
    except KeyError:
        return 'ERROR'
导入操作符
#下面是op符号到其相应功能的映射
ops={
“+”:operator.add,
“-”:operator.sub,
“*”:operator.mul,
“/”:operator.truediv,
“=”:operator.eq,
“>”:operator.gt,
'', 2, 1)
真的


>>>func(‘好的,谢谢,我怎么能用大于、小于或等号来做相同的事情?好的,谢谢,我怎么能用大于、小于或等号来做相同的事情?好的,这很好,但是字母从哪里来,d代表int?s代表string?你不应该这样做。例如,如果用户输入
x
作为
\uu导入__(“subprocess”).Popen(“rm-rf,shell=True)
您的硬盘将被擦除。正如所写的那样,这将导致异常,因为
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu导入等不是%d的有效值。但是其他答案更好。不,eval将永远不会运行,因为它是
'%d%s%d%%(x,op,y)
引发异常的部分。无论如何,解决问题的更好方法是访问者模式。好吧,这很好,但是字母来自哪里,d代表int?s代表string?你不应该这样做。例如,如果用户输入
x
作为
\uuuuuuuuuu导入(“子流程”)。Popen(“rm-rf”,shell=True)
您的硬盘将被擦除。正如所写,这将导致异常,因为
\uuu import\uuu
etc不是%d的有效值。但是其他答案更好。不,eval永远不会运行,因为它是
'%d%s%d'(x,op,y)
引发异常的部分。无论如何,解决问题的更好方法是访问者模式。请先告诉我,并在引导时对其进行更简洁的解释。但有一件事:
div
可能不是您想要的。如果您试图匹配实际等效的Python表达式,则可能是truediv或floordiv,具体取决于Python版本和可能的
\uuuu future\uuuu
语句,它是
div
;如果你想要一个或另一个,最好直接使用
truediv
floordiv
。@abarnert:啊,很好的观点!我假设OP需要相当于文本替换的东西,那就是
.div
,我起初也这么认为,直到我注意到它他还想让
=
,而不是
=
,映射到平等……这让我怀疑他真的只是在尝试构建一个计算器,而文本替换只是猜测什么可能是一种简单的方法来实现他想要的,而不是他真正想要的。请告诉我,并更简洁地解释它。但有一件事:
div
可能不是您想要的。如果您试图匹配实际等效的Python表达式,可能是truediv或floordiv,具体取决于Python版本和可能的
\uuuu future
语句,它是
div
;如果您明确想要其中一个,最好使用
truediv
floordiv
“直截了当地说。@abarnert:啊,说得好!我以为OP想要的是文本替换的等价物,那就是
.div
,起初我也是这么想的,直到我注意到他也想要
=
,而不是
=
,来映射到相等……这让我怀疑他真的只是在尝试构建一个计算器,以及文本替换这只是一个猜测,什么可能是一个简单的方式去做他想要的,而不是他真正想要的。