[关闭]
@mdjsjdq 2015-12-27T22:59:26.000000Z 字数 10316 阅读 1753

简明Python教程

编程


简明Python教程

Windows 用户

在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文件。

如何退出Python提示符

如果你使用的是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程序变得更加有趣、方便。

使用源文件

  1. #!/usr/bin/python
  2. # Filename : helloworld.py
  3. print 'Hello World'

万一你得到一个错误,那么请确保你键入的程序 准确无误 ,然后再运行一下程序。注意Python是大小写敏感的,即print与Print不一样——注意前一个是小写p而后一个是大写P。另外,确保在每一行的开始字符前没有空格或者制表符——我们将在后面讨论为什么这点是重要的。

跟在注释之后的是一句Python 语句 ——它只是打印文本“Hello World”。print实际上是一个操作符,而“Hello World”被称为一个字符串——别担心我们会在后面详细解释这些术语。

  1. $ echo $PATH
  2. /opt/mono/bin/:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/swaroop/bin
  3. $ cp helloworld.py /home/swaroop/bin/helloworld
  4. $ helloworld
  5. Hello World

我们能够用echo命令来显示PATH变量,用使PATH:/home/swaroop/mydir完成,其中“/home/swaroop/mydir”是我想要添加到PATH变量中的目录。

当你想要在任何时间、任何地方运行你的程序的时候,这个方法十分有用。它就好像创造你自己的指令,如同cd或其他Linux终端或DOS提示符命令那样。

对于Python来说,程序、脚本或者软件都是指同一个东西。

CMD里的内容保存在本地

  1. ipconfig > ipconfig.txt

怎么使用CMD删除一个文件夹内的文件或文件夹

本人刚学cmd,正在练习,就是不会删除例如C:\Program Files\XXX这个文件(或文件夹)。要是直接在C盘的倒是可以,在C盘的文件夹里的不知道怎么表达命令。总是说找不到C:\XXX。就是想问怎么进入C:\PROGRAM FILES然后删除XXX

  1. dir 显示目录和文件
  2. cd 进入目录
  3. del 删除文件
  4. rd 删除空目录(目录中不能有子目录和文件)
  5. deltree 删除目录并同时删除目录中的子目录以及文件
  6. 例如:
  7. c:\>
  8. c:\>cd "Program files" ---这个地方一定要注意引号。dos命令不能有空格,如果有空格,请把字符用引号括起来!
  9. C:\Program Files>
  10. 现在你就可以删除XXX文件了!
  11. C:\Program Files>del xxx 回车就ok了!
  12. 还可以按下面的操作:
  13. C:\Documents and Settings>del c:\"Program Files"\xxx.bmp
  14. 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把在程序中用到的任何东西都称为 对象 。这是从广义上说的。因此我们不会说“某某 东西 ”,我们说“某个 对象 ”。

给C/C++程序员的注释

使用变量时只需要给它们赋一个值。不需要声明或定义数据类型。

逻辑行与物理行

物理行是你在编写程序时所 看见 的。逻辑行是Python 看见 的单个语句。Python假定每个 物理行 对应一个 逻辑行 。

逻辑行的例子如print 'Hello World'这样的语句——如果它本身就是一行(就像你在编辑器中看到的那样),那么它也是一个物理行。

默认地,Python希望每行都只使用一个语句,这样使得代码更加易读。

如果你想要在一个物理行中使用多于一个逻辑行,那么你需要使用分号(;)来特别地标明这种用法。分号表示一个逻辑行/语句的结束。例如:

  1. i = 5
  2. print i

与下面这个相同:

  1. i = 5;
  2. print i;

同样也可以写成:

  1. i = 5; print i;

甚至可以写成:

  1. i = 5; print i

然而,我强烈建议你坚持在每个物理行只写一句逻辑行。仅仅当逻辑行太长的时候,在多于一个物理行写一个逻辑行。这些都是为了尽可能避免使用分号,从而让代码更加易读。事实上,我 从来没有 在Python程序中使用过或看到过分号。

