第五章、Python入门教程系列——数字和字符串
从这章节开始我们将会通过代码来讲解知识,因为考虑到每章节的篇幅问题,可能会有很多代码上的东西都没法现在全讲解,但是和章节相关的肯定会讲解。很多初学者可能看不懂代码,不用担心,这些不懂的在后面都会讲解到。现在只要知道可以这么用,这么用能做什么,模仿就行。
数字(Number)
数字是我们使用最频繁的一种数据类型,无论在什么时候都会用上,在Python中,数字数据类型可以分为4类,分别是整数型、浮点型、布尔型、复数型,前三种是用的最多的,而复数用的并不多,除非你是用来做科学计算用。
其中布尔型是一种特殊的数字类型,它是用数字来记录,但它的含义却是其他,这个后边会讲解。
不管是整型,浮点型,布尔型还是复数型,它们在python里都属于数字类型。
整数型(int)
整数是最容易的,就是不含小数的数字,比如1,95,-32,这就是整数,无论是正整数还是负整数,只要是个整数就可以。整数在python里用int
表示,无论正负。
1 | print(type(1),type(-56)) |
运行结果
1 | <class 'int'> <class 'int'> |
首先先说明下代码,print()
可以理解为在显示屏上打印,而括号里的就是将要打印出来的东西,代码里写了type(1)
、type(-56)
,type()
可以用来查看括号里的数据是什么类型。他们不是关键字,而是内置函数,这都会在后面的章节详细的讲解
运行结果显示的是两个<class 'int'>
,这表示的是个整数型的类,什么是类现在还不用知道,只要知道结果是个整型的。
这里扩展个知识,在编译型语言里,整型(int)是会规定大小的,比如C语言。int规定大小,到底多大那就得看你的系统和编译器了,一旦超出范围将会出现溢出的现象。但是Python作为动态类型语言,没有限制大小,但是由于机器内存的问题,也不是无限大,只是说不用担心超出范围溢出的问题。
浮点型(float)
可以简单的理解就是小数,比如1.24,-3.14,反正就是带有小数点的数,比如1.0,这也是个浮点型的数字,即使小数部分是个0。浮点型在python用float
表示
1 | print(type(1.24),type(-3.14),type(1.0)) |
运行结果
1 | <class 'float'> <class 'float'> <class 'float'> |
从结果就可以看出<class 'float'>
,浮点型的类,也就是说代码里的数字都是浮点类型,1.0也是个浮点类型。
当一个浮点型数据的位数非常多的时候,显然一个一个位数输入很容易出错,而且也不方便阅读,所以通常都会用科学计数法。比如1.6856e2表示的是168.56,再比如1.2597e-1表示的是0.12597
1 | print(1.6856e2,type(1.6856e2)) |
运行结果
1 | 168.56 <class 'float'> |
科学记数法是一种记数的方法。把一个数表示成a与10的n次幂相乘的形式(1≤|a|<10,a不为分数形式,n为整数),这种记数法叫做科学记数法。当我们要标记或运算某个较大或较小且位数较多时,用科学记数法免去浪费很多空间和时间。
布尔型(bool)
布尔型是个比较特殊的类型,本应该放在单独的章节说的,但是布尔确实是可以用数字表示,0表示假,除了0以外的数字表示真,默认是1,数字表示只是它的一种变相表示,正真的表示应该是True
和False
这两个单词,True
表示真,False
表示假,注意第一个字母要大写,常常用来做比较判断,比如1大于5,这明显是不可能的,那就是假,用数字表示就是0,再比如100大于10,这是真的,用数字表示就是1,关于布尔型的其他知识会在后面专门单独讲解。布尔型在python用bool
表示
1 | print(type(True),type(False)) |
运行结果
1 | <class 'bool'> <class 'bool'> |
结果显示的都是<class 'bool'>
,布尔型的类。
前面说到布尔型可以用数字表示,我们可以用int()
来把布尔型转换成数字,用bool()
把数字转换成布尔型。
1 | print(int(True),int(False)) |
运行结果
1 | 1 0 |
运行的结果显示,True
的数字是1,False
的结果是0,反过来除了0是False
,其他的数字都是True
。
复数型(complex)
这个类型用的真的不多,除非是做相关的数学计算,但是也很少会有复数的数学计算,所以用的少之又少,只要了解即可。在高中应该都有学过复数,复数包括两个部分,一个是实部,一个是虚部,实部就是平时的数字表示,虚部就是加个字母j。复数在python用complex
表示。
1 | print(type(1j)) |
运行结果
1 | <class 'complex'> |
结果是<class 'complex'>
,复数型的类。
字符串(String)
字符串从字面上来理解就是串在一起的字符,那什么是字符,字符其实就是一个字,比如A,再比如汉字我,都是一个字,当多个字拼接在一起的时候就组成了字符串。比如ABCD,多个字符拼接在一起,看上去就像串一样,所以就叫做字符串。字符串就是多个字符拼接在一起。
在基本数据类型的章节里提到,字符串是基本数据类型,那为什么字符不是基本类型呢,因为在python没有字符,因为设计人员觉得,一个字叫字符,很多个字符拼在一起叫字符串,干脆都叫字符串好了,这样就不会混淆字符和字符串了,所以在python统称为字符串。
字符串的多种表示
在python里,字符串要用一对引号引起来,表示是个字符串,我们知道引号可以分为单引号,双引号,那到底用哪个?答案就是都可以,不仅仅这两种,python还可以用三单引号和三双引号来表示字符串,但是它们都有各自的特点。
无论是哪种引号,都必须是英文的引号'
或者"
。
单引号
单引号就是一对只有一个引号的符号,就是长这样'...'
,用单引号来表示字符串,在单引号里可以是单引号除外的任何字符,为什么除单引号呢,在后面会详细讲解。
1 | print('今天天气真好啊') |
运行结果
1 | 今天天气真好啊 |
打印出来的第二句是<class 'str'>
,是个字符串类型的类。
双引号
双引号和单引号差不多,就是用"..."
来表示,除了双引号,其它任何字符都可以。
1 | print("适合睡觉") |
运行结果
1 | 适合睡觉 |
结果和单引号的没啥区别。
三引号
最后来说说三引号,它既可以是单引号,也可以是双引号,无论是哪个,它的作用和效果都一样,它长这样'''...'''
或者"""..."""
这样,虽然三引号有很多引号组成,但效果和前面的一样。这里就不再限制单引号和双引号的字符了。
1 | print('''睡什么,起来嗨''') |
运行结果
1 | 睡什么,起来嗨 |
三种表示的区别和用途
前面的单引号和双引号的描述里,都说了除了本身引号以外,其他字符都可以,他们除了这一点不同,其他都没什么不同。但是,它们是有区别,除了引号数量不一样,还有本质上的不同,在这就要重点讲解这个,因为之后可能用的很多,也很有用。
我们先从单引号说起,前面说单引号除了单引号以外的其他字符都可以,理由还得从字符串的表示方式说起,字符串是靠引号来表示的,引号是有始有终的,也就是成对出现,我们用英文I’m fine!来演示。
1 | print('I'm fine!') |
运行结果
1 | ... |
结果输出很长一段,显然不是我们要的结果,从最后一句可以看出这是一个错误,我们省略掉前面,只看最后两句。倒数第二句print(‘I’m fine!’),表示出错的代码,^表示出错代码的哪一地方出错了,这里指的是m,最后一句SyntaxError: invalid syntax,翻译过来就是语法错误:无效语法。所以结合起来就是,print(‘I’m fine!’)这句代码的m是个无效的语法,为什么会这样呢,答案就是缺失了引号。
将’I’m fine!‘拆分开来,第一对引号是’I’,剩下的只有一个引号了,没法成对,所以m fine!'不是字符串,也不是其他Python没能识别的代码。所以就会出错。要解决这个问题我们可以使用双引号。
1 | print("I'm fine!") |
运行结果
1 | I'm fine! |
可以看到运行没什么问题,那问题又来了,如果是双引号里有双引号呢,原理和单引号一样,那么我们可以用单引号来解决这个问题。
从这我们看出了问题,当我们在字符串里想用单引号的时候,就没法再用单引号来表示字符串,要用双引号或者三引号,加入字符串里有双引号呢?可以反推,前面是一对,后面是什么?所以当字符串里有双引号的时候就不能用双引号来表示。
1 | print('你看"在单引号中间') |
运行结果
1 | 你看"在单引号中间 |
运行也同样没有什么问题,可能有人就会问了,那我既要有单引号又要有双引号怎么办,这时候三引号的用处就体现出来了,三引号是成对的三个引号,既可以满足有单引号,也可以满足有双引号。
1 | print('''我要换行 |
运行结果
1 | 我要换行 |
这里为什么括号也可以换行是因为这是函数,括号在哪不重要,重要是的它是一对的。
了解了三种引号的区别之后,我们来说说都会在什么情况下用哪种引号,一般情况下,三引号是不会作为实际代码使用的,三引号主要用来做文档注释(注释的一种,按照规定的规则注释,可以通过特殊方法生成一份文档)。单引号和双引号则会看具体字符串使用,一般没有特殊情况下会使用双引号,这主要是大部分编程语言都是用双引号来表示字符串的,这里为了统一所以一般会用双引号来表示。
转义字符
前面已经了解了三种引号的区别和应用场景,但是为了统一代码,我们都应使用双引号,但是双引号又不能表示双引号字符,为了解决这种尴尬的问题,可以使用转义字符。
转义字符 | 意义 |
---|---|
\a | 响铃(BEL) |
\b | 退格(BS) ,将当前位置移到前一列 |
\f | 换页(FF),将当前位置移到下页开头 |
\n | 换行(LF) ,将当前位置移到下一行开头 |
\r | 回车(CR) ,将当前位置移到本行开头 |
\t | 水平制表(HT) (跳到下一个TAB位置) |
\v | 垂直制表(VT) |
\\ | 代表一个反斜线字符\ |
\’ | 代表一个单引号字符 |
\" | 代表一个双引号字符 |
? | 代表一个问号 |
\0 | 空字符(NUL) |
\ddd | 1到3位八进制数所代表的任意字符 |
\xhh | 十六进制所代表的任意字符 |
表格里是所有转义字符,转义字符以\
开头,其中最常用的转义字符有\n
、\t
、\\
、\'
、\"
。这几个是最常用的,也是必须记住的。
\n
是换行,就是换一行从头开始。\t
是水平制表符,就是键盘Tab这个键。\'
和\"
是引号,分别是单引号和双引号,\\
是反斜杠,就是用来表示\。
1 | print("我要换行\n上面的换行了") |
运行结果
1 | 我要换行 |
运行完全没有问题,可以看到,通过转义字符可以很容易解决单双引号的问题。