Python入门教程06——数字运算(长文干货)

数字运算符Python中常用的数字运算操作符如表3-1所示。

数字运算符

Python中常用的数字运算操作符如表3-1所示。

操作符

说明

举例

**

幕运算

2**3

~

按位取反

~5

-

负号

-5

*, %, /, //

乘法、求余数、真除法、floor 除法

2*3, 3%2, 5/2, 5//2

+, -

加法、减法

2+3, 2-3

<<, >>

向左移位、向右移位

3<<2, 12>>2

&

按位与

5&2

^

按位异或

5^2

|

按位或

5 | 2

<, <=, >, >=, ==, !=

小于、小于等于、大于、大于等于、相等、不等

2<3 , 2<=3 , 2>3 , 2>=3 . 2==3, 2!=3

not

逻辑非

not True , not 2<3

and

逻辑与

x>5 and x < 100

or

逻辑或

x<5 or x>100

  • 计算的优先级

表3-1中操作符的运算优先级按从上到下的顺序依次降低。可以用括号(括号优先级最高)改变计算顺序,如下:

print(2 + 3 * 5) # 17print((2 + 3) *5) # 25
  • 自动数据类型转换

在运算过程中遇到不同类型的数字时,Python总是将简单的类型转换为复杂的类型,示例代码如下。

print(2+3.5,type(2+3.5))  # (5.5, class 'float') float比int复杂,转换成floatprint(2+3.5+(2+3j),type(2+3.5+(2+3j)))  #((7.5 + 3j), <class 'complex'>) 复数比float复杂

Python 中的类型复杂度由简单到复杂依次为:布尔型-->整型-->浮点型-->复数。

  • 求余数

x%y计算x除以y的余数,余数符号与y一致。若存在一个操作数为浮点数,则结果为浮点数,否则为整数,示例代码如下。

print(5%2, 5%-2, -5%2, -5%-2)    # 1 -1 1 -1print(5%2.0, 5%-2.0, -5*2.0, -5%-2.0)     # 1.0 -1.0 1.0 -1.0
  • 真除法和floor除法

/ 运算执行真除法,即无论操作数是否为整数,计算结果都是浮点数,保留小数部分,示例代码如下。

print(4/2 , 5/2)    # 2.0 2.5

// 运算称为floor除法。x//y 计算结果为不大于x除以y结果的最大整数。当两个操作数都是整数时,结果为int类型,否则为float类型,示例代码如下。