下面是一个在多个物理行中写一个逻辑行的例子。它被称为明确的行连接。

  1. s = 'This is a string. \
  2. This continues the string.'
  3. print s

它的输出:

  1. This is a string. This continues the string.

有时候,有一种暗示的假设,可以使你不需要使用反斜杠。这种情况出现在逻辑行中使用了圆括号、方括号或波形括号的时候。这被称为暗示的行连接。你会在后面介绍如何使用列表的章节中看到这种用法。

缩进

空白在Python中是重要的。事实上行首的空白是重要的。它称为缩进。在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。

这意味着同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。我们将在后面的章节中看到有关块的用处的例子。

你需要记住的一样东西是错误的缩进会引发错误。例如:

  1. i = 5
  2. print 'Value is', i # Error! Notice a single space at the start of the line
  3. print 'I repeat, the value is', i

当你运行这个程序的时候,你会得到下面的错误:

  1. File "whitespace.py", line 4
  2. print 'Value is', i # Error! Notice a single space at the start of the line
  3. ^
  4. SyntaxError: invalid syntax

注意,在第二行的行首有一个空格。Python指示的这个错误告诉我们程序的语法是无效的,即程序没有正确地编写。它告诉你, 你不能随意地开始新的语句块 (当然除了你一直在使用的主块)。何时你能够使用新块,将会在后面的章节,如控制流中详细介绍。

如何缩进
不要混合使用制表符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。我 强烈建议 你在每个缩进层次使用 单个制表符 或 两个或四个空格 。
选择这三种缩进风格之一。更加重要的是,选择一种风格,然后一贯地使用它,即 只 使用这一种风格。

概括

现在我们已经学习了很多详细的内容,我们可以开始学习更加令你感兴趣的东西,比如控制流语句。在继续学习之前,请确信你对本章的内容清楚明了。

使用#来注释程序(单行)多行用

运算符

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)。

使用表达式

  1. #!/usr/bin/python
  2. # Filename: expression.py
  3. length = 5
  4. breadth = 2
  5. area = length * breadth
  6. print 'Area is', area
  7. print 'Perimeter is', 2 * (length + breadth)

输出

  1. $ python expression.py
  2. Area is 10
  3. Perimeter is 14

它如何工作

矩形的长度与宽度存储在以它们命名的变量中。我们借助表达式使用它们计算矩形的面积和边长。我们表达式length * breadth的结果存储在变量area中,然后用print语句打印。在另一个打印语句中,我们直接使用表达式2 * (length + breadth)的值。

另外,注意Python如何打印“漂亮的”输出。尽管我们没有在'Area is'和变量area之间指定空格,Python自动在那里放了一个空格,这样我们就可以得到一个清晰漂亮的输出,而程序也变得更加易读(因为我们不需要担心输出之间的空格问题)。这是Python如何使程序员的生活变得更加轻松的一个例子。

概括

我们已经学习了如何使用运算符、操作数和表达式——这些使任何程序的基本组成部分。接下来,我们将学习如何通过语句在我们的程序中使用这些部分。

控制流

在到目前为止我们所见到的程序中,总是有一系列的语句,Python忠实地按照它们的顺序执行它们。如果你想要改变语句流的执行顺序,该怎么办呢?例如,你想要让程序做一些决定,根据不同的情况做不同的事情,例如根据时间打印“早上好”或者“晚上好”。

if 语句

  1. #!/usr/bin/env python
  2. # Filename: if.py
  3. number=23
  4. guess=int(raw_input('Enter an integer : '))
  5. if guess==number:
  6. print 'Congratulations, you guessed it.' # New block starts here
  7. print "(but you do not win any prizes!)" # New block ends here
  8. elif guess<number:
  9. print 'No, it is a little higher than that' # Another block
  10. # You can do whatever you want in a block ...
  11. else:
  12. print 'No, it is a little lower than that'
  13. # you must have guess > number to reach here
  14. print 'Done'
  15. # 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语句是:

  1. if True:
  2. print 'Yes, it is true'

