编程中最常用到的概念之一就是变量(variable),变量其实就是我们在编写程序时存放东西的地方,由于存放的东西可以随时改变,所以叫“变”量。变量里存放的东西一般有三种:整数、小数和文字。往变量里存东西的过程叫做“给变量赋值”,写法如下:
a = 19
上面这条程序语句(编程中,一般把每一行叫做一条语句或一句话,当然也有一行里写多条语句或者一条语句写了几行的情况。注意,自动折行的行还算一行)的意思是,把19这个数字存进a这个变量中。注意,这里的等号“=”和数学上方程式中的等号意思完全不同,数学上的“=”意思是等号两边的数值是相等的,而编程中的“=”则代表把等号右边的数字存到等号左边的变量中,类似于数学证明过程中“令a等于19”这种说法,所以我们在编程中也经常说“让a等于19”。我们来看看下面的代码与数学意义的区别:
a = 19
a = a + 1
print(a)
我们可以执行这段代码看看结果。这两行代码执行的结果是:变量a中变成了20这个数。因为我们介绍过,变量里存放的东西是可以变的,一开始我们“让a等于19”,之后第二行程序又“让a等于a+1”,这时候其实是把a当时的值加上1之后再存放到a当中去,那么这时候a中的值实际上就变成了20。这个例子中,我们也可以看到,给变量赋的值可以是单纯的数字,也可以是一个表达式,如果是个表达式,程序执行时会自动把这个表达式计算后的结果赋值给等号左边的变量。
如果我们这样写:
b = 9.18
那么就表示把9.18这个小数存到名字叫做b的变量中。刚才介绍过,Python中的变量是有类型的,主要有整数、小数和文字三种。在这里,由于我们给b变量赋值时给了一个小数,Python会自动根据给变量赋的值来确定变量的类型。
图2.43 赋值语句执行结果截图
图2.43中,我们在Python的交互式命令行界面中,敲入了上面给a和b赋值的两行代码,之后我们用type(a)来查看变量a的类型,发现是整数类型,“int”即integer(整数)的简写。而用type(b)查看发现b是“float”类型,float就是计算机中对小数的叫法,由于计算机中一般对小数的小数点 “浮动”来获得更大的数值范围,因此一般叫做“浮点数”。然后我们又定义了一个变量c,让它等于a+b,查看c的类型也是浮点数,用print函数来输出c的值看到c中存储的是28.18这个浮点数,也就是a与b的和,与我们的期待相同。
我们再看下面一段代码:
图2.44 字符串变量赋值执行结果截图
这次我们给变量a赋值的是一段带双引号的文字,这就是Python语言中的文字变量,在编程中,我们一般把文字叫做字符串(string),形象的理解就是“一串字符”,所以我们可以看到用type函数来查看变量a、b、c的类型都是“str”,也就是字符串的简写。而字符串也可以用加号来“相加”,但是和数字相加不同,字符串的相加其实是把几个字符串连起来,所以我们用print来查看变量c的值时,得到的输出是“good”、“morning”和它们之间的一个空格连起来的“good morning”。注意给字符串类型的变量赋值时,都要在字符串前后加上双引号,否则计算机无法判断是变量的名字还是一个字符串。如果字符串中本身含有双引号,要在这个双引号之前加上一个反斜杠“\”来避免混淆。
接下来,说说给变量取名字的问题。变量的名字应该都是由英文字母开头的,并且为了避免混淆,建议整个变量名字只包含英文字母和数字以及下划线符号“_”。变量名字中不能含有空格,如果需要表达分隔,可以用下划线符号“_”来代替。下面几个变量名字是正确的:
x
myFirstName
plan_for_2017
注意其中第二行的写法也是一种常见的变量命名方式,在一个变量名字中带有几个单词时,不使用下划线来分隔,而使用大小写变化来表示单词分界。
下面几个变量名字是不正确的:
12 (变量名字不能用数字开头)
codeName张三 (变量名字不能含有中文)
a#6 (变量名字不能含有大多数英文字符和数字之外的特殊字符,我们建议最多只用下划线“_”)
this red apple (变量名字中不能有空格)
需要注意的是,变量名字的大小写是“敏感”的,就是说相同字母但大小写不同时,Python会认为它们是不同的变量,例如下面几个变量都将被认为是不同的变量:
theredapple
TheRedApple
theRedApple
THEREADAPPLE
前面说的三种类型的变量叫做变量的“基本类型”,那么,变量在这几种基本类型上面还可组合起来组成“复合类型”。复合类型的变量常用的有数组和字典两种。
* 数组:数组(array),顾名思义就是表示一组数字,
图2.45 定义数组
在图2.45所示的截图中,我们在第一条语句里定义了一个变量a来存放一个数组,我们表达数组的方式,就是把一组数字用中括号“[]”括起来,数字之间用英文逗号“,”分隔开。因此,执行完这句话后,变量a中就保存了一个包含1,2,3这三个数字的数组。
我们想要查看数组中某个具体数字时,要用“a[0]”这种方式,a后面紧跟的中括号内的数字叫做“下标”,代表取第几个数字,计算机中习惯数字从0开始,所以print(a[0])这条语句实际上输出了数组a中的第一个数字1,而print(a[2])这条语句输出了数组a中的最后一个数字,也就是第三个数字3。
如果想要改变数组中某个数字的值,我们直接给带下标的数组变量赋值就可以了,图中a[2] = 5这条语句,就把数组a的第三个数字重新赋值成为5了,我们在接下来的print(a[2])这条语句的输出结果上看,确实已经改变了a[2]的值。
* 字典:数组是通过下标来代表其中某一个数值的,也就是通过数字来索引的;而字典这种变量类型,和我们常用的外语字典一样,是通过文字来索引的,看一下下面这个例子,
图2.46 字典赋值执行结果截图
图中,info = {"name": "Adam", "height": 175, "weight": 60} 这条语句就定义了info这一个字典变量,其中存储了某人的姓名(name)、身高(height)和体重(weight)三个信息。定义字典变量的时候,要用大括号“{}”括起来,所有文字也就是字符串要用双引号括起来,所以其中的name、height、weight三个文字索引都用双引号括起来了;Adam也是一个字符串,所以也括起来,数字无需括起来,info由于是变量名称,也不需要括起来。索引的字符串和具体的值之间,要用冒号“:”分隔开,两个数值之间再用逗号“,”分开。
引用字典中的某一个值的时候,和数组类似也是用下标的形式,不过这回下标不是数字了,而是改成了字符串,例如图中的print(info[“height”])就输出了这个人的身高175。同样的,如果要修改字典中某个值,就用类似于info["height"] = 180 这样的方法给字典中某个下标赋值就行了。
最后,除了变量,编程中实际上还有“常量”的概念,常量可以理解成不变的量,有些计算机语言认为不需要常量,因为用变量就可以代表常量,只是不去改变它就行了。