你曾经想知道计算机是如何工作的吗?尽管我们不能在一篇文章里面教会你所有的东西,但是可以通过学习如何写出你自己的程序来获得一个良好的开端。在这篇python教程中,你将会学到计算机编程的基础知识,使用对新手来说最棒的编程语言之一。
什么是编程?
尽可能简单的讲,编程是编写代码,命令计算机去完成某项任务的艺术。这里讲的某项任务,可以是简单的两数相加,或是像把飞船送入轨道这样的复杂任务!
一个程序里面,最小的组成部分被称作语句(statement)——代表了对计算机做出的一条指令。
当你完成了自己的程序后,编译器会把你写的代码转换为机器码——计算机语言的最底层。机器码指示中央处理器工作(central processing unit),或者叫做cpu,这里面包含一些诸如加载某个值或是做数学运算的步骤。
如果你曾经听过某人说:“我编译了我的程序”,那代表他们已经把代码转换成了机器码。
为什么不直接写机器码呢?原因很显然,程序码具有可读性。下面比较了python版的程序和其对应的机器码:
python代码
print hello, world!...hello, world!
对应的机器码
c7 3c 2a 3c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c28 5c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28 5c2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28 5c 2a 2b2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c3c 28 5c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c 285c 2a 2b 2a 5c 3c 28 5c 2a 2b 2a 5c 3c 28 5c 2a2b 2a 00 00 01 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 64 48 65 6c 6c 6f 2c 20 576f 72 6c 64 21 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00...hello, world!
很明显为什么你不会想要直接编写机器码了。但是,确实有一些人会去写机器码——萝卜白菜各有所爱嘛!
上面我们忽略了一个小问题。python是一种解释型语言;你并不会像上面我们暗示的那样,把它直接编译成为机器码。
实际上是这样的,python使用一个叫做解释器的东西。解释器是另外一个程序,把代码编译成叫做二进制码的东西,然后再程序运行的时候再转换成机器码。你等下会学到更多和解释器有关的内容。
当你最终运行程序的时候,你刚编译的那些机器码会被加载到内存中,cpu会读取它并执行程序。
然而,在刚开始学习使用python编程的时候,你并不需要完全理解编译器的内部工作原理,但是你必须确保你已经安装了python。
准备开始
如果你在使用mac,你走运了——python已经预装在mac中了。在mac中使用python解释器,打开**终端**(**terminal.app**);你可以再应用程序/工具文件夹下找到它,或者在spotlight中输入,像这样:
打开终端后,输入下面的指令然后按下回车:
$ python
你会看到类似下面这样的结果:
注意:如果你没有得到上面的结果,把输出结果复制到论坛,我们会尽力帮助你的!**
windows
在windows上,这一过程稍微有点复杂——但是还是要说,大部分的东西还是在windows!上:]
首先,在浏览器中访问python官网的下载页面。
滚动页面跳过所有的python 3.x.x版本,直接到python 2.7.x。下载windows安装包(windows installer),运行,按照指引来做,接受默认的选项。
一旦安装包安装完成,你就可以启动它了。
在windows vista或者windows 7上,这样启动:
1. 点击左下角的开始菜单。
2. 点击所有程序
3. 打开python文件夹
4. 双击idle解释器
如果你使用windows 8,这样启动:
1. 点击左下角开始菜单
2. 在搜索框中输入idle
3. 点击idle(python gui)
不管你是如何启动解释器的,你应该确保它能够工作,在终端中输入如下命令,或者是在windows的命令提示符中输入如下指令并按回车:
print “hello world!”
尽管看上去并不像,但是你已经写完你第一个python程序了!在学习大多数语言的时候,打印出hello, world被认为是一个起点。
`python` 命令指示计算机在屏幕上输出后面的字符——而不是在你的打印机上打印!注意“hello world”两边的引号,引号中的任何东西都被看做常规的文本儿不会被解释为一个指令。
变量
变量,是在计算机内存中存放数据的一种方式;在你的程序中你会经常用到它们。在一些语言中,变量有特定的类型,指明了这些变量属于那些类。
在python中,你不需要声明变量的类型。现在暂时不需要在意这些细节;在本教程稍后的章节中你会学到关于这个内容的知识。
在解释器中输入如下命令并按回车:
hello = hello world!
这么做声明了hello变量并且把hello world赋值类了它。现在,你不需要在程序中需要“hello world”的地方输入这个字符串了,取而代之的是,你可以使用hello这个变量。
在解释器中输入如下命令并按回车:
print hello
这个指令会产生和hello world例子相同的结果,但是它是打印出了hello这个变量的值。
变量同样也可以用来储存数字。在解释器中输入如下命令:
x = 5print xy = 10z = x + yprint z
注意:从现在起,你可能要输入多行语句,只需要在每行末尾输入回车即可**
先猜猜看上面的代码会做些上面,再看下面的答案:
这段代码会打印5,然后打印15.第一个`print`语句打印了被你赋值为5的变量x。然后它打印了y+x的结果。因为y被赋值为10,x是5,所以打印了15。
对于你生命中的绝大部分程序变量是其核心。在你学习本教程的过程中,你会对变量变得非常熟悉。
变量类型
在之前的教程中你已经遇到了变量,但是我们并没有仔细的介绍它。不同的变量类型存储不同类型的值。
注意:对于全部的内建类型,请查看python官方文档
到目前为止,你仅仅和python中两个基本类型打过交道:整型(`integers`)和字符串型(`strings`),你还会遇到布尔类型(`boolean`),你可以用它来储存`true`或者`false`。
下面有关于这些变量类型的一点介绍:
整型
一个整型数,是一个整数。整型数的范围,在32位机上是-2147483648 到 2147483647 ,在64位机上是 -9223372036854775808 to 9223372036854775807。
你可以像这样简单的输入一个数字来创建整型,不需要任何引号:
foo = 5
字符串型
字符串是一串字符;你可以使用字符串来表示很多东西,从屏幕上的任何文本到整个网页请求。
通过用引号包含一串字符来创建字符串,就像下面一样:
布尔类型
布尔类型代表了true或false。
你通过使用大写开头的true或false 来创建布尔类型,不需要引号,就像下面这样:
`isfoo = true`
变量两边没有引号;如果你用引号包含了true,你则是创建了一个字符串类型!
字符串连接和整数相加
python让两个字符串钩在一起变得很容易,我们也称之为字符串连接。你可以使用`str()`把一个整数类型转换成字符串,相反,你也可以使用`int()`把一个字符串转换为整型。
在你的解释器中输入下面指令:
1 + 11 + 11 + int(1)
下面解释上面代码做了些什么:
- 第一条语句连接了两个字符串;引号确保了这两个数字被当做字符串除了。结果就是”11″。
- 第二条语句把两个数作为整数相加,结果是2.
- 最后一条语句把一个整数和另一个被转换为整数的字符串相加,结果还是2。
if 语句
if语句检查某个条件是不是真,如果是,则执行一段代码。条件语句通常是这样的形式`值 – 操作符 – 值`,通常是比较两个值。
比如,你可以使用`x == 0`评价一个值是不是等于0,`==` 是等于操作符。
下面是python中的一些常见比较
a == b: #checks if a and b are equala != b: #checks if a and b are not equala > b: #checks if a is greater than ba = b: #checks if a is greater than or equal to ba <= b: #checks if a is less than or equal to b
if语句是如下的形式:
if conditional: do_statements_here
注意到`在这里执行某些语句` 这行是如何缩进的。这是你在python声明代码块的方式。同一个代码块中的每一行都必须和其他所有行缩进相同的制表符或是空格;这是语言强制规定的。换句话说,不要混合使用制表符和空格。创建一个if语句,在解释器中输入如下命令:
迎接你的是神秘的提示符`…`;这表示解释器在等待你输入代码块的内容,按下tab键,输入第二行:
再次按下回车,你的光标回到了控制台的最左边。要想再输入一个代码块语句,只需要再按tab。如果你输入完了,按下回车告诉解释器你的代码块已经完成。
看一下下面的例子:
x = 10y = 10if x == 10: print x equals 10!if x == y: print x equals y!
第一条语句判断x是不是等于10,如果是的话,打印`x equals 10!`。另外一个if语句判断x是否等于y,如果是的话,打印`”x equals y!”`.
for循环
for循环再python中遍历列表中的项目并且把当前项目赋值给变量。一个列表几乎可以是任何东西的集合!
输入下面的代码,并且像下面这样缩进:
for x in range(10): print x
在这个例子中,`range(10) ` 生成了数字0到9的一个列表。for循环一次把范围内的数字赋值给x。就像if语句一样,for循环执行它下面缩进中的每个语句。在上面的例子中,缩进的代码块里面只包含了一个单独的语句。
因为print被调用了10次,对于列表中的每个项目调用一次,这个程序会打印0到9的数字。
函数
函数是可以重用的代码块,用来完成某个特定的代码块。比如说,你可以写一个函数用来把两个数相加,或是打印一个字符串。你可以像下面例子展示的一样定义并调用函数。
def hello(): print hifor x in range(3): hello()
在运行前,你可以猜猜看这个程序的输出是什么吗?答案见下文:
它会打印出“hi”三次,因为for循环会调用这个hello函数三次。
缩进的代码块定义了你调用函数时要执行的语句。因为`print “hi”` 是这个函数里唯一缩进的语句,所以当调用函数时也是唯一被执行的语句,而不是下面的几行。
你可以通过输入结尾带有一对括号的函数名来调用函数,像之前展示的那样,`hello()` 调用了你上面调用的函数。函数有点类似有围墙的花园:它们不能看到它们那一亩三分地意外的世界。这个被称作`变量作用域`。如果你想要让一个函数和外界的数据协同工作,你需要把这些数据传递给函数。
使用`参数`(arguments)可以达到这一目的——不不不,函数之间是不会相互争吵(argue)的!
参数是一个你传递给函数的一个变量;然后函数就可以在内部使用这个参数的值了。
你可以像下面这样声明一个带参函数:
def add(a, b): print a + b
上面的函数定义了两个参数,a和b,放在括号里面,用逗号相互隔开。当你调用这个函数的时候,解释器会吧a和b的值设置为你传入变量的值。
看一下下面这个例子:
def add(a, b): print a + badd(1,2) # prints 3!
在上面的例子中,`add(1,2)` 这条语句把a和b分别设置为1和2。然后函数打印了你传入的两个数的和。上面的例子打印了计算结果——但是如果你想要用这个计算结果做些事情呢?如果你想要把这个函数的结果加上别的一个值呢?
为了做到这一点,你需要给你的函数加一个`return 语句`。
考虑如下代码:
def add(a,b): return a + bprint add(2, 2) + 1
在上面的例子中,你的函数像之前一样把两数相加,但是`return`(返回)语句把两数和传回了函数调用语句。
这意味着上面的`print` 语句得到了add(2,2)返回的值然后把它加1,最后会给你的结果是5。
while 循环
while循环和for循环类似。for循环一直进行,直到到达列表的末尾,但是while循环会不定的循环,直到给定条件的值等于false。一个while循环的典型结构是下面这样:
while (conditional): run_statement
通常,条件变量会在循环运行过程中更新。在解释器中输入下面的程序,来看看这一过程:
x = 0while x < 10: print x x += 1
这个程序的行为类似于上面的for循环,但是使用了while循环。这是上面程序所做的事情:
1. 给x赋值0
2. 检查是否满足 `x guess_int: print too low!if number guess_int: print too low!? if number < guess_int: print too high! if number == guess_int: print you got it! running = false
恭喜你——你已经写出了你的第一个python程序。别不是那么难,对吧?
从这里,到何方?
现在你已经完成了python新手教程,我打赌你一定渴望一次挑战。尝试在你的程序中添加如下功能:
猜测次数统计 更大的随机数产生范围 一个电脑操控的游戏对手如果你想要做一个稍微复杂一点的游戏,请看我的另一个教程:《beginning game programming for teens with python》