2017-10-17 2 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に " - "があるにもかかわらず、 "+"を出力します。なぜ誰かが " - "プリントアウトしていないのを知っていますか? (btwこれはPython 3です)

+1

'm.isalpha()'と 'm in( ' - '、 '+'、 '*'、 '/')'という条件は、演算子のいずれも英数字ではないので真になることはありません。したがって、 '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 = "3x - 2 = 11" 
ops = set("+-*/") 
op = list(set(start) & ops)[0] # op == '-' 

で複数の操作がある場合:OPSとそしてset(start) & opsは、それらのすべてを含んでいます(または、操作がない場合は空になります)。

3x - 2 = 11の意味が3*x - 2 = 11であるため、この例では暗黙的に*を使用しています。

関連する問題