我们进行运算时,需要两类数据,操作数和运算符,例如:a+b就是一个运算,它的操作数是a和b,运算符是‘+’
在python中运算符包括以下几大类:
- 算数运算符
- 比较(关系)运算符
- 赋值运算符
- 逻辑运算符
- 位运算符
- 成员运算符
- 身份运算符
- 运算符优先级
算数运算符
算数运算符包括:加(+)、减(-)、乘(*,如果操作的对象是字符串类型,那么返回的结果是将字符串重复对应次数)、除(/)、取整除(//,向小的方向取整数)、取模(%)、幂(**)
以下是一些算数运算的实例:
a=8
b=2.5
c='test'
print(a+b)
print(a-b)
print(a*b)
print(c*3)
print(a/b)
print(a//b)
print(-9//2)
print(a%b)
print(a**3)
运算结果为:
比较(关系)运算符
python中的比较运算符包括:等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)
下面是比较运算的实例:
a=5
b=6
print(a==b)
print(a!=b)
print(a>b)
print(a<b)
print(a>=b)
print(a<=b)
结果为:
赋值运算符
赋值运算符包括:简单赋值运算符(=)、加法赋值运算符(+=)、减法赋值运算符(-=)、乘法赋值运算符(*=)、除法赋值运算符(/=)、取整除赋值运算符(//=)、取模赋值运算符(%=)、幂赋值运算符(**=)、海象运算符(:=,只有python3.8以后版本支持)
以下是赋值运算符的实例:
a=16 #一般赋值运算符
a+=a #相当于a=a+a
print('a+=a运算结果为:',a)
a-=1 #相当于a=a-1
print('a-=1运算结果为:',a)
a*=2 #相当于a=a*2
print('a*=2运算结果为:',a)
a/=4 #相当于a=a*2
print('a/=2运算结果为:',a)
a//=2 #相当于a=a*2
print('a//=4运算结果为:',a)
a%=4 #相当于a=a%2
print('a%=2运算结果为:',a)
a**=2 #相当于a=a**2
print('a**=2运算结果为:',a)
'''
海象运算符可以在表达式内部为变量赋值,这里是先对字符串求长度,并将字符串长度赋值给n,再将n与10进行比较,比较结果作为if语句的判断条件
'''
if (n := len('testtesttesttest')) > 10:
print(f"List is too long ({n} elements, expected <= 10)")
'''
如果没有海象运算符,以上代码可以改为以下代码,它的运行结果是一样的,但是代码没有那么简洁了
'''
n=len('testtesttesttest')
if n>10:
print(f"List is too long ({n} elements, expected <= 10)")
'''
以下代码是用于判断输入的字符串是否为'exit',如果是,那么退出程序,如果不是,那么输出刚才输入的字符串
'''
while (inputstr:=input('清输入字符串:')) !='exit':
print('输入的字符串:',inputstr)
位运算符
按位运算符是把数字看作二进制来进行计算的。位运算符包括:按位与运算(&,对应两个二进制位都为1时运算结果为1,否则为0)、按位或运算(|,对应两个二进制位有都为0时运算结果为0,否则为1)、按位异或运算(^,对应两个二进制位相异时运算结果为1,否则为0)、按位取反运算(~,将对应二进制数的每一位取反,将1变为0,0变为1)、左移运算符(<<,将对应数据的每一位都向左移动若干位,由<<右边的数字来指定移动的位数,高位丢弃,地位补0)、右移运算符(>>,将对应数据的每一位都向右移动若干位,由>>右边的数字来指定移动的位数,高位补0,地位丢弃)。
以下是按位运算实例:
a=60 #a用二进制表示为00111100
b=13 #b用二进制表示为00001101
print(a&b) #运算结果为:00001100,用十进制表示为12
print(a|b) #运算结果为:00111101,用十进制表示为61
print(a^b) #运算结果为:00110001,用十进制表示为49
'''
运算结果为:11000011,用十进制表示为-61,
要注意的是,在计算机中不管是正数还是负数,都是用它的补码来表示,
但是正数的原码、反码、补码都是一样的,但是负数的原码、反码、补码不一样
负数在计算机中以其绝对值的补码形式表达
'''
print(~a)
print(a<<2) #运算结果为:11110000,用十进制表示为240
print(a>>2) #运算结果为:00001111,用十进制表示为15
结果为:
逻辑运算符
逻辑运算符包括:与运算(and,x and y,如果x的值为False,那么返回x的值,否则返回y的计算值)、或运算(or,x and y,如果x的值为True,那么返回x的值,否则返回y的计算值)、非运算(not,not x,如果x的值为False,那么返回True,如果x的值为True,那么返回False)
要注意的是:在python中,所有非0的数字它的布尔值都是True,所有非空的字符串它的布尔值都是True
逻辑运算简单实例如下:
a=10
b=0
c=12
print(b and a) #为0,返回b的值
print(a and c) #a不为0,返回c的值
print(a or b) #a不为0,返回a的值
print(a or c) #a不为0,返回a的值
print(b or c) #b为0,返回c的值
print(not a) #a不为0,返回False
print(not b) #b为0,返回True
print(a and b or c) #从左到右,a and b的结果为0,0 or c,返回c的值
print(a and (b or c)) #先计算括号内的表达式,b or c,结果为c的值,不为0,a的值不为0,返回c的值
print(a and (not b)) #先计算括号内的表达式,not b的值为True,a的值不为0,返回True
结果为:
成员运算符
成员运算符包括:in(如果在指定的序列中找到值返回 True,否则返回 False),not in(如果在指定的序列中没有找到值返回 True,否则返回 False)
成员运算符简单实例如下:
str1='str1'
list1=[1,2.3,'str1']
tuple1=(1,2.3,'str1')
set1={1,2.3,'str1'}
dict1={'name':'小花','sex':'女','age':21}
a=1
b=2.3
c='str1'
d='t'
e='name'
if a in list1:
print('a在列表里面')
if b in tuple1:
print('b在元组里面')
if c in set1:
print('c在集合里面')
if d in str1:
print('d在字符串里面')
if e in dict1.keys():
print('e在字典里面')
if a not in list1:
print('a不在列表里面')
if b not in tuple1:
print('b不在元组里面')
if c not in set1:
print('c不在集合里面')
if d not in str1:
print('d不在字符串里面')
if e not in dict1.keys():
print('e不在字典里面')
if 5 not in tuple1:
print('5不在元组里面')
结果为:
身份运算符
身份运算符包括:is(判断两个标识符是不是引用自一个对象),is not(判断两个标识符是不是引用自不同对象)。
在python中,对象包含三个基本要素,分别是:id(身份标识),type(数据类型),value(值)
==和is的区别在于,它们进行比较的内容不同,==用于比较value(值),而is用于比较id(身份标识),id就是内存地址,相当于c语言中的指针
身份运算符的实例如下:
a=b=[1,2,3]
c=[1,2,3]
if a==b:
print('a和b的值相同')
if a==c:
print('a与c的值相同')
if a is b:
print('a与b的id相同')
if a is c:
print('a与c的id相同')
if a is not c:
print('a与c的id不同')
print('a的id为:',id(a))
print('c的id为:',id(c))
结果为:
运算符优先级
我们进行运算时,是按照运算符的优先级顺序进行的,优先级高的先执行,优先级低的后执行,同一优先级的按照从左往右的顺序执行。
常用运算符的优先级从高到低依次是:
- 小括号:()
- 幂:**
- 正、负、按位非:+、-、~
- 乘、除、整除、取余:*、/、//、%
- 加、减:+、-
- 移位:<<、>>
- 按位与:&
- 按位异或:^
- 按位或:|
- 比较运算(包括成员运算符和身份运算符):in、not in、is、is not、<、<=、>、>=、!=、==
- 逻辑非not
- 逻辑与:and
- 逻辑或:or
- 赋值运算符:=
一些简单的例子如下:
a = 20
b = 10
c = 15
d = 5
e = 0
e = (a + b) * c / d # ( 30 * 15 ) / 5
print("(a + b) * c / d 运算结果为:", e)
e = ((a + b) * c) / d # (30 * 15 ) / 5
print("((a + b) * c) / d 运算结果为:", e)
e = (a + b) * (c / d) # (30) * (15/5)
print("(a + b) * (c / d) 运算结果为:", e)
e = a + (b * c) / d # 20 + (150/5)
print("a + (b * c) / d 运算结果为:", e)
运行结果为: