如何使用输入更改python中的操作?

时间:2018-07-31 01:08:06

标签: python parsing operators expression mathematical-expressions

我正在尝试使用Numpy和Matplotlib在Python中使用图形计算器。这是我的代码:

stashing

如何将输入import numpy as np import matplotlib.pyplot as plt a = input("enter operation") #operation can be something like '**2 or + 1' b = np.arange(1,10) #here is where i am stuck. 添加到numpy数组a

除eval之外,我还需要其他方法。人们向我展示的所有其他项目都使用eval。

2 个答案:

答案 0 :(得分:0)

您是要对b的每个值应用输入操作吗? 如果是这样,这可能对您有用,但是我建议您明确说明允许哪些操作并使用正则表达式进行检查,因为“ eval”将运行用户输入的所有代码,这可能非常危险。 >

import numpy as np
import matplotlib.pyplot as plt

In [4]: import numpy as np
   ...: a = input("enter operation\n")
   ...: #operation can be something like '**2 or + 1'
   ...: b = np.arange(1,10)
   ...: #here is where i am stuck.
   ...: func_str = 'lambda x:x ' + a
   ...: func = eval(func_str)
   ...: func_vect = np.vectorize(func)
   ...: result = func_vect(b)
   ...:
   ...:
enter operation
**2

In [5]: result
Out[5]: array([ 1,  4,  9, 16, 25, 36, 49, 64, 81])

答案 1 :(得分:-1)

你为什么不只是

import numpy as np

a = input("enter operation")
# operation can be something like '**2 or + 1'
b = np.arange(1, 10)
np.append(b, a)
# here is where i am stuck.

我听懂了你的意图吗?

或者您可以尝试这个。

while True:
    a = input("enter operation")
    b = np.arange(1, 10)
    operator, = re.compile(r'([*+/-]+)').findall(a)
    num, = re.compile(r'([.0-9]+)').findall(a)
    print(operator, num)
    result = None
    if operator == '+':
        result = b + float(num)
    elif operator == '-':
        result = b - float(num)
    elif operator == '**':
        result = b ** float(num)
    print(result)

其中re包用于字符串操作。如果键入+2,则将2添加到b的所有组件中以产生result。同样,如果键入**2,则将得到b的平方。