我如何使用.isalpha()来检测数学运算符

时间:2017-10-17 15:36:31

标签: python python-3.x

我试图检测使用了什么数学运算符,然后将该运算符赋值给变量。这是我的代码:

start = "3x - 2 = 11"
op = "+"

for m in start:
  if m.isalpha():
    if m == "-":
      op = m
    if m == "+":
      op = m
    if m == "*":
      op = m
    if m == "/":
      op = m
print(op)

然而,尽管存在" - "然而这打印了#34; +"在字符串开始。有人知道它为什么不打印出来" - "? (顺便说一下这是python 3)

2 个答案:

答案 0 :(得分:3)

假设有一个唯一的运算符,您可以将start中的字符与ops相交:

start = "3x - 2 = 11"
ops = set("+-*/")
op = list(set(start) & ops)[0] # op == '-'

如果start中有多个操作,则set(start) & ops将包含所有操作(如果没有操作,则为空)。

请注意,在您的示例中,您隐式使用*,因为3x - 2 = 11的预期含义可能是3*x - 2 = 11

答案 1 :(得分:1)

您的代码存在的问题是,您要检查字符是否为字母然后执行某些操作,您可以检查该字符是否不是字母或数字。

op = "+"
for m in start:
  if not m.isalpha() and not m.isdigit():
    if m == "-":
      op = m
    if m == "+":
      op = m
    if m == "*":
      op = m
    if m == "/":
      op = m
    print op

OR 你应该保留一组数学运算符来检查字符是否在你的数组中

start = "3x - 2 = 11"
op = "+"
ops = ["-", "+", "/", "*"] #can be ("-", "+", "/", "*") or "-+/*" too
for m in start:
  if m in ops:
    if m == "-":
      op = m
    if m == "+":
      op = m
    if m == "*":
      op = m
    if m == "/":
      op = m
    print op