我心中的王者:Python-第3章 Python的基本数据类型
Python的基本数据类型有下列几种:
- 数值数据类型:常见的数值数据又可分成整数(int)和浮点数(float)。
- 布尔值(Boolean)数据类型。
- 字符串(string)数据类型。
3-1 type( )函数
在正式介绍数据类型前,笔者想介绍一个函数type( ),这个函数可以列出变量的数据类型类别。
程序实例ch3_1.py:列出数值变量的数据类型。
# ch3_1.py
x = 10
y = x / 3
print(x)
print(type(x))
print(y)
print(type(y))
执行结果
10
<class 'int'>
3.3333333333333335
<class 'float'>
从上述执行结果可以看到,变量x的内容是10,数据类型是整数(int)。变量y的内容是3.3…5,数据类型是浮点数(float)。下一节会说明,为何是这样。
3-2 数值数据类型
Python在定义变量时可以不用设定这个变量的数据类型,未来如果这个变量内容是整数,这个变量就是整数(int)数据类型,如果这个变量内容是浮点数,这个变量就是浮点数(float)数据类型。整数与浮点数最大的区别是,整数不含小数点,浮点数含小数点。
程序实例ch3_2.py:测试浮点数。
# ch3_2.py
x = 10.0
print(x)
print(type(x))
执行结果
10.0
<class 'float'>
在程序实例ch3_1.py中,x变数的值是“10”,表示x变量是整数变量,在这个实例中,x变量的值是“10.0”,表示x变量是浮点数变量。
3-2-1 整数与浮点数的运算
Python程序设计时不同数据类型也可以执行运算,程序设计时常会发生整数与浮点数之间的数据运算,Python具有简单自动转换能力,在计算时会将整数转换为浮点数再执行运算。
程序实例ch3_3.py:不同数据类型的运算。
# ch3_3.py
x = 10
y = x + 5.5
print(x)
print(type(x))
print(y)
print(type(y))
执行结果
10
<class 'int'>
15.5
<class 'float'>
上述变量y,由于是整数与浮点数的加法,所以结果是浮点数。此外,如果某一个变量是整数,但是最后所存储的值是浮点数,Python也会将此变量转成浮点数。
程序实例ch3_4.py:整数转换成浮点数的应用。
# ch3_4.py
x = 10
print(x)
print(type(x)) # 加法前列出x数据型态
x = x + 5.5
print(x)
print(type(x)) # 加法后列出x数据型态
执行结果
10
<class 'int'>
15.5
<class 'float'>
原先变量x所存储的值是整数,所以列出是整数。后来存储了浮点数,所以列出是浮点数。
3-2-2 2进位整数与函数bin( )
我们可以用2进位方式代表整数,Python中定义凡是0b开头的数字,代表这是2进位的整数。
bin( )函数可以将一般数字转换为2进位。
程序实例ch3_5.py:将10进位数值与2进位数值互转的应用。
# ch3_5.py
x = 0b1101 # 这是2进为整数
print(x) # 列出10进位的结果
y = 13 # 这是10进为整数
print(bin(y)) # 列出转换成2进位的结果
执行结果
13
0b1101
3-2-3 8进位整数
我们可以用8进位方式代表整数,Python中定义凡是0o开头的数字,代表这是8进位的整数。
oct( )函数可以将一般数字转换为8进位。
程序实例ch3_6.py:将10进位数值与8进位数值互转的应用。
# ch3_6.py
x = 0o57 # 这是8进为整数
print(x) # 列出10进位的结果
y = 47 # 这是10进为整数
print(oct(y)) # 列出转换成8进位的结果
执行结果
47
0o57
3-2-4 16进位整数
我们可以用16进位方式代表整数,Python中定义凡是0x开头的数字,代表这是16进位的整数。
hex( )函数可以将一般数字转换为16进位。
程序实例ch3_7.py:将10进位数值与16进位数值互转的应用。
# ch3_7.py
x = 0x5D # 这是16进为整数
print(x) # 列出10进位的结果
y = 93 # 这是10进为整数
print(hex(y)) # 列出转换成16进位的结果
执行结果
93
0x5d
3-2-5 强制数据类型的转换
有时候我们设计程序时,可以自行强制使用下列函数,转换变量的数据类型。
int( ):将数据类型强制转换为整数。
float( ):将数据类型强制转换为浮点数。
程序实例ch3_8.py:将浮点数强制转换为整数的运算。
# ch3_8.py
x = 10.5
print(x)
print(type(x)) # 加法前列出x数据型态
y = int(x) + 5
print(y)
print(type(y)) # 加法后列出y数据型态
执行结果
10.5
<class 'float'>
15
<class 'int'>
程序实例ch3_9.py:将整数强制转换为浮点数的运算。
# ch3_9.py
x = 10
print(x)
print(type(x)) # 加法前列出x数据型态
y = float(x) + 10
print(y)
print(type(y)) # 加法后列出y数据型态
执行结果
10
<class 'int'>
20.0
<class 'float'>
3-2-6 数值运算常用的函数
下列是数值运算时常用的函数。
abs( ):计算绝对值。
pow(x,y):返回x的y次方。
round( ):返回五舍六入,留意不是四舍五入。
程序实例ch3_10.py:abs( )、pow( )、round( )函数的应用。
# ch3_10.py
x = -10
print("以下输出abs( )函数的应用")
print(x) # 输出x变数
print(abs(x)) # 输出abs(x)
x = 5
y = 3
print("以下输出pow( )函数的应用")
print(pow(x, y)) # 输出pow(x,y)
x = 48.4
print("以下输出round( )函数的应用")
print(x) # 输出x变数
print(round(x)) # 输出round(x)
x = 48.5
print(x) # 输出x变数
print(round(x)) # 输出round(x)
x = 48.6
print(x) # 输出x变数
print(round(x)) # 输出round(x)
执行结果
以下输出abs( )函数的应用
-10
10
以下输出pow( )函数的应用
125
以下输出round( )函数的应用
48.4
48
48.5
48
48.6
49
3-3 布尔值数据类型
Python的布尔值(Boolean)数据类型的值有两种,True(真)或False(伪),它的数据类型代号是bool。这个布尔值一般是应用在程序流程的控制,特别是在条件表达式中,程序可以根据这个布尔值判断应该如何执行工作。
程序实例ch3_11.py:列出布尔值与布尔值的数据类型。
# ch3_11.py
x = True
print(x)
print(type(x)) # 列出x数据型态
y = False
print(y)
print(type(y)) # 列出y数据型态
执行结果
True
<class 'bool'>
False
<class 'bool'>
如果将布尔值数据类型强制转换成整数,当原值是True,将得到1;当原值是False,将得到0。
程序实例ch3_12.py:将布尔值强制转换为整数,同时列出转换的结果。
# ch3_12.py
x = True
print(int(x))
print(type(x)) # 列出x数据型态
y = False
print(int(y))
print(type(y)) # 列出y数据型态
执行结果
1
<class 'bool'>
0
<class 'bool'>
3-4 字符串数据类型
所谓的字符串(string)数据是指两个单引号(')之间或是两个双引号(")之间任意个数字元符号的数据,它的数据类型代号是str。在英文字符串的使用中常会发生某字中间有单引号,其实这是文字的一部分,如下所示:
This is James's ball
如果我们用单引号去处理上述字符串将产生错误,如下所示:
碰到这种情况,我们可以用双引号解决,如下所示:
程序实例ch3_13.py:使用单引号与双引号设定与输出字符串数据的应用。
# ch3_13.py
x = "DeepStone means Deep Learning" # 双引号设定字符串
print(x)
print(type(x)) # 列出x字符串数据型态
y = '深石数字 - 深度学习滴水穿石' # 单引号设定字符串
print(y)
print(type(y)) # 列出y字符串数据型态
执行结果
DeepStone means Deep Learning
<class 'str'>
深石数字 - 深度学习滴水穿石
<class 'str'>
3-4-1 字符串的连接
数学的运算符“+”,可以执行两个字符串相加,产生新的字符串。
程序实例ch3_14.py:字符串连接的应用。
# ch3_14.py
num1 = 222
num2 = 333
num3 = num1 + num2
print("以下是数值相加")
print(num3)
numstr1 = "222"
numstr2 = "333"
numstr3 = numstr1 + numstr2
print("以下是由数值组成的字符串相加")
print(numstr3)
numstr4 = numstr1 + " " + numstr2
print("以下是由数值组成的字符串相加,同时中间加上一空格")
print(numstr4)
str1 = "DeepStone "
str2 = "Deep Learning"
str3 = str1 + str2
print("以下是一般字符串相加")
print(str3)
执行结果
以下是数值相加
555
以下是由数值组成的字符串相加
222333
以下是由数值组成的字符串相加,同时中间加上一空格
222 333
以下是一般字符串相加
DeepStone Deep Learning
3-4-2 处理多于一行的字符串
程序设计时如果字符串长度多于一行,可以使用三个单引号(或是三个双引号)将字符串包夹。
程序实例ch3_15.py:使用三个单引号处理多于一行的字符串。
# ch3_15.py
str1 = '''Silicon Stone Education is an unbiased organization
concentrated on bridging the gap ... '''
print(str1)
执行结果
Silicon Stone Education is an unbiased organization
concentrated on bridging the gap ...
读者可以留意第2行Silicon左边的3个单引号和第3行末端的3个单引号。
3-4-3 逸出字符
在字符串使用中,如果字符串内有一些特殊字符,如单引号、双引号等,必须在此特殊字符前加上“\”(反斜杠),才可正常使用,这种含有“\”符号的字符称逸出字符(Escape Character)。下表Hex值是指ASCII值。
字符串使用中特别是碰到字符串含有单引号时,如果是使用单引号定义这个字符串时,必须要使用此逸出字符,才可以顺利显示,可参考ch3_16.py的第3行。如果是使用双引号定义字符串则可以不必使用逸出字符,可参考ch3_16.py的第6行。
程序实例ch3_16.py:逸出字符的应用,这个程序第9增加“\t”字符,所以“can’t”跳到下一个Tab键位置输出。同时有“\n”字符,所以“loving”跳到下一行输出。
# ch3_16.py
#以下输出使用单引号设定的字符串,需使用\'
str1 = 'I can\'t stop loving you.'
print(str1)
#以下输出使用双引号设定的字符串,不需使用\'
str2 = "I can't stop loving you."
print(str2)
#以下输出有\t和\n字符
str3 = "I \tcan't stop \nloving you."
print(str3)
执行结果
I can't stop loving you.
I can't stop loving you.
I can't stop
loving you.
3-4-4 强制转换为字符串
str( )函数可以强制将数值数据转换为字符串数据。
程序实例ch3_17.py:使用str( )函数将数值数据强制转换为字符串的应用。
# ch3_17.py
num1 = 222
num2 = 333
num3 = num1 + num2
print("这是数值相加")
print(num3)
str1 = str(num1) + str(num2)
print("强制转换为字符串相加")
print(str1)
执行结果
这是数值相加
555
强制转换为字符串相加
222333
上述字符串相加,读者可以想成是字符串连接执行结果是一个字符串,所以上述执行结果555是数值数据,222333则是一个字符串。
3-4-5 将字符串转换为整数
在未来的程序设计中也常会发生将字符串转换为整数数据,下列将直接以实例做说明。
程序实例ch3_18.py:将字符串数据转换为整数数据的应用。
# ch3_18.py
x1 = "22"
x2 = "33"
x3 = x1 + x2
print(x3) # 打印字符串相加
x4 = int(x1) + int(x2)
print(x4) # 打印整数相加
执行结果
2233
55
上述执行结果55是数值数据,2233则是一个字符串。
3-4-6 字符串数据的转换
如果字符串含一个字符或一个文字时,我们可以使用下列执行数据的转换。
chr( x ):可以返回函数x值的字符,x是ASCII码值。
ord( x ):可以返回函数字符参数的Unicode码值,如果是中文字也可传回Unicode码值。如果是英文字符,Unicode码值与ASCII码值是一样的。
程序实例ch3_19.py:这个程序首先会将整数97转换成英文字符‘a’,然后将字符‘a’转换成Unicode码值,最后将中文字‘魁’转成Unicode码值。
# ch3_19.py
x1 = 97
x2 = chr(x1)
print(x2) # 输出数值97的字符
x3 = ord(x2)
print(x3) # 输出字符x3的Unicode码值
x4 = '魁'
print(ord(x4)) # 输出字符'魁'的Unicode码值
执行结果
a
97
39745
3-4-7 字符串与整数相乘产生字符串复制效果
在Python可以允许将字符串与整数相乘,结果是字符串将重复该整数的次数。
程序实例ch3_20.py:字符串与整数相乘的应用。
# ch3_20.py
x1 = "A"
x2 = x1 * 10
print(x2) # 打印字符串乘以整数
x3 = "ABC"
x4 = x3 * 5
print(x4) # 打印字符串乘以整数
执行结果
AAAAAAAAAA
ABCABCABCABCABC
3-4-8 聪明地使用字符串加法和换行字符\n
有时设计程序时,想将字符串分行输出,可以使用字符串加法功能,在加法过程中加上换行字符“\n”即可产生字符串分行输出的结果。
程序实例ch3_21.py:将数据分行输出的应用。
# ch3_21.py
str1 = "晓波著作"
str2 = "HTML5+CSS3王者归来"
str3 = "Python程序语言王者归来"
str4 = str1 + "\n" + str2 + "\n" + str3
print(str4)
执行结果
晓波著作
HTML5+CSS3王者归来
Python程序语言王者归来
3-4-9 字符串前加r
在使用Python时,如果在字符串前加上r,可以防止逸出字符(Escape Character)被转译,可参考3-4-3节的逸出字符表,相当于可以取消逸出字符的功能。
程序实例ch3_22.py:字符串前加上r的应用。
# ch3_22.py
str1 = "Hello!\nPython"
print("不含r字符的输出")
print(str1)
str2 = r"Hello!\nPython"
print("含r字符的输出")
print(str2)
执行结果
不含r字符的输出
Hello!
Python
含r字符的输出
Hello!\nPython
这个功能在本书第16章正规表达式将会有许多应用。
习题
本书所有程序实作题,叙述不完整部分是由读者自行发挥创意,例如,输入或输出格式、测试数据、验证程序正确的数据笔数等。
- 请列出下列数值的2进位、8进位、16进位的值。
(a) 100 (b) 55 © 299 (d) 399 (e) 86
- 请将下列数值转成10进位。
(a) 0b11110010 (b) 0o76543 © 0xaaabbb
- 假设a是10,b是18,c是5,请计算下列执行结果,取整数结果。
(a) s = a + b - c (b) s = 2 * a + 3 - c © s = b * c + 20 / b
(d) s = a % c * b + 10 (e) s = a ** c - a * b * c