
2 无门槛掌握数据类型与输入/输出函数
2.1 基本数据类型
任何一门语言都存在一些内置的基本数据类型,Python也不例外,只不过Python中的数据类型要比其他语言少一些。在初学阶段,掌握以下3种数据类型即可(Python中还有其他数据类型,因为我们的学习方式是滚雪球式的,所以在初学阶段不需要接触太多)。
◎ 数值数据类型,常见的是整数(如1)和浮点数(如1.23)。
◎ 布尔值数据类型,就是常说的真(True)和假(False)。
◎ 字符串数据类型。
在后续的学习过程中,我们提及的数据类型,特指的是变量的数据类型。接下来,我们先学习如何检查Python中变量的数据类型,这样才能对数据类型有更清晰的认识。
Python中检查数据类型的函数是type()。见名知意,这里必须强调一下,以后我们在编写代码中定义变量名时,要多参考官方命名技巧。
例如,定义一个值为10的变量x,并获取其数据类型。

输出结果为

该输出结果表示变量x的数据类型是整数,你可以用同样的办法测试一个小数。例如:

输出结果为

没错,这个是浮点数。
2.1.1 数值数据类型
前面你已经接触了Python中的两种数值数据类型,一个叫作整数,一个叫作浮点数,对应数学知识,它们的区别就是一个带小数点,一个不带小数点。随着学习编程的深入,你会逐渐发现数学与编程之间存在大量的共通性。
如果整数和浮点数相加,最终的结果是浮点数,Python会自动进行转换。例如:

运行下列代码,可以核对z的数据类型是否是float,即浮点数:

2.1.2 整数的不同形式表示
对于编程语言学习者来说,你一定听说过计算机处理的数据都是二进制的,正是因为二进制的存在,所以很多人会误认为编程语言学起来特别难。但下面这一句话很少有人提到:学习编程语言跟二进制确实存在关系,但跟我们学会一门赚钱的技术没太大关系。
或者说得再直接一些,如果你的目标是在北京拿10000元的月薪,各种进制转换的原理你可能都不会用到。
但作为初学者,还是有必要了解在Python中如何进行简单的进制转换。
将整数显示成二进制格式
我们稍后还会将整数显示成八进制与十六进制格式,这里处理的都是整数,也就是1、2、3、4这种不带小数点的数,先不考虑浮点数转换。
这里用到一个知识点,即Python内置函数,将整数转换成二进制格式显示用到的内置函数为bin()。例如,下列代码:

输出结果为

二进制整数以0b开头,后面都是1、0排列,如果你看到Python代码中出现了这样的整数,要清楚这就是一个普通的数字,只是Python将其以二进制格式进行了显示。
将整数显示成八进制格式
将整数转换成八进制格式用到的内置函数是oct(),具体代码可自行尝试,八进制格式显示的整数以0o开头。
将整数显示成十六进制格式
十六进制格式整数以0x开头,转换所用的内置函数为hex()。
至此,你已经对整数和其不同显示形式有了初步的认知,但这些都不是最重要的,真正的重点是在你学习了进制转换之后,如果看到Python代码中出现以上述符号开头的内容,你能够快速判断它是一个普通的整数,了解这一点就够了。
2.1.3 数据类型强制转换
前面所展示的只是Python数据类型转换的冰山一角,学习它们也是因为我们已经掌握了整数和浮点数的定义与使用,并且对它们的区别有了一些认识。其实整数和浮点数之间还可以进行相互转换,只不过转换要承担一些风险。例如:

上面的代码将浮点数进行了类型强制转换,注意在x前面套了一个int()函数的壳。函数相关的知识在后面才会学习,现在你能模仿编写代码,看懂代码逻辑就可以了。
在变量x外面套了一个int()函数,然后运行,输出的结果是10。风险出现了,浮点数转换成整数,小数点后的数字丢掉了……这里的数字是真正丢掉了,这种场景在后续编程中会经常碰到。
int()函数也是Python的一个内置函数,它会尝试将任何数据类型的变量转换成整数。在我们学习了更多的数据类型与函数参数之后,你会对任何数据类型的变量有更加清晰的理解。
同理,你如果能猜到将任何数据类型的变量转换成浮点数的函数名为float(),证明你已经开始慢慢摸到Python这门语言的精髓了。
好,到现在,又学习了两个内置函数,一个int()函数,一个float()函数。请打开计算机,练习代码的编写,之所以这样做是因为在编程学习过程中有一个有趣的现象,就是眼睛觉得看会了,但上手编写代码不一定会。
2.1.4 扩展几个数值数据类型常用的函数
虽然学习的内容不多,但你现在应该注意到了一个词:函数。“函数”二字在Python中出现的频率极高。
关于数值数据类型常用的函数,这里简单举几个例子,后面还会详细学习。
◎ abs():计算绝对值。
◎ pow():次方运算。
◎ round():四舍五入。
◎ max():取最大值。
◎ min():取最小值。
函数的代码如下所示,学习阶段临摹两遍下面的代码,读懂逻辑即可。下面的代码涉及了函数中参数的概念,在“9函数是Python基础部分的第一道难关”中会对此重点讲解。


2.1.5 布尔值数据类型
布尔来自英文boolean的音译,Python有两种布尔值,一个是真(True),另外一个就是假(False),使用type()函数测试布尔值数据类型得到的是bool。
注意,布尔值在有些地方也会归为整数,因为真(True)被强制转换之后等于1,假(False)被强制转换之后等于0。
你可以进行测试,例如下列代码:

布尔值以后会经常用在条件表达式上,属于必须掌握的知识点,在本书后面的章节还会碰到它。
2.1.6 字符串数据类型
字符串是Python中使用场景最多的数据类型,也是知识点最多的数据类型。一般情况下,使用两个双引号(")或者两个单引号(')进行包裹的就是字符串,在使用时一定要注意嵌套现象。例如下列代码(注意观察单引号和双引号):


由于字符串需要用引号包裹,所以会存在单引号和双引号互相嵌套的情况,在实战时一定要注意嵌套关系:如果外层使用的是双引号,内层就要使用单引号,如“"梦想'橡皮擦"”;反之,如果外层使用单引号,内层就要使用双引号。
字符串的连接
两个字符串通过+可以进行连接,这里的加号就不是数字之间加法的含义了。例如:

数字与字符串相加,会提示错误,如不想报错,可以通过str()函数将数字转换成字符串。例如:

多行字符串
在前面已经讲过三引号可用于注释,其实三引号真正的用途依旧是字符串场景,表示多行字符串。例如:

转义(逸出)字符
在字符串中有一些特殊的字符,需要特别处理,例如下面的场景,我们想在单引号中使用单引号,那么就需要用如下格式编写代码:

注意,使用\'之后就可以在单引号字符串中使用单引号了,\'就是转义字符。
常见的转义字符如表2-1所示。
表2-1

还有其他转义字符,初学阶段不做展开。以上几个转义字符在代码中尝试两遍,这部分的学习依旧是通过代码编写增强记忆。
有些时候,你需要避免转义字符进行转义,为此需要在整体字符串前增加一个特殊的字母r(字符串前面可增加的特殊字符有很多,本章只学习这一个)。例如下列代码:

此时\n不会转义成换行符,输出内容就是字符串原有的样子。

使用PyCharm工具,你能很清楚地认出转义字符,因为它们在颜色上有区分,如图2-1所示。

图2-1
字符串快速复制
Python有一个独特的小技巧,可以快速复制字符串,使用的是数学符号*。例如下列代码,将快速复制一堆#符号:
