我正在尝试使用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。
答案 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
的平方。