@mdjsjdq
2015-12-27T22:59:26.000000Z
字数 10316
阅读 1753
编程
在Windows命令行中使用Python
如果你想要从Windows命令行调用Python,那么你需要先正确的设置PATH变量。对于Windows 2000、XP、2003,点击
控制面板->系统->高级->环境变量
。在“系统变量”表单中点击叫做PATH的变量,然后编辑这个变量,把;C:\Python23加到它的结尾。当然,是Python所在的正确目录名。对于较旧版本的Windows,把下面这行加到文件C:\AUTOEXEC.BAT中:PATH=%PATH%;C:\Python23,然后重新启动系统。对于Windows NT,则使用AUTOEXEC.NT文件。
如果你使用的是Linux/BSD shell,那么按Ctrl-d退出提示符。如果是在Windows命令行中,则按Ctrl-z
再按Enter。
我们将看一下如何用Python编写运行一个传统的“Hello World”程序。通过它,你将学会如何编写、保存和运行Python程序。
有两种使用Python运行你的程序的方式——使用交互式的带提示符的解释器或使用源文件。我们将学习这两种方法。
在我们开始讲述以源文件方式编写Python程序之前,我们需要一个编辑器来写源文件。挑选一个编辑器确实是极其重要的。你挑选一个编辑器就如同你挑选一辆你将购买的轿车一样。一个好的编辑器会帮助你方便地编写Python程序,使你地编程旅程更加舒适,帮助你更加快捷安全地到达目的地(实现目标)。
对于编辑器的基本要求之一是语法加亮功能,利用这一功能,你的Python程序的不同部分被标以不同的颜色,这样你可以更好 看清楚 你的程序,使它的运行显得形象化。
如果你使用Windows,那么我建议你使用IDLE。IDLE具备语法加亮功能,还有许多其他的功能,比如允许你在IDLE中运行你的程序。特别值得注意的是:不要使用Notepad——它是一个糟糕的选择,因为它没有语法加亮功能,而且更加重要的是,它不支持文本缩进。而我们将会看到文本缩进对于我们来说极其重要。一个好的编辑器,比如IDLE(还有VIM)将会自动帮助你做这些事情。
如果你使用Linux/FreeBSD,那么你有很多种选择。如果你是一位有经验的程序员,你一定已经在使用VIM或者Emacs了。勿庸置疑,它们是两个功能最强大的编辑器。使用它们编写你的Python程序,你将从中受益。我个人使用VIM编写我的大多数程序。如果你是一个初学编程的人,那么你可以使用Kate,它也是我最喜欢的编辑器之一。只要你愿意花时间学习使用VIM或Emacs,那么我强烈建议你一定要学习两者之一,因为从长远看来它们对你是极其有帮助的。
如果你还想寻找一下其他可供选择的编辑器,可以看一下详尽的Python编辑器列表,然后作出你的选择。你也可以使用Python的IDE(集成开发环境)。请看一下详尽的支持Python的IDE列表以获得详尽的信息。一旦你开始编写大型的Python程序,IDE确实很有用。
我再一次重申,请选择一个合适的编辑器——它能使编写Python程序变得更加有趣、方便。
#!/usr/bin/python
# Filename : helloworld.py
print 'Hello World'
万一你得到一个错误,那么请确保你键入的程序 准确无误 ,然后再运行一下程序。注意Python是大小写敏感的,即print与Print不一样——注意前一个是小写p而后一个是大写P。另外,确保在每一行的开始字符前没有空格或者制表符——我们将在后面讨论为什么这点是重要的。
跟在注释之后的是一句Python 语句 ——它只是打印文本“Hello World”。print实际上是一个操作符,而“Hello World”被称为一个字符串——别担心我们会在后面详细解释这些术语。
$ echo $PATH
/opt/mono/bin/:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/swaroop/bin
$ cp helloworld.py /home/swaroop/bin/helloworld
$ helloworld
Hello World
我们能够用echo命令来显示PATH变量,用PATH:/home/swaroop/mydir完成,其中“/home/swaroop/mydir”是我想要添加到PATH变量中的目录。
当你想要在任何时间、任何地方运行你的程序的时候,这个方法十分有用。它就好像创造你自己的指令,如同cd或其他Linux终端或DOS提示符命令那样。
对于Python来说,程序、脚本或者软件都是指同一个东西。
ipconfig > ipconfig.txt
本人刚学cmd,正在练习,就是不会删除例如C:\Program Files\XXX这个文件(或文件夹)。要是直接在C盘的倒是可以,在C盘的文件夹里的不知道怎么表达命令。总是说找不到C:\XXX。就是想问怎么进入C:\PROGRAM FILES然后删除XXX
dir 显示目录和文件
cd 进入目录
del 删除文件
rd 删除空目录(目录中不能有子目录和文件)
deltree 删除目录并同时删除目录中的子目录以及文件
例如:
c:\>
c:\>cd "Program files" ---这个地方一定要注意引号。dos命令不能有空格,如果有空格,请把字符用引号括起来!
C:\Program Files>
现在你就可以删除XXX文件了!
C:\Program Files>del xxx 回车就ok了!
还可以按下面的操作:
C:\Documents and Settings>del c:\"Program Files"\xxx.bmp
或
C:\Documents and Settings>del ..\"Program Files"\xxx.bmp
按q退出帮助。
一个字面意义上的常量的例子是如同5、1.23、9.25e-3这样的数,或者如同'This is a string'、"It's a string!"这样的字符串。它们被称作字面意义上的,因为它们具备 字面 的意义——你按照它们的字面意义使用它们的值。数2总是代表它自己,而不会是别的什么东西——它是一个常量,因为不能改变它的值。因此,所有这些都被称为字面意义上的常量。
在Python中有4种类型的数——整数、长整数、浮点数和复数。
一定要用自然字符串处理正则表达式。否则会需要使用很多的反斜杠。例如,后向引用符可以写成'\1'或r'\1'。这是1这是l
仅仅使用字面意义上的常量很快就会引发烦恼——我们需要一种既可以储存信息 又可以对它们进行操作的方法。这是为什么要引入 变量 。变量就是我们想要的东西——它们的值可以变化,即你可以使用变量存储任何东西。变量只是你的计算机中存储信息的一部分内存。与字面意义上的常量不同,你需要一些能够访问这些变量的方法,因此你给变量名字。
变量是标识符的例子。 标识符 是用来标识 某样东西 的名字。在命名标识符的时候,你要遵循这些规则:
变量可以处理不同类型的值,称为数据类型。基本的类型是数和字符串,我们已经讨论过它们了。在后面的章节里面,我们会研究怎么用类创造我们自己的类型。
记住,Python把在程序中用到的任何东西都称为 对象 。这是从广义上说的。因此我们不会说“某某 东西 ”,我们说“某个 对象 ”。
使用变量时只需要给它们赋一个值。不需要声明或定义数据类型。
物理行是你在编写程序时所 看见 的。逻辑行是Python 看见 的单个语句。Python假定每个 物理行 对应一个 逻辑行 。
逻辑行的例子如print 'Hello World'这样的语句——如果它本身就是一行(就像你在编辑器中看到的那样),那么它也是一个物理行。
默认地,Python希望每行都只使用一个语句,这样使得代码更加易读。
如果你想要在一个物理行中使用多于一个逻辑行,那么你需要使用分号(;)来特别地标明这种用法。分号表示一个逻辑行/语句的结束。例如:
i = 5
print i
与下面这个相同:
i = 5;
print i;
同样也可以写成:
i = 5; print i;
甚至可以写成:
i = 5; print i
然而,我强烈建议你坚持在每个物理行只写一句逻辑行。仅仅当逻辑行太长的时候,在多于一个物理行写一个逻辑行。这些都是为了尽可能避免使用分号,从而让代码更加易读。事实上,我 从来没有 在Python程序中使用过或看到过分号。
下面是一个在多个物理行中写一个逻辑行的例子。它被称为明确的行连接。
s = 'This is a string. \
This continues the string.'
print s
它的输出:
This is a string. This continues the string.
有时候,有一种暗示的假设,可以使你不需要使用反斜杠。这种情况出现在逻辑行中使用了圆括号、方括号或波形括号的时候。这被称为暗示的行连接。你会在后面介绍如何使用列表的章节中看到这种用法。
空白在Python中是重要的。事实上行首的空白是重要的。它称为缩进。在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。
这意味着同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。我们将在后面的章节中看到有关块的用处的例子。
你需要记住的一样东西是错误的缩进会引发错误。例如:
i = 5
print 'Value is', i # Error! Notice a single space at the start of the line
print 'I repeat, the value is', i
当你运行这个程序的时候,你会得到下面的错误:
File "whitespace.py", line 4
print 'Value is', i # Error! Notice a single space at the start of the line
^
SyntaxError: invalid syntax
注意,在第二行的行首有一个空格。Python指示的这个错误告诉我们程序的语法是无效的,即程序没有正确地编写。它告诉你, 你不能随意地开始新的语句块 (当然除了你一直在使用的主块)。何时你能够使用新块,将会在后面的章节,如控制流中详细介绍。
如何缩进
不要混合使用制表符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。我 强烈建议 你在每个缩进层次使用 单个制表符 或 两个或四个空格 。
选择这三种缩进风格之一。更加重要的是,选择一种风格,然后一贯地使用它,即 只 使用这一种风格。
现在我们已经学习了很多详细的内容,我们可以开始学习更加令你感兴趣的东西,比如控制流语句
。在继续学习之前,请确信你对本章的内容清楚明了。
使用#
来注释程序(单行)多行用
Python的除法很奇怪
/ 得到整数部分,除非有一个数为浮点结果才是我们熟悉的结果
// 为取整运算
% 为取余数(模)
123 111,101,1
123>>1
61 111,101
123<<1
246 111,101,0
数字的位运算蛮有意思发的,理解计算机二进制01的关系首先要转换成二进制 |
的以及&
~(异或1+1=0其他的正常)和^(二进制加1)
返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。
x = 2; y = 2; x == y返回True。x = 'str'; y = 'stR'; x == y返回False。
x = 'str'; y = 'str'; x == y返回True。
x = False; y = True; x and y,由于x是False,返回False。在这里,Python不会计算y,因为它知道这个表达式的值肯定是False(因为x是False)。这个现象称为短路计算。
默认地,运算符优先级表决定了哪个运算符在别的运算符之前计算。然而,如果你想要改变它们的计算顺序,你得使用圆括号。例如,你想要在一个表达式中让加法在乘法之前计算,那么你就得写成类似(2 + 3) * 4的样子。
运算符通常由左向右结合,即具有相同优先级的运算符按照从左向右的顺序计算。例如,2 + 3 + 4被计算成(2 + 3) + 4。一些如赋值运算符那样的运算符是由右向左结合的,即a = b = c被处理为a = (b = c)。
#!/usr/bin/python
# Filename: expression.py
length = 5
breadth = 2
area = length * breadth
print 'Area is', area
print 'Perimeter is', 2 * (length + breadth)
$ python expression.py
Area is 10
Perimeter is 14
它如何工作
矩形的长度与宽度存储在以它们命名的变量中。我们借助表达式使用它们计算矩形的面积和边长。我们表达式length * breadth的结果存储在变量area中,然后用print语句打印。在另一个打印语句中,我们直接使用表达式2 * (length + breadth)的值。
另外,注意Python如何打印“漂亮的”输出。尽管我们没有在'Area is'和变量area之间指定空格,Python自动在那里放了一个空格,这样我们就可以得到一个清晰漂亮的输出,而程序也变得更加易读(因为我们不需要担心输出之间的空格问题)。这是Python如何使程序员的生活变得更加轻松的一个例子。
我们已经学习了如何使用运算符、操作数和表达式——这些使任何程序的基本组成部分。接下来,我们将学习如何通过语句在我们的程序中使用这些部分。
在到目前为止我们所见到的程序中,总是有一系列的语句,Python忠实地按照它们的顺序执行它们。如果你想要改变语句流的执行顺序,该怎么办呢?例如,你想要让程序做一些决定,根据不同的情况做不同的事情,例如根据时间打印“早上好”或者“晚上好”。
#!/usr/bin/env python
# Filename: if.py
number=23
guess=int(raw_input('Enter an integer : '))
if guess==number:
print 'Congratulations, you guessed it.' # New block starts here
print "(but you do not win any prizes!)" # New block ends here
elif guess<number:
print 'No, it is a little higher than that' # Another block
# You can do whatever you want in a block ...
else:
print 'No, it is a little lower than that'
# you must have guess > number to reach here
print 'Done'
# This last statement is always executed, after the if statement is executed
你可能已经猜到了,这是通过控制流语句实现的。在Python中有三种控制流语句——if、for和while。
注意if语句在结尾处包含一个冒号——我们通过它告诉Python下面跟着一个语句块。
然后,我们检验猜测是否小于我们的数,如果是这样的,我们告诉用户它的猜测大了一点。我们在这里使用的是elif从句,它事实上把两个相关联的if else-if else语句合并为一个if-elif-else语句。这使得程序更加简单,并且减少了所需的缩进数量。
elif和else从句都必须在逻辑行结尾处有一个冒号,下面跟着一个相应的语句块(当然还包括正确的缩进)。
你也可以在一个if块中使用另外一个if语句,等等——这被称为嵌套的if语句。
记住,elif和else部分是可选的。一个最简单的有效if语句是:
if True:
print 'Yes, it is true'
在Python执行完一个完整的if语句以及与它相关联的elif和else从句之后,它移向if语句块的下一个语句。在这个例子中,这个语句块是主块。程序从主块开始执行,而下一个语句是print 'Done'语句。在这之后,Python看到程序的结尾,简单的结束运行。
尽管这是一个非常简单的程序,但是我已经在这个简单的程序中指出了许多你应该注意的地方。所有这些都是十分直接了当的(对于那些拥有C/C++背景的用户来说是尤为简单的)。它们在开始时会引起你的注意,但是以后你会对它们感到熟悉、“自然”。
在Python中没有switch语句。你可以使用if..elif..else语句来完成同样的工作(在某些场合,使用字典会更加快捷。)
#!/usr/bin/python
# Filename: while.py
number = 23
running = True
while running:
guess = int(raw_input('Enter an integer : '))
if guess == number:
print 'Congratulations, you guessed it.'
running = False # this causes the while loop to stop
elif guess < number:
print 'No, it is a little higher than that'
else:
print 'No, it is a little lower than that'
else:
print 'The while loop is over.'
# Do anything else you want to do here
print 'Done'
只要在一个条件为真的情况下,while语句允许你重复执行一块语句。while语句是所谓 循环 语句的一个例子。while语句有一个可选的else从句。
在这个程序中,我们仍然使用了猜数游戏作为例子,但是这个例子的优势在于用户可以不断的猜数,直到他猜对为止——这样就不需要像前面那个例子那样为每次猜测重复执行一遍程序。这个例子恰当地说明了while语句的使用。
我们把raw_input和if语句移到了while循环内,并且在while循环开始前把running变量设置为True。首先,我们检验变量running是否为True,然后执行后面的 while-块 。在执行了这块程序之后,再次检验条件,在这个例子中,条件是running变量。如果它是真的,我们再次执行while-块,否则,我们继续执行可选的else-块,并接着执行下一个语句。
当while循环条件变为False的时候,else块才被执行——这甚至也可能是在条件第一次被检验的时候。如果while循环有一个else从句,它将始终被执行,除非你的while循环将永远循环下去不会结束!
True和False被称为布尔类型。你可以分别把它们等效地理解为值1和0。在检验重要条件的时候,布尔类型十分重要,它们并不是真实的值1。
else块事实上是多余的,因为你可以把其中的语句放在同一块(与while相同)中,跟在while语句之后,这样可以取得相同的效果。
记住,你可以在while循环中使用一个else从句。
for..in是另外一个循环语句,它在一序列的对象上 递归 即逐一使用队列中的每个项目。我们会在后面的章节中更加详细地学习序列。
#!/usr/bin/python
# Filename: for.py
for i in range(1, 5):
print i
else:
print 'The for loop is over'
$ python for.py
1
2
3
4
The for loop is over
在这个程序中,我们打印了一个 序列 的数。我们使用内建的range函数生成这个数的序列。
我们所做的只是提供两个数,range返回一个序列的数。这个序列从第一个数开始到第二个数为止。例如,range(1,5)给出序列[1, 2, 3, 4]。默认地,range的步长为1。如果我们为range提供第三个数,那么它将成为步长。例如,range(1,5,2)给出[1,3]。记住,range 向上 延伸到第二个数,即它不包含第二个数。
for循环在这个范围内递归——for i in range(1,5)等价于for i in [1, 2, 3, 4],这就如同把序列中的每个数(或对象)赋值给i,一次一个,然后以每个i的值执行这个程序块。在这个例子中,我们只是打印i的值。
记住,else部分是可选的。如果包含else,它总是在for循环结束后执行一次,除非遇到break语句。
记住,for..in循环对于任何序列都适用。这里我们使用的是一个由内建range函数生成的数的列表,但是广义说来我们可以使用任何种类的由任何对象组成的序列!我们会在后面的章节中详细探索这个观点。
Python的for循环从根本上不同于C/C++的for循环。C#程序员会注意到Python的for循环与C#中的foreach循环十分类似。Java程序员会注意到它与Java 1.5中的for (int i : IntArray)相似。
在C/C++中,如果你想要写for (int i = 0; i < 5; i++),那么用Python,你写成for i in range(0,5)。你会注意到,Python的for循环更加简单、明白、不易出错。
break语句是用来 终止 循环语句的,即哪怕循环条件没有称为False或序列还没有被完全递归,也停止执行循环语句。
一个重要的注释是,如果你从for或while循环中 终止 ,任何对应的循环else块将不执行。
#!/usr/bin/python
# Filename: break.py
while True:
s = raw_input('Enter something : ')
if s == 'quit':
break
print 'Length of the string is', len(s)
print 'Done'
在这个程序中,我们反复地取得用户地输入,然后打印每次输入地长度。我们提供了一个特别的条件来停止程序,即检验用户的输入是否是'quit'。通过 终止 循环到达程序结尾来停止程序。
输入字符串的长度通过内建的len函数取得。
记住,break语句也可以在for循环中使用。
我在这里输入的是我所写的一段小诗,称为G2的Python诗:
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!
continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后 继续 进行下一轮循环。
#!/usr/bin/python
# Filename: continue.py
while True:
s = raw_input('Enter something : ')
if s == 'quit':
break
if len(s) < 3:
continue
print 'Input is of sufficient length'
# Do other kinds of processing here...
在这个程序中,我们从用户处取得输入,但是我们仅仅当它们有至少3个字符长的时候才处理它们。所以,我们使用内建的len函数来取得长度。如果长度小于3,我们将使用continue语句忽略块中的剩余的语句。否则,这个循环中的剩余语句将被执行,我们可以在这里做我们希望的任何处理。
注意,continue语句对于for循环也有效。
我们已经学习了如何使用三种控制流语句——if、while和for以及与它们相关的break和continue语句。它们是Python中最常用的部分,熟悉这些控制流是应当掌握的基本技能。
接下来,我们将学习如何创建和使用函数。
2015年12月27日23:00:58