四則計算の数学記号をPython演算子に瞬時に置き換える方法を紹介します。
Pythonで四則計算するときの問題点
Pythonで四則計算するときは、手動で演算子に置き換える必要があります。
例えば、次のような問題があったとします。
5×1-4÷2
これをPythonで計算しようとすると、以下のように書き換えなければなりません。
5*1-4/2
print(5*1-4/2)
#出力結果 3.0
このとき、×や÷の数学記号を、Pythonの演算子である*や/に置き換えるのが非常に面倒です。
特に、すでに大量の問題がテキスト形式で用意されており、その解答作りをしなければならないときには、かなり面倒な作業になります。
そこで、この面倒な作業をPythonで処理できるようにします。
数学記号を演算子に置き換えるには?
数学記号を演算子に置き換えるには、複数の文字列を同時に置き換える必要があります。
具体的には以下のコードを利用します。
s = "4×3-6÷2"
old = ["×", "÷"]
new = ["*", "/"]
for x, y in zip(old, new):
s = s.replace(x, y)
print(s)
#出力結果
#4*3-6/2
応用 その1
四則計算には、次のような問題もあります。
3(4×3)-2(6÷2)
このような問題をPythonで計算しようとすると、
3*(4*3)-2*(6/2)
のように書き換えなければなりません。
このとき、括弧とその前の数字との間に*を入れなければならなくなります。
これも相当、面倒な作業です。
そこで、このような問題に対処するためにコードに付け足します。
s = "3(4×3)-2(6÷2)"
old = ["×", "÷","1(","2(","3(","4(", "3(", "5(","6(","7(","8(","9("]
new = ["*", "/","1*(","2*(","3*(","4*(", "3*(", "5*(","6*(","7*(","8*(","9*("]
for x, y in zip(old, new):
s = s.replace(x, y)
print(s)
#出力結果
#3*(4*3)-2*(6/2)
応用 その2
次のように複数の問題があったとします。
-7-6×(-3)
2×(-5)+(-9)
-16-6÷(-2)
(-3)×(-4)-(-5)×2
このとき、一つ一つの問題をpythonで置き換えていくのは面倒です。
そこで、4つまとめて処理するようにコードを書いていきます。
s = "-7-6×(-3)" "\n" "2×(-5)+(-9)" "\n" "-16-6÷(-2)" "\n" "(-3)×(-4)-(-5)×2"
old = ["×", "÷","1(","2(","3(","4(", "3(", "5(","6(","7(","8(","9("]
new = ["*", "/","1*(","2*(","3*(","4*(", "3*(", "5*(","6*(","7*(","8*(","9*("]
for x, y in zip(old, new):
s = s.replace(x, y)
print(s)
#出力結果
-7-6*(-3)
2*(-5)+(-9)
-16-6/(-2)
(-3)*(-4)-(-5)*2
残された課題
四則計算の数学記号をPython演算子に瞬時に置き換えることはできました。
しかし、この方法では、置き換えた後で、さらに解答を得るために作業をしなければなりません。
たとえば、先の問題の解答を作るために以下のコードを作成する必要があります。
print(-7-6*(-3))
print(2*(-5)+(-9))
print(-16-6/(-2))
print((-3)*(-4)-(-5)*2)
#出力結果
11
-19
-13.0
22
コピペして貼り付けるだけなので、たいした手間ではありませんが、できれば、数学記号をPython演算子に瞬時に置き換える際に、同時に解答も作成できるようにしたいです。
自分はプログラミング初心者なので、その方法は今のところ思いつきません。
どなたか詳しい方がいれば、ご教授ください。