python运算符 最后更新时间:2023年12月01日 python中有8种运算符: - 算术运算符 - 赋值运算符 - 比较运算符 - 逻辑运算符 - 位运算符 - 成员运算符 - 身份运算符 - 三目运算符 #### 算术运算符 | 运算符 | 作用 | |:--:|:--:| | + | 相加 | | - | 相减 | | * | 相乘 | | / | 相除 | | % | 取模运算 | | ** |幂运算| | // | 整除(返回商的整数部分) | ###### 注意: - 整除是取除运算后,比自身小的整数。 - 取模运算是先整除,然后用整除的值乘除数,然后用被除数减去商得到结果。 - 在计算机中,做计算需要转为2进制,计算完之后又将结果转为十进制呈现,所以会产生精准误差。 - 解决精准问题,可以采用内置模块decimal。 示例: ```python from decimal import Decimal Decimal('5.4')-Decimal('3')#==>2.4 ``` #### 赋值运算符 | 运算符 | 作用 | 示例 | | :--: | :--: | :--: | | = | 赋值 | a=b;c=d+e | | += | 加法赋值 | a+=1(等价于a=a+1) | | -= | 减法赋值 | a-=1(等价于a=a-1) | | *= | 乘法赋值 | a*=2(等价于a=a*2) | | /= | 除法赋值 | a/=2(等价于a=a/2) | | %= | 取模赋值 | a+=2(等价于a=a%2) | | **= | 幂运算赋值 | a**=2(等价于a=a**2) | | //= | 整除赋值 | a//=2(等价于a=a//2) | ###### 注意: python中不支持a++,a--这种自运算写法。 #### 比较运算符 | 运算符 | 作用 | | -- | -- | | == | 等于 | | != | 不等于 | | > | 大于 | | < | 小于 | | >= | 大于等于 | | <= | 小于等于 | ###### 注意 - int 不能直接与str比较 - python3中不再支持<>号,在python2中该符号表示不等于。 - ==与!=符号不能分开写。即不能写成= =或是! = - str与str之间比较的是ASCII码,并且逐个对比。 - 连续的比较,如:a>b>c可以拆解为a>b and b>c #### 逻辑运算符 | 运算符 | 表达式 | 描述 | |:--:|:--:|:--:| | and | a and b | 逻辑与,a与b都为True则返回True | | or | a or b | 逻辑或,a或b其中一个为True则返回True | | not | not a | 逻辑非,如果a为True则,返回False,反之则反 | ###### 懒惰机制 - 当运用逻辑或(or)的时候,如果第一个参数为True,则执行到第一个参数就结束了,不会再执行后面的参数。 - 当运用逻辑与(and)的时候,如果第一个参数为False,则执行到第一个参数就结束了,不会再执行后面的参数。 ###### 示例: ```python print(10 and 20)#==>返回20 print(10 or 20)#==>返回10 ``` #### 位运算符 | 运算符 | 描述 | |:--:|:--:| | & | 按位与,两者都为1才为1,否则为0 | | 竖线 | 按位或,只有一个为1则为1,否则为0 | | ^ | 按位异或,两者相等则为0,否则为0 | #### 成员运算符 | 运算符 | 描述 | |--|--| | in | 判断元素是否在一个序列中,是则返回True | | not in | 判断元素是否在一个序列中,否则返回True | #### 身份运算符 | 运算符 | 描述 | |--|--| | is | 判断两个对象的内存地址是否一致,是则返回True | | not is | 判断两个对象的内存地址是否一致,否则返回True | #### 三目运算符 | 运算符 | True_statements if expression else False_statements | |--|--| | 描述 | 如果expresssion为ture则返回True_statements,否者返回False_statements | ###### 示例: ```python b=1 print(a=1 if b>4 else a=2)#==>输出结果为a=2 ``` #### 运算符的优先级 | 运算符 | 描述 | |--|--| | ** | 幂运算符(最高优先级)| | * / % // | 乘 除 取模 整除 | | + - | 加 减 | | < > <= <= | 比较运算符 | | == != | 比较运算符 | | = %= /= //= -= += *= **= | 赋值运算符 | | is not is | 身份运算符 | | in not in | 成员运算符 | | not or and | 逻辑运算符 | ###### 注意: - 列表中的运算从上到下,优先级从高到低。 - 同级别的运算符按从左往右的顺序计算。 - 赋值运算符是从右往左运算。 - 有小括号的话,小括号内的优先。 #### 问题: ###### 问题1: 判断"amy"是否在["bob","tony","lisa","steven"]里面,如果在则输出“amy 在逻辑大家庭”,否则输出“amy 不在……好难过” ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220133922850.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MjIxMTM1Mg==,size_16,color_FFFFFF,t_70) 回答: 写法一: ```python logic=["bob","tony","lisa","steven"] if "amy" in logic: print("amy 在逻辑大家庭") else: print("amy 不在…好难过") ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220133809649.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220133814982.png) 写法二: ```python logic=["bob","tony","lisa","steven"] print("amy 在逻辑大家庭" if "amy" in logic else "amy 不在…好难过") ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220133839611.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220133844240.png) ###### 问题2: 'ax'<'xa'为True还是为False?为什么呢? ![在这里插入图片描述](https://img-blog.csdnimg.cn/202012201343450.png) 回答: 为True。因为这两者比较的时候是按着字符的个数用ascII码逐一比较的,在这里a的ascII比x的ascII码要小,所以返回为True。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220134240717.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220134244290.png) ###### 问题3: 一下程序如果输入666执行那一条语句?为什么? ```python temp = input("请输入:") if temp == 'Yes' or 'yes': print("if执行了") else: print("else执行了") ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220135456459.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MjIxMTM1Mg==,size_16,color_FFFFFF,t_70) 回答: 会执行`print("if执行了")`。因为上面的==是比较运算符,or是逻辑运算符。比较运算符的优先级比逻辑运算符高。所以上面的if条件首先会执行temp == 'Yes',返回值为False ,接着会执行False or 'yes'。'yes'的返回值为True,所以返回值为True。所以会执行`print("if执行了")` ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220135429619.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220135433941.png) ###### 问题4: is与==的区别? ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220140005865.png) 回答: is判断的是两个对象的内存地址是否一致。==判断的是两个对象的值是否一致。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220135933407.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220135936662.jpg) ###### 问题5: 用户输入a,b 当a与b都不为0时则输出a与b的商;否则输出a与b的乘积。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220141906853.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MjIxMTM1Mg==,size_16,color_FFFFFF,t_70) 回答: 写法一: ```python while 1: a=input("请输入一个数值:") b=input("请输入一个数值:") if str.isdigit(a) and str.isdigit(b): if int(a) and int(b): print(int(a)/int(b)) else: print(0) else: continue ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220141859499.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MjIxMTM1Mg==,size_16,color_FFFFFF,t_70) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220141902788.png) 写法二: ```python while 1: a=input("请输入一个数值:") b=input("请输入一个数值:") try: if int(a) and int(b): print(int(a) / int(b)) else: print(0) except ValueError: continue ``` 写法三: ```python while 1: a=input("请输入一个数值:") b=input("请输入一个数值:") try: print(int(a) / int(b) if int(a) and int(b) else 0) except ValueError: continue ``` ###### 问题6: 基于问题5,采用三目运算符输出a,b中较大的数。![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220141957234.png) 回答: ```python while 1: a=input("请输入一个数值:") b=input("请输入一个数值:") if str.isdigit(a) and str.isdigit(b): print(a) if int(a) > int(b) else print(b) #或者这样写: #print(a if int(a) > int(b) else b) else: continue ``` ![在这里插入图片描述](https://img-blog.csdnimg.cn/2020122014224654.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201220142255463.png)
Comments | NOTHING