2017-10-17 26 views
1

我試圖檢測使用了哪個數學運算符,然後將該運算符分配給一個變量。這是我的代碼:我該如何使用.isalpha()來檢測數學運算符

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) 

但是,儘管在字符串start中有一個「 - 」,但會打印「+」。有人知道它爲什麼不打印出「 - 」嗎? (順便說一句,這是python 3)

+1

(' - ','+','*','/')'中的m.isalpha()'和m的條件永遠都不會是真的,因爲沒有一個操作符是字母數字字符。因此,'op'將保留其原來分配的值''+''不管是什麼 –

+1

爲什麼這種間接的方法來檢查'm in' - + * /''? –

回答

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 
3

的假設下,有一個獨特的操作,你可以在相交的人物start與OPS:

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

如果有多個操作然後set(start) & ops將包含所有這些(如果沒有操作,則爲空)。

請注意,在您的示例中,您隱式使用*,因爲3x - 2 = 11的預期含義可能是3*x - 2 = 11