帅兰
计算机可以进行的运算有很多种,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,暂只学习算数运算、比较运算、逻辑运算、赋值运算。
1、算数运算
print(10 + 3.1)# 13.1
print(10 - 3)# 7
print(10 / 3)# 结果带小数 3.3333333333333335
print(10 // 3)# 只保留整数部分 3
print(10 % 3) # 取模、取余数 1
print(10 * 3)# 30
print(10 ** 3)# 幂 1000
2、比较运算
a = 20
b = 30
print(a == b) #等于 False
print(a != b) #不等于 True
print(a > b) #大于 False
print(a >=b) #大于等于 False
print(a < b) #小于 True
print(a <= b) #小于等于 True
3、赋值运算
# 原式
a = 1
a = a + 1 # a=2
#通过过赋值运算符简化为
a = 1
a += 1 # a=2
#不止加,乘除减等等都可以(=,+=,—=,*=,/=,%=,**=,//=)
a = 1
a -= 1 # a=0
4、链式赋值
#原式:
x = 10
y = x
z = y
# 链式赋值简化
z = y = x = 10
print(x, y, z) # 10 10 10
print(id(x), id(y), id(z)) # 2013001792 2013001792 2013001792
5、交叉赋值
m = 10 # 要求交换他俩值
n = 20
#复杂:
temp = m
m = n
n = temp
print(m,n) # 20 10
# 简化:
m,n = n,m # 交叉赋值
print(m,n) # 20 10
6、解压赋值
# 要求把五个月的工资取出来分别赋值给不同的变量名
#没学解压赋值,我们也可以通过索引来实现
salaries=[111,222,333,444,555]
mon0=salaries[0]
mon1=salaries[1]
mon2=salaries[2]
mon3=salaries[3]
mon4=salaries[4]
# 解压赋值实现要求
mon0,mon1,mon2,mon3,mon4=salaries
print(mon0)
print(mon1)
print(mon2)
print(mon3)
print(mon4)
mon0,mon1,mon2,mon3=salaries # 报错 对应的变量名少一个不行
mon0,mon1,mon2,mon3,mon4,mon5=salaries # 报错 对应的变量名多一个也不行
# 引入*,可以帮助我们取两头的值,但无法取中间的值
# 例:取前三个值
x,y,z,*_=salaries=[111,222,333,444,555]
# *会将没有对应关系的值存成列表然后赋值给紧跟其后的那个变量名,
# 此处为_,推荐之后不要的都绑定给_,节省内存。
print(x,y,z) # 111 222 333
print(_) # [444, 555]
# 其他例子,取后三个值
*_,x,y,z=salaries=[111,222,333,444,555]
print(x,y,z) # 333 444 555
# 中间的案例
x,*_,y,z=salaries=[111,222,333,444,555]
print(x,y,z) # 111 444 555
# 两端都用*
salaries=[111,222,333,444,555]
_,*middle,_=salaries
print(middle) # [222, 333, 444]
# 解压字典默认解压出来的是字典的key
x,y,z=dic={'a':1,'b':2,'c':3}
print(x,y,z) # a b c
7、逻辑运算
就是用not、and、or把条件链接起来进行判断的运算。
7.1 条件
条件就是你事先定义好东西。
age = 20
# 条件经过判断会得到一个布尔值,条件可以是True,False。
print(age < 22) # False
7.2 显性布尔值和隐性布尔值
显性布尔值 : 表面上看判断结果就直接是True或False。
# 比较运算的结果
#一眼就能看出来
print(10 > 3) # Ture
print(10 == 3) # False
# 变量值直接就是True或False
tag = True
隐性布尔值: 所有的值都可以当成条件去用,其中0、None、空(空字符串、空列表、空字典)代表的布尔值为False,其余都为Ture。
7.3 not、and、or的基本使用
not: 就是把紧跟其后的那个条件结果取反,注意 not与紧跟其后的那个条件是一个不可分割的整体。
# not 条件:对条件的结果取反
print(not 10 > 3) # False
print(not False) # Ture
print(not 0) # Ture
and: and用来链接左右两个条件,两个条件同时为True,最终结果才为真。
# 条件1 and 条件2:连接左右两个条件,两个条件必须都为True,最终结果才为True
print(True and 10 > 3) # Ture
print(True and 10 == 3) # False
or: 用来链接左右两个条件,两个条件但凡有一个为True,最终结果就为True,两个条件都为False的情况下,最终结果才为False。
# 条件1 or 条件2:连接左右两个条件,两个条件只要有一个为True,最终结果就为True
print(False or 10 == 3) # False
print(True or 10 == 3) # False
7.4 not、and、or使用优先级
not>and>or
如果单独就只是一串and链接,或者说单独就只是一串or链接,按照从左到右的顺讯依次运算即可如果是混用,则就需要考虑优先级了。
# 优先级:not > and > or,推荐用括号去标识优先级
# False or # True
res=(3 > 4 and 4 > 3) or (not (1 == 3 and 'x' == 'x')) or 3 > 3 # True
res = 3 > 4 and 4 > 3 or not 1 == 3 and 'x' == 'x' or 3 > 3
print(res) # True
7.5 短路运算
偷懒原则: 逻辑运算的结果一旦可以确定,那么就以当前处计算到的值作为最终结果返回,拿单纯or链接的条件举例,在运行第一个条件结果true的话,这行之后的条件就不会再运行了,直接得出结果Ture。
# 这个位置得到True之后的代码都不会再算了
v
res = True or False or True ........
7.6 特殊案例
#所有数据类型都自带布尔值;
#None,0,空(空字符串,空列表,空字典等)三种情况下布尔值为False,其余均为真 。
print(10 and 0) # 0
print(10 and False) # False
print(10 or False) # 10
#上例10自带布尔值Ture,0则为False,这种情况会直接返回值来表示结果
8、身份运算
is与==: is 比较左右两个值身份id是否相等,== 比较左右两个值他们的值是否相等。
name = 'sailan'
name2 = '摔烂'
a = name
print(name is a, name is name2, name == a, name == name2)
#结果:True False True False