为什么没有定义范围?

BRa*_*ses 3 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) 
Run Code Online (Sandbox Code Playgroud)

以上给出了错误:

NameError: name 'arange' is not defined 
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*oel 7

Python有很多内置命令.然而,arangeplot是不是其中的一部分.这些是由numpy和提供的matplotlib.

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

from numpy import *
from matplotlib import *
Run Code Online (Sandbox Code Playgroud)

在代码的顶部.这不是推荐的方式.最好这样做:

import numpy
import matplotlib
Run Code Online (Sandbox Code Playgroud)

然后当你调用他们的功能

x=numpy.arange(N)
Run Code Online (Sandbox Code Playgroud)

matplotlib.plot(x,y)
Run Code Online (Sandbox Code Playgroud)

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

一个(更)更高级的版本,甚至更好,如:

import numpy as np
import matplotlib.pyplot as plt
x=np.arange(N)
plt.plot(x,y)
Run Code Online (Sandbox Code Playgroud)

np是标准缩写,numpy并且pltmatplotlib.pyplot(plot实际定义命令的位置)的标准缩写.这些是标准缩写,只导入部分matplotlib内容有助于减少开销.

你应该阅读numpy数组与普通python列表的对比.


gbo*_*ffi 7

您是否python通过ipython交互式shell 接触过?使用ipython它仍然可以使用不推荐使用的命令行开关-pylab,该命令行开关向用户公开matplotlib来自matplotlib.pyplot模块和所有numpy库的交互式命令.

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

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

from pylab import *
...
Run Code Online (Sandbox Code Playgroud)

它允许你调用不合格的函数的名称,如arangeplot从你的脚本,第二个

import numpy as np
import matplotlib.pyplot as plt
# ...
x = np.arange(N)
# ...
plt.plot(x, x*x)
Run Code Online (Sandbox Code Playgroud)

即使第二个可能性是比第一个更详细,这是建议的途径:不合格进口被认为是不好的做法,因为它们污染脚本的命名空间,这是尤其如此大的模块,如matplotlib.pyplotnumpy定义数百名!

重新用于进口的名字,即npplt,这些选择一种最佳实践一致的,你会是明智的采取,因为你会发现在网上和的例子,让1000的使用正是这些名称访问绘图和数值库.

总结一下,使用

import numpy as np
import matplotlib.pyplot as plt
Run Code Online (Sandbox Code Playgroud)

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