让每一个中国人都能学会编程,我是艾氪森。

为什么推荐大家学点编程?

众所周知,IT 行业就业前景非常好,在这个行业,你真正需要靠能力和技术生存,一分努力一分收获。在我十几年的工作中, 我遇到很多非计算机专业甚至非理工科的同事,是编程改变了他们的事业和人生,包括我自己。

虽然不需要每个人都成为职业程序员,但各行各业将来都会用到编程,所以掌握基本的编程思想,有可能会帮助到将来找工作或工作中的晋升。

扩展阅读:用百度搜一搜,北上广深 IT 行业平均薪资是多少?

怎样开始学习编程?

不要被编程吓倒,认为学起来太困难,太枯燥,如今会编程已经是一件很平常的事情,有的中小学生已经开始学习编程,小学生都能学会,你也能。

虽然学习编程的资源有很多,但有的内容太多不易读完,而有的内容精简但缺失重要信息,我们写这篇教程的目的是想让每个成年人能够尽快的入门编程, 少走弯路,我们力求做到如下几点:

用时少:不需要读完一整本书,只需要读完一两篇文章,就可以掌握基本的编程元素,并解决实际中的问题,或者发现自己暂时不适合学习编程,没太多成本。

起点低:只要学习完中学的英语和数学,肯定能够读懂,当然也不是那种图形化的少儿编程,你需要真正的动手写一些代码。

重实效:本教程会指导你写程序完成一个实际的任务:给一个成绩表格,找出平均分最高的学生姓名,你可以尝试下不用编程如何实现,比如说用纸笔,或者 Excel。

不过时:因为我们注重讲解重要的编程思维,基本的编程元素,这些知识几十年后也不会过时,而且所有编程语言几乎都是通用的。

扩展阅读:用百度搜一搜,比尔盖茨是几岁开始学习编程的?

认识编程

编程就像像烹调,谱曲,写诗一样,是一项创造性的活动,使用基本的元素,通过一定的规则创造出丰富多彩的世界。编程语言有很多,但 Python 语言简单易学,通用性强,几乎可以做任何事情,初学者和专业程序员都在使用它。

第一次使用 Python,可以打开 Python 的官网 https://www.python.org/,点击 Launch Interactive Shell 按钮启动一个 Python 解释器, 在看到 >>> 提示符后,就可以输入一些 Python 代码了,我们先输入数字 1 回车,可以看到解释器也输出了 1

扩展阅读:用百度搜一搜,Python 能做什么事情?以及 Python 名字的由来。

类型

模拟现实世界的事物

计算机要解决现实中的问题,首先要模拟现实世界中的事物,如数字,文字,真假等,在 Python 里分别有对应数据类型来表示:

可以在解释器里输入一些数据进行测试,数字和 bool 类型直接输入即可,字符串的两边需要用单引号或双引号扩住,如下:

 

思考:如果双引号括起来的字符串内部也有双引号时应该怎么办?

常见问题

模拟对事物的操作

有了能够表示世界的数据类型后,还需要能够模拟对数据的操作,首先是对数字的加减乘除运算:

 

这里的语法和数学里是一样的,其中的 +-*/操作符运算符,这些是数学运算符,用来将两边的数字进行相应的操作。 特殊地方是 / 表示浮点除法,运算结果是 float 类型,// 是整数除法,运算结果是 int 类型, % 表示计算整数除法的余数。

常见问题:2 个字符组成的操作符,如 //,这两个字符是连在一起的,中间不能有空格,否则会出错。 扩展阅读:用百度搜索一下,Python 里如何求一个数的乘方?

比较运算

数字之间除了加减乘除,还可以进行大小比较:

 

这里的 ><<=>===!= 叫做 比较操作符,对两边的数字进行比较,分表表示大于、小于、大于等于、小于等于、等于和不等于, 比较的结果是 bool 值 True 或 False。

注意这里是两个等号 == ,表示数学概念里的相等,如果写成了一个等号 =,就会报错,如下:

 

小提示:为了提高可读性,一般会在操作符的两边各打一个空格,如 1 + 22 >= 3,后面我们的示例代码都会遵循这个规则。

逻辑运算

bool 值之间也可以逻辑运算,下面的的 andornot逻辑操作符

写代码进行练习:

 

 

字符串操作

字符串最常用的操作是拼接和重复,操作符分别是 +*,其中 * 右边是一个整数,表示要重复的次数。

 

函数操作

除了操作符能够操作数据外,Python 还自带一些函数,可以来操作数据,把它们理解成 Python 自带的一些命令就可以,输入命令名及一对圆括号,括号里传入要操作的数据,然后就可以得到处理后的数据。

 

 

上面的 printabsround 函数分别用来打印数据,求一个数的绝对值,以及对一个数进行四舍五入。

类型判断

我们认识了这么多种数据类型,如果给出一个数据,如何知道它的类型呢?可以用内建函数 type 来完成:

 

可以看到每行代码后会输出数据的类型,如 intfloatstrbool,其中两个整数进行 / 操作后是 float 类型,进行 // 操作后是 int 类型,进行 > 比较操作后是 bool 类型。

小提示 :暂时对 type 输出结果的格式不需要深究,class 表示类型的意思。

避免类型错误

