4.2 数值运算
数值用来表示事物或数据的一个特定的值。例如,成绩分数为90分。其中,90就是一个数值,用来表示分数值,是一个具体数值。数值运算就是这些数值之间的各种运算,如算术运算、幂运算等。下面详细介绍Python中的数值运算。
4.2.1 算术运算
Python的算术运算类似于日常生活中的基本数学运算,如加、减、乘、除。下面介绍如何进行算术运算。
1. 加、减、乘运算
Python的加、减、乘运算与数学中的含义相同,格式如图4.6所示。其中,加号(+)、减号(-)、星号(*)都是算术运算符,用来将左侧的数值1与右侧的数值2进行相加、相减或相乘运算。
图4.6 加、减、乘运算
【实例4-6】下面演示执行加、减、乘运算,并查看运算结果。
(1)进行加法运算,计算23+45的和,代码如下:
输出信息表示23+45的和为68。
(2)进行减法运算,计算45-23的差,代码如下:
输出信息表示45-23的差为22。
(3)进行乘法运算,计算23*45的乘积,代码如下:
输出信息表示23*45的乘积为1035。
2. 除运算
除运算和数学中的算法类似。在Python中,根据是否可以被整除以及取值情况,除运算被分为以下几种情况。
(1)除法运算
除法运算是将两个数值进行相除运算,用到的算术运算符是斜杠(/),格式如图4.7所示。其中,计算数值1与数值2的商,产生的结果为浮点数。
图4.7 除法运算
【实例4-7】下面演示除法运算,并查看运算结果。代码如下:
代码中进行了三次除法运算,得到的结果均为浮点数。
(2)整除运算
在数学中,整除运算可以得到整数形式的商和余数,避免出现商为小数的情况。Python的整除运算可以获取整数形式的商,用到的算术运算符是双斜杠(//),格式如图4.8所示。其中,计算数值1与数值2的整除运算的商,结果为整数类型。
图4.8 整除运算
【实例4-8】下面演示整除运算,并查看运算结果。代码如下:
代码中进行了三次整除运算,第一次是60与3相除,商为20,余数为0,运算结果为20;第二次是60与60相除,商为1,余数为0,运算结果为1;第三次是7与2相除,商为3,余数为1,运算结果为3。
(3)求余运算
图4.9 求余运算
求余运算就是将两个数值进行数学中的整除运算,并得到余数部分,用到的算术运算符是百分号(%),格式如图4.9所示。其中,用来计算数值1与数值2整除运算的余数。
【实例4-9】下面演示求余运算,并查看运算结果。代码如下:
这里进行了三次求余运算。第一次是60与3相除,商为20,余数为0,运算结果为0;第二次是60与60相除,商为1,余数为0,运算结果为0;第三次是7与2相除,商为3,余数为1,运算结果为1。
4.2.2 幂运算
幂运算是用来计算数值x的y次幂,以及x的y次方,用到的算术运算符是双星号(**),格式如图4.10所示。其中,计算数值1的数值2次方的值。
图4.10 幂运算
【实例4-10】下面演示幂运算,并查看运算结果。代码如下:
这里进行了四次幂运算。第一次计算整数2的平方,其运算结果为4;第二次计算整数2的3次方,其运算结果为8;第三次计算整数3的平方,其运算结果为9;第四次计算整数3的3次方,其运算结果为27。
4.2.3 增强赋值
变量赋值是将数值赋给变量,而增强赋值是在变量进行算术运算后再进行赋值。例如,以下代码对变量a进行加法运算。
说明:第一行代码将数值2赋给变量a。第二行代码是把a和3进行加法运算,得到运算结果5,再赋给变量a。第三行代码打印输出a的值。
为了简化上述操作,Python提供了增强赋值功能。它可以简化代码形式,格式如图4.11所示。
图4.11 增强赋值
中间部分的=为赋值运算符,+、-、*、/、//、%、**为算术运算符,将它们组合在一起使用,中间没有空格。这样,即可将左侧的变量和右侧的数值进行算术运算,然后再将结果赋给左侧的变量。所以,上述代码等同于以下代码:
其中,a+=3等同于a=a+3。
【实例4-11】下面演示在变量A上进行各种增强赋值,并查看运算结果。
(1)增强加法赋值,代码如下:
这里,变量A的初始值为整数8,进行了增强加法赋值,在初始值的基础上加2。运算后,变量A的值为10(8+2的运算结果)。
(2)增强减法赋值,代码如下:
这里,变量A的初始值为整数8,进行了增强减法赋值,在初始值的基础上减2。运算后,变量A的值为6(8-2的运算结果)。
(3)增强乘法赋值,代码如下:
这里,变量A的初始值为整数8,进行了增强乘法赋值,在初始值的基础上乘以2。运算后,变量A的值为16(8*2的运算结果)。
(4)增强除法赋值,代码如下:
这里,变量A的初始值为整数8,进行了增强除法赋值,在初始值的基础上除以2。运算后,变量A的值为4.0(8/2的运算结果)。
(5)增强整除赋值,代码如下:
这里,变量A的初始值为整数8,进行了增强整除赋值,在初始值的基础上与2进行整除运算。运算后,变量A的值为4(8//2运算结果)。
(6)增强求余赋值,代码如下:
这里,变量A的初始值为整数8,进行了增强求余赋值,在初始值的基础上与2进行求余运算。运算后,变量A的值为0(8%2运算结果)。
(7)增强幂赋值,代码如下:
这里,变量A的初始值为整数8,进行了增强幂赋值,即计算初始值8的2次方。运算后,变量A的值为64(8**2运算结果)。
4.2.4 正负运算
正负运算是获取表达式本身的值或负值,格式如图4.12所示。图中的=为赋值运算符,+、-为正负运算符。用来将右侧变量1的本身值或负值赋给左侧的变量2。
图4.12 正负运算
【实例4-12】下面演示正运算,并查看运算结果。代码如下:
这里,变量A1的值为60,把该变量的值赋给了变量A2。变量A2拥有与变量A1相同的值60。
【实例4-13】下面演示负运算,并查看运算结果。代码如下:
这里,变量A1的值为60,把该变量的负值赋给了变量A2。变量A2拥有了与变量A1相反的值,即-60。
4.2.5 类型不一致的数值处理
在进行运算时,使用的数据类型可以是整数、浮点数或复数。使用的数据类型不同,运算后的结果也会不同。运算时,Python会将不同类型的数据进行转换,然后再进行运算。Python提供了自动转换和手动转换两种方式。
1. 自动转换
自动转换是指运算时,Python会对参与运算的数据进行判断,然后自动进行转换,最终完成计算。由于运算数据类型的不同,转换方式也分为以下几种。
(1)整数与整数运算
整数与整数运算,运算结果的类型与运算操作符相关。当是除法运算符“/”时,运算结果为浮点数;其他运算结果都是整数。
【实例4-14】下面演示整数与整数运算,代码如下:
在该代码中,参与运算的数据都为整数。只有第一行的除法运算结果是浮点数,其他运算结果都是整数。
(2)整数与浮点数运算
整数与浮点数运算的结果都为浮点数。在运算时,Python首先将整数转换为浮点数,然后再与浮点数进行运算。
【实例4-15】下面演示整数与浮点数运算,代码如下:
这个实例分为两部分。第一部分是整数与浮点数运算,结果都是浮点数;第二部分是浮点数与整数运算,结果也都是浮点数。
(3)整数和复数运算
整数和复数运算的结果都为复数。在运算时,Python首先将整数转换为复数,然后再与原有的复数进行运算。
【实例4-16】下面演示整数和复数运算,代码如下:
该实例分为两部分。第一部分是整数与复数运算,结果都是复数;第二部分是复数与整数运算,结果也都是复数。
(4)浮点数与复数运算
浮点数与复数运算的结果都为复数。在运算时,Python首先将浮点数转换为复数,然后再与复数进行运算。
【实例4-17】下面演示浮点数与复数运算,代码如下:
该实例分为两部分,第一部分是浮点数与复数运算,结果都是复数;第二部分是复数与浮点数运算,结果也都是复数。
2. 手动转换
自动转换得出的结果是默认类型的数据。有时需要得到特定类型的结果数据,这就需要对参加运算的数据进行手动转换了。下面讲解常见的两种情况。
(1)强制转换为整数类型
强制转换为整数类型是指将浮点数或字符串类型强制转换为整数类型。转换时,需要使用int()。
【实例4-18】下面演示强制转换为整数类型,并进行运算,代码如下:
在该实例中,将参加运算的浮点数1.2,通过int()强制转换为整数,然后与其他数值进行运算。这样,得出的运算结果就可以不是浮点数类型,除了除法运算。
(2)强制转换为浮点数类型
强制转换为浮点数类型是指将整数或字符串类型强制转换为浮点数类型。转换时,需要使用float()。
【实例4-19】下面演示强制转换为浮点数类型,并进行运算,代码如下:
在该实例中,通过float(),将参加运算的整数强制转换为浮点数,然后与其他数值进行运算。这样,得到的运算结果都为浮点数类型。
4.2.6 数值比较
在Python中,有一类特殊的运算不用来计算,而是用来进行数值比较。每次比较结果的值为布尔类型True或False。而数值比较用到的运算符称为比较运算符。比较运算符包括==(等于)、!=(不等于)、>(大于)、<(小于)等。
【实例4-20】下面进行数值比较,代码如下:
该实例分为两部分。第一部分直接使用运算符对左右两侧的数值进行比较;第二部分使用运算符对左右两侧的表达式的值进行比较。
注意:在Python中,运算符==用来进行比较,不可以写成等号=。Python中的等号=用来表示赋值。
4.2.7 运算符优先级
运算符优先级是指在运算过程中规定的先运算哪个,再运算哪个。先运算的级别高于后运算的级别,这样才能保证运算的合理性和结果的正确性。这与四则运算遵循的“先乘除,后加减”是一个道理。
1. 运算规则
Python的运算也存在运算符优先级。它的运算规则是:优先级高的运算先执行,优先级低的后执行,同一优先级的按照从左到右的顺序执行。优先等级的高低和运算符相关。Python支持的数值运算符优先级(从高到低)如表4-1所示。
表4.1 数值运算符优先级
2. 改变优先级
Python运算的优先级顺序是可以改变的,这需要借助圆括号“()”。在运算时,先运算圆括号内的表达式,然后再运算圆括号外的。
【实例4-21】下面演示运算符的优先级对运算产生的作用,代码如下:
该实例进行了两次运算。在第一次运算12+34*2-30中,先进行34*2运算,得出的结果68;再与整数12进行加法运算,得出结果80;最后与整数30进行减法运算,得出最终结果50。
在第二次运算中,使用圆括号改变了运算符的优先级。在运算时,先将整数12与整数34进行加法运算,得出结果46;然后与整数2进行乘法运算,得出结果92;最后与整数30进行减法运算,得出最终结果62。