2017-10-17 4 views
1

Ich versuche herauszufinden, welcher mathematische Operator verwendet wurde, und dann diesen Operator einer Variablen zuzuweisen. Dies ist mein Code:Wie verwende ich .isalpha(), um einen mathematischen Operator zu erkennen

Allerdings druckt dies "+", obwohl es ein "-" im String-Start gibt. Weiß jemand, warum es nicht "-" ausdruckt? (das ist Python 3)

+1

Die Bedingungen 'm.isalpha()' und 'm in ('-', '+', '*', '/')' können niemals beide wahr sein, da keiner der Operatoren alphanumerische Zeichen ist. So behält "op" seinen ursprünglich zugewiesenen Wert von "+" bei. –

+1

Warum so ein indirekter Weg, um zu überprüfen, ob 'm in '- + * /''? –

Antwort

1

Das Problem mit Ihrem Code ist, dass Sie überprüfen, ob das Zeichen Alphabet ist, dann etwas tun, können Sie überprüfen, ob das Zeichen kein Alphabet oder Nummer ist.

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 Sie sollten vielmehr eine Reihe von mathematischen Operatoren halten zu überprüfen, ob die Zeichen in Ihrem Array

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

Unter der Annahme, dass es ein eindeutiger Operator Sie die Zeichen schneiden könnten in start mit den ops:

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

Wennin mehreren Operationen sinddann set(start) & ops würde alle von ihnen enthalten (oder leer sein, wenn es keine Ops gibt).

Beachten Sie, dass Sie in Ihrem Beispiel implizit * verwenden, da die beabsichtigte Bedeutung von 3x - 2 = 11 wahrscheinlich 3*x - 2 = 11 ist.

Verwandte Themen