在对数据进行操作时,一定要注意操作的数据类型是什么,比如我们对两个字符串进行减法操作,就会报错,因为这在概念上就说不通,现实中也没有意义:

 

思考 :字符串之间能否进行 / 操作,为什么?

类型转换

但有时候我们真的需要一个把一个数字格式的字符串,如 '3' 进行数学运算,该怎么办?这就需要我们对数据进行类型转换,如下几个常用的内建函数用来进行类型转换:

 

可以看到把字符串 '3''2' 分别转换成整型后,再进行减法操作,就不会报错了。需要注意的是,转换类型时,被转换的数据要和目标类型是兼容的,比如一个非整数格式,如字符串 'a' 要转换成整数,那就会报错:

 

思考:代码 str(3) * 2 会输出 '33' 还是 6 ,为什么?

表达式

由数据及其操作组成的式子叫做表达式,每个表达式都有一个值,前面知道每个值都有类型,所以每个表达式也有类型,前面我们敲过的代码其实都是表达式,也就是说在 Python 解释器里输入一个表达式回车后,下方会显示出表达式的求值结果,我们看一些复杂的表达式:

 

可以看到在 Python 里会遵循一些基本的数学规则,如乘法比加法的优先级高,而括号能改变默认的优先级,除了这些规则,操作符优先级从高到低依次是:

记忆起来也很直观,前三条是数学规律,比较运算优先级显然要低于数学运算,因为得数学运算完得到数字后才能比较大小,相应的,得比较完大小得到布尔值后才能进行逻辑运算。

小提示:在记不住优先级规律时可以通过加括号来改变优先级,以确保表达式的求值过程符合自己的期望。

 

其实每个表达式能分解成一颗求值树,从树的叶子开始计算,最后计算到树的根,就是表达式的值,下面是 1 + 2 * 3 == (1 + 2) * 3 的树形表示。

思考:根据上面的规则,想一下 1 + 1 > 2 or 2 * 3 > 5 的结果是什么?

变量

假设一个 4 个高 8 宽 5 的长方形,我们要求它们的总面积,可以直接写出代码

 

但过一段时间再来看这段代码,有可能已经看不懂这些 854 是什么意思了,但给这些数字起个名字就会好很多,变量 就是用来给数据起名字的,看如下代码:

 

前三行定义了 height, widthcount 三个变量,分别用 854 进行 赋值,相当于给它们起了名字,这里出现一个新的操作符 =赋值操作符,它的作用是把右边的数据赋值给左边的变量。

数据有了名字,在使用它们时,就可以使用名字来代替它们了,如第 4 行,现在就容易理解多了,括号里是 height * width 计算出 1 个长方形的面积,然后再乘以一个数量 count,表示多个长方形面积的总和。

变量之所有叫变量,是因为它可以变,假如我们计算的长方形高度变为 9 ,只需要给 height 赋值 9 ,再做一遍计算即可。

 

有没有发现,给变量赋值的代码,解释器并没有显示任何结果,因为这行代码不是表达式,而是一个 语句。表达式表示的是一个 ,而语句表示的是一个操作,这里具体指的是一个 赋值 的操作,而这样代码也叫赋值语句,后面我们还会学习更多类型的语句。

小提示:变量的名字只能由字母、数字和下划线组成,而且不能以数字开头。

思考:代码 "a" = 3 会不会报错,为什么?

函数

既然数据可以通过变量起名字,那么一段操作可不可以也可以起一个名字,然后通过名字来执行呢?答案是可以的,具体就要用到函数,前面我们已经使用过 Python 自带的一些函数,如 absprint 等,现在我们看下如何定义自己的函数:

 

这里信息量有些大,我们逐步来分析:

第 1 行进行函数定义, def 后跟一个函数名 area,紧跟着一对括号,括号里是两个逗号隔开的变量,这里叫做参数,末尾是一个冒号。

冒号下面的第 2 行代码叫函数体,表示函数具体的操作,可以看到这行代码没有顶格写,而是向右缩进了 4 个空格。这里还用到了一个 return 的功能,它用来把右面的表达式返回给函数的调用者。

函数体下面单独打了一个空行,表示函数定义完毕,然后会再出现 >>> 提示符。

第 4 行就是函数调用了,和使用内置函数一样 area(8, 5),就是函数名加括号,括号里传入要计算的数据,多个数据用逗号隔开。

函数是编程语言里非常重要的概念,一个函数相当于一台机器,有输入,有输出,有具体操作,函数定义一次可以多次调用,从而避免了很多重复的代码。

小提示

抽象和组合

要编写复杂的程序,需要编程语言提供两个重要的能力,一个是抽象,一个是组合。比如变量提供了对数据的抽象,函数提供了对操作的抽象,而表达式和语句可以把基本编程元素逐渐组合成比较复杂的程序。

看一个稍复杂的例子,打印出 4 个高 8 宽5 和 2 个高 4 宽 3 的长方形的面积总和:

 

小结

我们已经学习了不少东西了,可以休息复习一下:

附录

常见问题

思考题答案

接下来

如果你真的读到了这里,说明你很有编程的潜力,关注我们公众号期待下次的更新吧。

下篇文章需要写更多的代码,需要在本机进行 Python 的安装,可参考菜鸟教程的这篇文章: Python 环境搭建