3
私は、システムのクリップボードにコピーされた数式を検出し、評価し、貼り付ける準備ができているクリップボードにコピーをコピーする "コピーペースト計算機"を開発中です。しかし、コードではeval()関数を使用していますが、ユーザーが通常何をコピーしているかを知っていることを考えると、私は大変心配していません。つまり、計算をハンディキャップ(例えば、乗算や指数を計算する能力を取り除くなど)をせずに、より良い方法を見つけたいと思っています。Python3でeval()を使用しない数式を評価する
ここに私のコードの重要な部分です:
#! python3
import pyperclip, time
parsedict = {"×": "*",
"÷": "/",
"^": "**"} # Get rid of anything that cannot be evaluated
def stringparse(string): # Remove whitespace and replace unevaluateable objects
a = string
a = a.replace(" ", "")
for i in a:
if i in parsedict.keys():
a = a.replace(i, parsedict[i])
print(a)
return a
def calculate(string):
parsed = stringparse(string)
ans = eval(parsed) # EVIL!!!
print(ans)
pyperclip.copy(str(ans))
def validcheck(string): # Check if the copied item is a math expression
proof = 0
for i in mathproof:
if i in string:
proof += 1
elif "http" in string: #TODO: Create a better way of passing non-math copies
proof = 0
break
if proof != 0:
calculate(string)
def init(): # Ensure previous copies have no effect
current = pyperclip.paste()
new = current
main(current, new)
def main(current, new):
while True:
new = pyperclip.paste()
if new != current:
validcheck(new)
current = new
pass
else:
time.sleep(1.0)
pass
if __name__ == "__main__":
init()
Q:私は答えを計算する代わりにeval()をどう使うべきか?