Python中常用的运算符
算术运算符:
标准算术运算符:加(+)、减(-)、乘(*)、除(/)、整除(//)
print(1+1) #加法运算
print(1-1) #减法运算
print(2*4) #乘法运算
print(1/2) #除法运算
print(11//2) #整除运算
取余运算符:%
print(11%2)
幂运算符:**
print(2**2)#2的2次方
print(2**3)#2的3次方
难点:一正一负的整除,和取余时
print(9//-4) #-3
print(-9//4) #-3
这个例子中他们的结果都是-3,为什么呢?
原因是,当一正一负时我们会选择向下取整,-9/4 时结果为2.2***,因此向下取整即为-3
print(9%-4) #-3
print(-9%4) #3
当一正一负取余时,我们发现,9%4 = -3,而-9%4 = 3 这是为什么呢?
原因是 ,当出现一正一负取余时,我们需要使用公式,余数 = 被除数-除数*商
赋值运算符
执行顺序:右 --> 左
#运算符是从右向左
i = 3 + 4
print(i)
结果为7
支持链式赋值 --> a = b = c = 10
#(链式赋值)
a = b = c = 20
print(a,id(a))
print(b,id(b))
print(c,id(c))
输出结果后发现他们的输出结果是一样的,并且他们的id是一样的
说明,20先赋值给c,c赋值给b,b赋值给a
这就是来链式赋值
支持参数赋值 --> +=,-=,*=,/=,//=,%=
a = 20
a += 20
print(a)
a -= 20
print(a)
a *= 20
print(a)
print(type(a))
a /= 3
print(a)
print(type(a))
a //= 2
print(a)
print(type(a))
a %= 3
print(a)
print(type(a))
得到上述结果,我们发现当a/=3 时结果变为了13.3333,类型变为了float,那之后的类型也将全部变为float
支持系列解包赋值 --> a,b,c = 10,20,30(要求等号左侧和右侧个数相同,否则会报错)
#支持系列解包赋值
a,b,c = 20,30,40
print(a,b,c)
#将下面两值进行交换
x,y = 10,20
x,y = y,x
print('交换之后',x,y)
解包赋值可以快速交换两个变量的值,而在其他的编程语言当中需要借助第三个中间变量,这体现了python的强大
比较运算符
> < >= <= !=
== --> 对象value的比较
is,is not -->对象的id比较
#比较运算
a,b = 10,20
print('a>b么',a,b) #False
print('a<b么',a,b) #True
print('a>=b么',a,b) #False
print('a<=b么',a,b) #True
print('a==b么',a,b) #False
print('a!=b么',a,b) #False
通过以上代码我们发现,通过比较运算符输出的结果都为bool类型
而上面,一个=称为赋值运算,两个=称为比较运算
一个变量由三部分组成,标识,类型,值
==比较的是值,比较对象的标识是is
a = 10
b = 10
print(a == b)
print(a is b)
最终输出结果都为True,说明a和b的value相等,a和b的标识(id)也相等
list1 = [11,22,33,44]
list2 = [11,22,33,44]
print(list1 == list2)
print(list1 is list2)
print(id(list1))
print(id(list2))
而通过我们没学过的知识列表来比较,发现
最终输出结果第一个为True,第二个为False
发现他们的值一样,但是标识(id)不同
a = 10
b = 10
print(a == b)
print(a is not b)#a 的id与b的id不相等
我们将上面代码改为a is not b
发现输出False
这就是python的比较运算符,比较结果输出bool类型
布尔运算符
and,or,not,in,not in
and 当两个运算数都为True时,运算结果为true
a,b = 1,2
print(a == 1 and b == 2) #True and True = True
print(a == 1 and b < 2 ) #True and False = False
print(a != 1 and b == 2) #False and True = False
print(a != 1 and b != 2) #False and False = False
or 只要有一个运算数为True,运算结果为True
a,b = 1,2
print(a == 1 or b == 2) #True or True = True
print(a == 1 or b < 2 ) #True or False = True
print(a != 1 or b == 2) #False or True = True
print(a != 1 or b != 2) #False or False = False
not 对bool类型操作数取反
#对bool类型的操作数取反
f1 = True
f2 = False
print(not f1) #结果就相反为False
print(not f2) #结果就相反为True
in 和 not in
#in 与 not in
s = 'HelloWorld'
print('w' in s)#w在s中 True
print('w' not in s)#w不在s中 False
print('k' in s)#k在s中 False
print('k' not in s)#k不在s中 True
位运算符 将数据转成二进制进行计算
位与& --> 对应数位都是1,结果位数才是1
print(4&8) #4按位与8 结果位0
位或| --> 对应位数都是0,结果位数才是0
print(4|8)#4按位或8 结果为 1100,十进制为12
左移位运算符<< --> 高位溢出舍弃,低位补0
print(4<<1) #4向左移1位,每左移1位相当于乘2
右移位运算符>> --> 低位溢出舍弃,高位补0
print(4>>1) #4向右移1位 ,每右移一位相当于除2
运算符中的优先级
算术运算符>位运算符>比较运算符>布尔运算>赋值运算
有括号会计算括号中的运算