Python⼊门教程
运⾏环境
1. 运⾏环境
腰痛的原因有哪些要⽤python写程序,你必须先安装⼀个python的解释器。它可以存在于⼤多数平台(包括Macintosh、Unix和Windows)。更多与此有关的信息可以在python的⽹站上找到。你还应该有⼀个⽂本编辑器(象emacs、notepad或者类似的东西)。
编程是什么?
2. 编程是什么?
为计算机写程序其实就是给它⼀系列的指令告诉它去做什么。计算机程序在某些⽅⾯就象是菜谱,指导我们如何做菜的那种。例如[1]:
假⽇⽕腿沙拉
原料:
腌泡汁:
1/4杯酸橙汁
1/4杯低钠⼤⾖酱油
1/4杯⽔
1⼤汤匙植物油
3/4茶匙⼩茴⾹
1/2茶匙⽜⾄
1/4茶匙热胡椒粉
2⽚丁⾹、⼤蒜,捣碎
沙拉:
1份(12盎司)罐装少钠午餐⾁⽕腿切成条状
1个洋葱,切⽚
胡椒粉,切好的⽣菜
12个樱桃西红柿,切半
⽅法:
把腌泡汁装在有合适盖⼦的⼴⼝瓶⾥摇匀。⽤塑料袋装上⽕腿,泼上腌泡汁,封住袋⼝。在电冰箱⾥腌制30分钟。从塑料袋⾥取出⽕腿;准备2⼤汤匙腌泡汁,在煮锅⾥煮⼀下。加上⽕腿、洋葱、绿⾊的胡椒。烧3到4分钟直到⽕腿熟了为⽌……
当然,没有⼀台计算机会懂这个……⽽且即便是懂,⼤多数计算机也不可能烧制出⼀份沙拉。那么,我们该如何让这些变得对计算机来说更为友好⼀些呢?从根本上说依赖于两点:⾸先,我们必须以计算机可以理解的⽅式与之交流;其次还要和它谈论它能够做到的事情。
第⼀点意味着我们必须使⽤⼀种语⾔--⼀种已经为之准备好了解释器的程序设计语⾔,第⼆点意味着我们不能期望计算机为我们做⼀份沙拉--但是我们可以让它做数字累加或者在屏幕上打印东西之类的事情。
Hello……
3. Hello……
程序设计教程有⼀个传统,通常以在屏幕上打印“Hello, world!”这样的程序做为开始。对python来说,这⾮常简单:
print "Hello, world!"
它从根本上说很象上⾯的菜谱(尽管要短得多!)。它告诉计算机做什么:打印“Hello, world!”。如果让它打印更多的废话该怎么做呢?很简单:
print "Hello, world!"
print "Goodbye, world!"
不⽐上⼀个难,是不是?但是不怎么有趣……我们希望它可以处理更多的元素,就象沙拉菜谱那样。那么,我们都有哪些元素呢?⾸先,有字符串,象“Hello, world!”,除此之外还有数字。假设我们打算让计算机为我们计算矩形的⾯积。我们可以给它如下的菜谱:
# The Area of a Rectangle
# Ingredients:
width = 20
height = 30
# Instructions:
area = width * height
print area
sio2你⼤概可以看出它同⽕腿沙拉菜谱的相似性(尽管有些细微的差别)。但它是如何⼯作的呢?
⾸先,以#开始的⾏叫做注释事实上会被计算机忽略。然⽽插⼊象这样⼩段的注释对于增强你程序的可读性来说是很重要的。
接下来,看起来象 foo = bar 这样的⾏叫做赋值。对于 width = 20 这样的情况来说就是告诉计算机从这⾥开始width就代表20了。它还意味着⼀个名字为“width”的变量从此被创建了(如果它先前已经存在,那么会被重新覆盖)。所以,我们以后使⽤这个变量的时候,计算机就知道了它的值。因此,
width * height
美国登月几次
本质上同
20 * 30
⼀样会计算出600这个结果,然后赋给名称为“area”的变量。程序的最后⼀句在屏幕上打印出变量“area”的值,所以你看到这个程序运⾏的最终结果仅仅是
600
注意:在某些程序设计语⾔中,你必须在程序开始的时候告诉计算机你将会⽤到哪些变量(就象沙拉中的元素)--⽽python ⾜够聪明,所以你可以根据需要随时创建。
反馈
传说中勇者的传说4. 反馈
现在,你可以执⾏⼀些简单,或者再复杂⼀点的计算了。⽐⽅说,你或许打算写⼀段程序来计算圆形的⾯积⽽不是矩形的:
radius = 30
print radius * radius * 3.14
然⽽,这事实上并不⽐计算矩形⾯积的那个程序更有意思。⾄少在我看来是这样。它有些僵硬。如果我们看到半径为31的圆该怎么办?怎样让计算机知道?这有点象沙拉菜谱中的:“烧3到4分钟直到⽕腿熟了为⽌。”要知道何时烧熟,我们必须检查。我们需要反馈,或者提⽰。计算机如何知道我们圆形的半径?同样需要输⼊资料……我们可以做的是告诉计算机半径是多少:
radius = input("What is the radius?")
print radius * radius * 3.14
现在程序变得漂亮⼀些了……input是个被称为函数的东西。(很快你将学习创建你⾃⼰的函数。⽽input是python内建的函数。)仅仅写下
input
什么也不会做……你必须在它的后⾯放上⼀对括号。所以input()可以⼯作--它会简单的要求⽤户输⼊半径的长度。⽽上⾯的那个版本对⽤户来说也许更友好⼀些,因为它⾸先打印出了⼀个问题。当我们将诸如提问字符串“What is the radius?”之类的东西放在函数调⽤的括号中时,这个过程被称为函数的参数传递。括号中的内容被称为参数。在上个例⼦中我们传递了⼀个提问作为参数以便input知道在
获得答案前应该先打印什么。
但是获得的答案如何到达radius变量呢?函数input,调⽤时,会返回⼀个值(象许多其它函数⼀样)。你不⼀定⾮要使⽤这个值,但象我们这种情况,我们要使⽤它。这样,下⾯这两个表达式有着很⼤的差别:
foo = input
bar = input()
foo现在包含input函数本⾝(所以它事实上可以象foo("What is
your age?")这样使⽤;这被称为动态函数调⽤)⽽bar包含⽤户键⼊的值。
流程
5. 流程
现在我们可以编写程序执⾏简单的任务(运算和打印)并且可以获得⽤户输⼊了。这很有⽤,但仍然局限在按顺序执⾏命令,也就是说--它们必须按照事先安排好的顺序执⾏。⼤多数⽕腿沙拉菜谱是
象这样顺序或者线性叙述的。但是如果我们打算让计算机检查沙拉是否烧好该怎样告诉它呢?如果烧好了,那么应该从烘箱⾥把它取出来--否则的话,应该接着让它烧更长⼀段时间什么的。我们如何表达这个?
我们想做的,其实是控制程序的流程。它可以从两个⽅向执⾏--要么拿开⽕腿,要不继续让它留在烘箱⾥。我们可以选择,条件是它是否烧好。这被称为条件执⾏。我们可以这样写:
temperature = input("What is the temperature of the spam?")
if temperature >; 50:
print "The salad is properly cooked."
el:
print "Cook the salad some more."
意思很明显:如果温度超过50(摄⽒度),那么打印出信息告诉⽤户烧好了,否则,告诉⽤户再烧制⼀段时间。
注意:缩进在python中很重要。条件执⾏(还有循环执⾏以及函数定义--见后⾯)中的语句块必须被缩进(⽽且要缩进同等数量的空格;⼀个键相当于8个空格)以便解释器可以知道它们从哪⾥开始到哪⾥结束。这同时也使程序变得更加可读。
让我们回到先前的⾯积计算问题。能看出来这段程序做什么吗?
# Area calculation program
print "Welcome to the Area calculation program"
党员自我评价意见print "---------------------------------------"
print
# Print out the menu:
print "Plea lect a shape:"
print "2 Circle"
#Get the ur's choice:
shape = input(">; ")
#Calculate the area:
if shape == 1:
height = input("Plea enter the height: ")
width = input("Plea enter the width: ")
area = height *width
print "The area is ", area
el:
radius = input("Plea enter the radius: ")
area = 3.14 * (radius**2)
print "The area is ", area
这个例⼦中的新东西:
1. 只使⽤print本⾝将打印出⼀个空⾏
2. ==检查两个值是否相等,与=不同,后者把表达式右侧的值赋给左侧的变量。这是⼀个⾮常重要的差别!
再见只是陌生人歌词3. **是python的幂运算符--因此半径的平⽅被写成radius**2
4. print能够打印出不⽌⼀个东西。只要⽤逗号把它们分开就可以了。(它们在输出时会⽤单个空格分开。)
这个程序很简单:它要⼀个数字,告诉它⽤户打算让它计算矩形或是圆形的⾯积。然后,使⽤⼀个if语句(条件执⾏)来决定应当执⾏哪个语句块计算⾯积。这两个语句块同先前⾯积计算例⼦中使⽤的语句
块本质上是⼀样的。留意注释是如何使代码变得更加可读的。编程的第⼀条戒律就是:“你应当注释!”⽆论如何--它都是⼀个应该养成的好习惯。
练习1:
扩展上⾯的程序使它包括正⽅形⾯积的计算,⽤户只要输⼊它⼀条边的长度就可以了。做这个练习之前你需要了解⼀件事:如果你有两个以上的选择,你可以象这样写:
if foo == 1:
#
elif foo == 2:
# Do
elif foo == 3:
# If all
这⾥的elif是意思为“el if”的神秘代码:)。所以,如foo等于1,做某件事;否则,如果foo等于2,那么做另外的⼀些事,等等。你也可以在程序中加⼊其它的选项--象三⾓形以及任意多边形。随你的便。
循环
6. 循环
顺序执⾏和条件执⾏仅仅是程序设计三个基本语句块架构⽅式中的两个。第三个则是循环执⾏。在上个段落中我假设了⼀种情况,检查⽕腿是否烧好,但很明显它并不适⽤。如果下次检查时⽕腿仍然没烧好该怎么办?我们怎么知道需要检查多少次?事实上,我们不知道。⽽且我们也没必要知道。我们可以要求计算机持续检查直到烧好了为⽌。怎么表达这个?你猜到了--我们使⽤循环,或者说是重复执⾏。
python有两种循环类型:while循环和for循环。for循环⼤概是最简单的。举个例⼦:
for food in "spam", "eggs", "tomatoes":
它的意思是:对于列表"spam", "eggs", "tomatoes"中的每个元素,都打印出你喜欢它。循环中的语句块为每个元素执⾏⼀次,⽽且每次执⾏,当前的元素都被赋给变量food(在这个例⼦中)。另外⼀个例⼦:
for number in range(1, 100):
print "Hello, world!"
print "Just", 100 - number, "more "
print "Hello, world"
print "That was the Phew!"
函数range返回给定范围的数字列表(包括第⼀个数字,不包括最后⼀个……这个例⼦中是[1……99])。所以,这样解释它:
循环体为1(包括)到100(不包括)之间的数字每个执⾏⼀次。(哪个是循环体以及随后的表达式事实上做什么留下来做为练习。)
但这对我们的烧菜问题并没有实质的帮助。如果我们打算检查⽕腿⼀百次,那么这是个很好的解决⽅案;但是我们不知道这是否够--或者太多了。我们只是希望它在温度达不到(或者,直到它⾜够热--⼤致某个状态)的时候持续检查。所以,我们使⽤while:
契阔谈讌# Spam-cooking program
# Fetch the function sleep
from time import sleep
print "Plea start cooking the spam. (I'll be back in 3 minutes.)"
# Wait for 3 minutes (that is, 3*60 conds)...
sleep(180)
print "I'm baaack :)"
# How hot
is hot enough?历史文学
hot_enough = 50
temperature = input("How hot is the spam?")
while temperature < hot_enouth:
print "Not Cook it a "
sleep(30)
temperature = input("OK, How hot is it now?")
print "It's hot enough - You're done!"
这个例⼦中的新东西……
1. 有些有⽤的函数被存储在模块中⽽且可以被导⼊。此例中我们从python⾃带的time模块中导⼊了函数sleep(它休⽌给定的多少秒的时间)。(做你⾃⼰的模块当然也是可能的……)
练习2:
写⼀个程序,持续从⽤户获得数据然后相加,直到它们的和为100。再写⼀个程序,从⽤户那⾥获得100个数据,打印出它们的和。