print(5//2, 5//-2, -5//2, -5//-2)    # 操作数都是int类型,结果为int类型 2 -3 -3 2print(5//2.0, 5//-2.0, -5//2.0, -5//-2.0)     # 操作数中一个是float类型,结果为float类型 2.0, -3.0, -3.0, 2.0
  • 位运算

~ , & , |, ^, <<, >>都是位运算符,按操作数的二进制位进行操作。

按位取反~,操作数的二进制位中,1取反为0,0取反为1,符号位也取反,示例代码如下。

print(~5)   # 5的8位二进制形式为00000101,按位取反为11111010,即-6print(~-5)   # -5的8位二进制形式为11111011,按位取反为00000100,即4

按位与&,将两个操作数相同位置的数执行“与”操作,相同位置上的两个数都是1时,与的结果为1,否则为0,示例代码如下。

print(4&5) # 4的二进制形式为00000100,5为00000101,所以结果为00000100,即4print(-4&5) # -4的二进制形式为11111100,5为00000101,所以结果为00000100,即4

按位异或^,执行“按位异或”操作,相同位置上的数相同时结果为0,否则为1,示例代码如下。

print(4^5)   # 4的二进制形式为00000100,5为00000101,所以结果为00000001,即1print(-4^5)    #  -4的二进制形式为11111100,5为00000101,所以结果为11111011,即-7

按位或|,执行“按位或”操作,相同位置上的数有一个为1时结果为1,否则为0,示例代码如下。

 print(4|5)   # 4的二进制形式为00000100,5为00000101,所以结果为00000101,即5print(-4|5)    #  -4的二进制形式为11111100,5为00000101,所以结果为11111101,即-3

向左移位<<,x<<y表示将x按二进制形式向左移动y位,末尾补0,符号位保持不变。向左移动1位等同于乘以2,示例代码如下。

print(1 << 2) # 4的二进制形式为00000001,所以结果为00000101,即5print(-1 << 2) # -4

向右移位>>,x>>y表示将x按二进制形式向右移动y位,符号位保持不变,向右移动1位等同于除以2,示例代码如下。

print(8 >> 2)    # 2print(-8 >> 2)    # -2
  • 比较运算

比较运算的结果为逻辑值(True或False),示例代码如下。

print(2>3)    # Falseprint(2<3)    # True

Python 允许将连续的多个比较运算符进行缩写,示例代码如下。

a=1b=3c=5print(a < b < c)   # 等价于a<b and b<c Trueprint(a == b < c)   # 等价于a==b and b<c Falseprint(a < b > c)    # 等价于a<b and b>c False
  • 逻辑运算

逻辑运算(也称布尔运算)指逻辑值(True或False)执行 not and或or操作。在判断True或False之外的数据是否为逻辑值时,Python将属于下列情况的值都视为False。

  1. None各种数字类型的0,如0, 0.0, (0+0j)等。
  2. 空的序列,如[], ()等。
  3. 空的映射,如{}。
  4. 如果自定义类包含__bool()__返回False或__len__()方法返回0时,将实例对象视为False。

上述情况之外的值则视为True。

逻辑非not,not True 为False ,not False 为 True ,例如:

print(not True, not False)   # False Trueprint(not None, not 0, not '', not {})  # True True True True

逻辑与and,x and y在两个操作数都为 True 时,结果才为 True,否则为False。当x为False时,由于x and y的运算结果已经为 False, 则Python不会再计算y的值,这称之为逻辑运算的短路,示例代码如下。

print(True and True, True and False, False and True, False and False)# 结果为: True False False False

逻辑或or,x or y在两个操作数都为False时,结果才为False,否则为True。当x为True时,由于x or y的运算结果已经为True,Python 不会再计算y,示例代码如下。

print(True or True, True or False, False or True, False or False)# 结果为: True True True False

数字处理函数

Python 提供了用于数字处理的内置函数和内置模块。

  1. 内置的常用数学函数,如下所示。
print(abs(-5)) # 返回绝对值 5print(divmod(9,4)) # 返回商和余数 (2, 1)a=5print(eval('a*a+1') # 返回字符串中的表达式,等价于 a*a+1 26 print(max(1,2,3,4)) # 返回最大值 4print(min(1,2,3,4)) # 返回最小值 1print(pow(2,3)) # pow(x,y)返回x的y次方,等价于x**y 8print(round(1.56)) # 四舍五入:只有一个参数时四舍五入结果为整数 2print(round(1.567, 2) # 四舍五入:保留指定位数的小数 1.57print(round(1.5), round(-1.5)) # 四舍五入:舍入部分为5时,向偶数舍入 2 -2print(sum(1, 2, 3, 4)) # 求和 10
  1. math模块Python在math模块中提供了常用的数学常量和函数,要使用这些函数需要先导入math模块。示例代码如下。
import math # 导入math模块math.pi # 数学常量pi 3.141592653589793math.e # 数学常量e 2.718281828459045math.inf # 浮点数的正无穷大,-math.inf表示负无穷大 infmath.cell(2.3) # math.ceil(x)返回不小于x的最小整数 3math.fabs(-5) # math . fabs ( x ) 返回 x 的绝对值 5.0math.factorial(0), math.factorial(5) # 返回非负数 x 的阶乘 (1,120)math.floor(2.3) # math.floor(x)返回不大于x的最大整数 2math.fmod(9, 4) # math.fnod(x ,y) 返回 x 除以 y 的余数 1.0x=[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]sum(x) # 求和,sum()函数由于浮点数原因存在不精确性 0.999999999999999math.fsum(x) # 求和,math.fsum()比sum()更精确 1.0math.gcd(12, 8) # math.gcd(x,y)返回x和y的最大公约数 4math.trunc(15.67) # math.trunc(x)返回x的整数部分 15math.exp(2) # math.exp(x)返回e的x次方 7.38905609893065math.expm1(2) # math.expml(x)返回e的x次方减1的值 6.38985609893065

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/121025.html

(0)

相关推荐