有没有办法检查符号在Python中是否是有效的运算符?

时间:2019-07-07 03:21:32

标签: python

isinstance可用于检查作为第一个参数的对象是否是作为第二个参数的classinfo类的实例或子类。

a = 1
b = [1]
isinstance(a,list)
isinstance(b,list)

是否有类似的方法来检查操作员是否在Python中进行验证?像

isoperator('=')
isoperator(':=')
isoperator('<-')

我正在尝试为Python初学者构建在线执行器。

当他们这样输入时

enter image description here

他们会得到提示,不支持运算符,而不是当前的错误消息。

2 个答案:

答案 0 :(得分:1)

这可以通过将自定义函数包装在python内置的operator模块周围来实现。值得注意的是,可以将运算符输入为字符串或lambda,因为我可以任意选择字符串。

import operator
import re
def test_operator(obj = [6], op_in = '> 1'):
  """
  returns true if operator can be performed, else false
  """
  # Use regex to parse the pattern
  pattern_funct = re.compile('[><=]+')
  pattern_num = re.compile('[0-9]+')
  # Access values
  funct = ''.join(pattern_funct.findall(op_in))
  num = float(''.join(pattern_num.findall(op_in)))

  # Lookup the operator function
  ops = {
      ">": operator.gt,
      ">=": operator.ge,
      "<": operator.lt,
      "<=": operator.le,
      "=": operator.eq,
  }   
  op_func = ops[funct]
  # Try to perform
  print(f'Trying `{obj}` with {op_in}:')
  try:
    op_func(obj, num)
    return True
  except  TypeError:
    return False


# Next!
x =[3]
print(test_operator(x,'>= 7 '), '\n' )
# False
print(test_operator(7,'>= 7 '))
# True

答案 1 :(得分:-1)

.isalpha() 如果字符类似于“hello”则返回 True,否则返回 False 则字符类似于“+”。所以: "+".isalpha() 返回假
"hi".isalpha() 返回 True

def isOperand(ch):
     return ch.isalpha()
 

def isOperator(ch):
     return True if ch.isalpha==False