在Python执行完一个完整的if语句以及与它相关联的elif和else从句之后,它移向if语句块的下一个语句。在这个例子中,这个语句块是主块。程序从主块开始执行,而下一个语句是print 'Done'语句。在这之后,Python看到程序的结尾,简单的结束运行。

尽管这是一个非常简单的程序,但是我已经在这个简单的程序中指出了许多你应该注意的地方。所有这些都是十分直接了当的(对于那些拥有C/C++背景的用户来说是尤为简单的)。它们在开始时会引起你的注意,但是以后你会对它们感到熟悉、“自然”。

在Python中没有switch语句。你可以使用if..elif..else语句来完成同样的工作(在某些场合,使用字典会更加快捷。)

while语句

  1. #!/usr/bin/python
  2. # Filename: while.py
  3. number = 23
  4. running = True
  5. while running:
  6. guess = int(raw_input('Enter an integer : '))
  7. if guess == number:
  8. print 'Congratulations, you guessed it.'
  9. running = False # this causes the while loop to stop
  10. elif guess < number:
  11. print 'No, it is a little higher than that'
  12. else:
  13. print 'No, it is a little lower than that'
  14. else:
  15. print 'The while loop is over.'
  16. # Do anything else you want to do here
  17. 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语句之后,这样可以取得相同的效果。

给C/C++程序员的注释

记住,你可以在while循环中使用一个else从句。

for循环

for..in是另外一个循环语句,它在一序列的对象上 递归 即逐一使用队列中的每个项目。我们会在后面的章节中更加详细地学习序列。

  1. #!/usr/bin/python
  2. # Filename: for.py
  3. for i in range(1, 5):
  4. print i
  5. else:
  6. print 'The for loop is over'

输出

  1. $ python for.py
  2. 1
  3. 2
  4. 3
  5. 4
  6. 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函数生成的数的列表,但是广义说来我们可以使用任何种类的由任何对象组成的序列!我们会在后面的章节中详细探索这个观点。

给C/C++/Java/C#程序员的注释

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语句

break语句是用来 终止 循环语句的,即哪怕循环条件没有称为False或序列还没有被完全递归,也停止执行循环语句。

一个重要的注释是,如果你从for或while循环中 终止 ,任何对应的循环else块将不执行。

  1. #!/usr/bin/python
  2. # Filename: break.py
  3. while True:
  4. s = raw_input('Enter something : ')
  5. if s == 'quit':
  6. break
  7. print 'Length of the string is', len(s)
  8. print 'Done'

它如何工作

在这个程序中,我们反复地取得用户地输入,然后打印每次输入地长度。我们提供了一个特别的条件来停止程序,即检验用户的输入是否是'quit'。通过 终止 循环到达程序结尾来停止程序。

输入字符串的长度通过内建的len函数取得。

记住,break语句也可以在for循环中使用。

G2的Python诗

我在这里输入的是我所写的一段小诗,称为G2的Python诗:

  1. Programming is fun
  2. When the work is done
  3. if you wanna make your work also fun:
  4. use Python!

continue语句

continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后 继续 进行下一轮循环。

  1. #!/usr/bin/python
  2. # Filename: continue.py
  3. while True:
  4. s = raw_input('Enter something : ')
  5. if s == 'quit':
  6. break
  7. if len(s) < 3:
  8. continue
  9. print 'Input is of sufficient length'
  10. # Do other kinds of processing here...

它如何工作

在这个程序中,我们从用户处取得输入,但是我们仅仅当它们有至少3个字符长的时候才处理它们。所以,我们使用内建的len函数来取得长度。如果长度小于3,我们将使用continue语句忽略块中的剩余的语句。否则,这个循环中的剩余语句将被执行,我们可以在这里做我们希望的任何处理。

注意,continue语句对于for循环也有效。

概括

我们已经学习了如何使用三种控制流语句——if、while和for以及与它们相关的break和continue语句。它们是Python中最常用的部分,熟悉这些控制流是应当掌握的基本技能。

接下来,我们将学习如何创建和使用函数。

2015年12月27日23:00:58

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注