我心中的王者:Python-第3章 Python的基本数据类型

我心中的王者: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章正规表达式将会有许多应用。

习题
本书所有程序实作题,叙述不完整部分是由读者自行发挥创意,例如,输入或输出格式、测试数据、验证程序正确的数据笔数等。

  1. 请列出下列数值的2进位、8进位、16进位的值。

(a) 100 (b) 55 © 299 (d) 399 (e) 86

  1. 请将下列数值转成10进位。

(a) 0b11110010 (b) 0o76543 © 0xaaabbb

  1. 假设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

在这里插入图片描述

  • 27
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值