如何像计算机科学家那样思考Python篇(第一、二章)
这篇博客主要是《如何像计算机科学家那样思考》此书的翻译,主要是对代码的记录,并不是对全书的全面翻译。
程序之路
第一个程序
这个程序只是简单地在屏幕上显示一段文字
Python2.7
1 | print "Hello, World!" |
输出结果:
1 | Hello, World! |
Python3.5
Python3.5改变了print的语法,如果直接使用2.7的语法会报错
1 | >>> print "Hello world" |
正确的写法
1 | print("Hello, World!") |
输出结果:
1 | Hello, World! |
变量,表达式和语句
值和数据类型
值是最基础的事物之一(比如一个字母或者数字),也是程序所操作和控制的基础事物。
我们看到过的值有2
和"Hello, World!"
,它们属于不同的数据类型2
是整数类型,"Hello, World!"
是字符串类型(因为它是由一串字符组成的)。你和编译器都知道这是字符串,因为他被两个双引号包围。
如果你不清楚一个值的类型是什么,那么可以使用下面的代码来得到值的类型
Python2.7
1 | type("Hello, World!") |
Python3.5
1 | type("Hello, World!") |
显而易见的,字符串属于类型str,整数属于类型int。不过带有小数点的数字属于类型float
Python2.7
1 | type(3.2) |
Python3.5
1 | type(3.2) |
Python中的字符串可以用单引号包括或者用双引号包括。如果最外面用双引号代表字符串,那么字符串里面可以包含单引号,比如"Bruce's beard
。同样的,如果最外面使用单引号代表字符串,里面可以包含双引号,比如'The knights who say "Ni!"'
。
此外还有使用三个单引号进行包含的字符串,例如:
1 | print('''"Oh no", she exclaimed, "Ben's bike is broken!"''') |
另外,平时针对大整数的使用逗号分割的写法在Python中是不识别的(虽然不会有语法错误),例如:
Python2.7
1 | print 1,000,000 |
Python3.5
1 | print(42,000) |
变量
编程语言其中一个重要的特性就是操作控制变量的能力。
赋值语句可以产生新的变量并且赋给他们值:
1 | "What's up, Doc?" message = |
上面这个例子给出了三个句子。第一个把字符串"What's up, Doc?"
赋值给一个叫做message
的新变量。第二个语句把整数17
赋值给n
,第三个语句把浮点数3.14159
赋给pi
。
这里注意,赋值运算符**=,并不是我们平时数学意义上的等号(哪怕他们是同样的符号)。赋值运算符把等号左边称为变量名字,右边是想要付给这个变量的值**,这就是为什么你输入以下代码会报错:
1 | 17 = n |
变量名和关键字(保留字)
通常来说,程序员会为他们的变量选择恰当的名字——他们会记录下这个变量的用途。
变量名可以很长。其中可以包含字母和数字,但是必须以字母开头。尽管使用大写字母是合法的,但是传统上我们不会这样做。变量名是大小写敏感的:Bruce
和bruce
是不同的变量。
下划线字符(_)是可以使用在变量名中的,它经常被用于变量名中用于切分多个单词的情况,比如说my_name
或者price_of_tea_in_china
。
如果你使用了不合法的变量名,Python会报错:
1 | "big parade" 76trombones = |
76trombones
是不合法的,因为他没有使用字母开头。more$
是不合法的,因为它里面包含了一个不合法的美元符号$
。但是class
这个变量名哪里错了呢?
这其实是因为class
是Python语言定义的关键字之一。关键字定义了编程语言的语法规则和结构,他们不能被当做变量名使用。
Python 关键字
Python2.7
Python3.5
语句
一个语句就是一条Python解释器能够执行的指令。我们现在看到了两种语句:print和赋值语句。
当你在命令行中输入一个语句,Python会执行并且把结果显示出来(如果有结果的话)。print语句的结果是一个值,赋值语句不会产生结果。
一个脚本通常包含一序列的语句,如果有多于一个的语句的话,结果会按照脚本中语句执行的顺序来显示,例如脚本:
1 | print 1 |
会产生输出:
1 | 1 |
表达式求值
一个表达式是值,变量,运算符的组合。如果你在命令行中输入一个表达式,解释器会计算并且把表达式的结果显示出来:
1 | 1 + 1 |
表达式的求值会产生一个值,这也是为什么表达式可以放在赋值语句的右边。单独的一个值本身也是一个简单的表达式,一个变量也是一个表达式
1 | 17 |
但是计算一个表达式和打印一个值并不是同样的事情,例如:
1 | "What's up, Doc?" message = |
操作数和操作符
操作符是特别的符号,用来代表计算类型,比如加号和乘号。被操作符使用到的值,称为操作数。
以下是一些合法的Python表达式:
1 | 20+32 hour-1 hour*60+minute minute/60 5**2 (5+9)*(15-7) |
符号+
,-
和*
,以及用来进行优先级分组的小括号,在Python中和数学中有着相同的用法。*
是乘法的符号,**
是幂次运算的符号:
1 | 2 ** 3 |
在Python3中,除法符号/
总是会按照浮点数的除法运算方法进行计算(在Python2.7中是整除的意思)。当我们想要使用整除的时候,可以使用//
,也被叫做向下取整除法。
1 | 7 / 4 |