为什么没有定义范围?

时间:2015-01-31 21:30:05

标签: python

我没有编程经验,正在学习Python课程。我现在正在经历条件限制并遇到一个我不理解其原因的问题。

我基本上只是想让某人在x的所需间隔内绘制x ^ 2,其限制是x不是负的。如果用户输入了负输入,他们会收到一条消息,说明它不被允许。否则,应绘制x与x ^ 2。

N = input('Enter upper limit of x:');
if N < 0:
    print "Negative input isn't allowed."
else:
    x = arange(N)
    y = x*x
    plot(x,y) 

上面给出了错误:

NameError: name 'arange' is not defined 

我不明白,因为arange()通常是根据我的(很少)理解来定义的。

3 个答案:

答案 0 :(得分:7)

Python有很多内置命令。但是,arangeplot不是其中之一。这些内容由numpymatplotlib提供。

要使代码正常工作,您可以添加:

from numpy import *
from matplotlib import *

位于代码顶部。这不是推荐的方式。最好这样做:

import numpy
import matplotlib

然后当你调用他们的函数时

x=numpy.arange(N)

matplotlib.plot(x,y)

建议这样做的原因有时您可能有其他具有相同功能名称的模块。

更高级的(非常)更高级的版本就像:

import numpy as np
import matplotlib.pyplot as plt
x=np.arange(N)
plt.plot(x,y)

npnumpy的标准缩写,pltmatplotlib.pyplot的标准缩写(实际定义了命令plot)。这些是标准缩写,只导入matplotlib的一部分有助于减少开销。

你应该读一下numpy数组与普通python列表的对比。

答案 1 :(得分:7)

您是否通过python互动外壳了解了ipython?使用ipython,仍然可以使用已弃用的命令行开关-pylab,该命令行开关matplotlib向用户公开matplotlib.pyplot模块中的numpy交互式命令以及所有from pylab import * ... 库。

当你把这些习惯写成你的第一个python程序时,你会发现事情更复杂......

你基本上有两个解决方案,第一个是

arange

允许您从脚本中调用plotimport numpy as np import matplotlib.pyplot as plt # ... x = np.arange(N) # ... plt.plot(x, x*x) 等非限定函数名称,第二个

matplotlib.pyplot

即使第二种可能性比第一种可能性更冗长,也是建议的途径:不合格的导入被认为是不好的做法,因为它们污染了脚本的命名空间,对于像numpy这样的大型模块尤其如此和np定义了数百个名字!

重新使用导入的名称,即pltimport numpy as np import matplotlib.pyplot as plt ,这些选择是一种最佳实践协议,您明智地采用这种协议,因为您可以在net和SO 1000的示例,它们使用这些名称来访问绘图和数值库。

总结一下,使用

{{1}}

是一个如此常见的习语,我建议你这样做。

答案 2 :(得分:1)

我认为“arange”来自Numpy。如果你想要内置的Python函数,你需要使用“xrange”。如果你想要Numpy“arange”,那么你需要导入Numpy。基于您的代码片段,您正在使用Numpy,因此请添加:

from numpy import *