python学习 day4

本文全面解析Python中的各类运算符,包括算数、比较、赋值、成员、身份、逻辑及位运算符。深入探讨每种运算符的功能、使用场景及优先级规则,适合初学者和进阶者学习。

运算符

(1) 算数运算符: + - * / // % **

  • ( + )加法
res = 6 + 4
print(res)		# 输出结果为10
  • ( - )减法
res = 6 - 4
print(res)		# 输出结果为2
  • ( * )乘法
res = 6 * 4
print(res)		# 输出结果为24
  • ( / )除法:在整除的情况下结果也会保留小数点后一位
res = 6 / 4
print(res)		# 输出结果为1.5
res = 6 / 2
print(res)		# 输出结果为3.0
  • ( / )地板除:除得结果只保留整数
    如果除数或者被除数存在是小数,那么结果上加上.0
res = 6 // 3
print(res)		# 输出结果为2
res = 7 // 3
print(res)		# 输出结果为2
res = 7 // 3.0
print(res)		# 输出结果为2.0
  • (%)取余
若有一方为负数,则余数+除数=最终结果,
如果被除数和除数都是负数,在正常得到的结果上加负号即可。
res = 81 % 11   # 输出结果为4
res = -81 % 11  # 输出结果为-4 + 11 = 7
res = 81 % -11  # 输出结果为4 + (-11) = -7
res = -81 % -11 # 输出结果为-4 
  • ( ** ) 幂运算
res = 3 ** 3
print(res)		# 输出结果为27

(2) 比较运算符: > < >= <= == !=

只会产生2个结果,要么True 要么False

var1 = 90
var2 = 90
res = var1 > var2
print(res)		#False

res = var1 <= var2
print(res)		#True

# *** 注意点
res = var1 == var2
print(res)		#True

res = var1 != var2
print(res)		#False
=  赋值 , 将右侧的值赋值给左侧
==  比较, 比较等号两边的值是不是相等,相等返回True

(3) 赋值运算符: = += -= *= /= //= %= **=

  • +=
a = a + b		# 展开写法
a += b			# +=的简化写法
  • -=
a = a - b		# 展开写法
a -= b			# -=的简化写法
  • *=
a = a * b		# 展开写法
a *= b			# *=的简化写法				
  • /=
a = a / b		# 展开写法
a /= b			# /=的简化写法
  • //=
a = a // b		# 展开写法
a //= b			# 展开写法
  • %=
a = a % b		# 展开写法
a %= b			# %=的简化写法
  • **=
a = a ** b		# 展开写法
a **= b			# **=的简化写法

(4) 成员运算符: in 和 not in (针对于容器型数据)

str: 必须是一个连续的片段

strvar = "金角大王真帅"		
res = "金" in strvar			# True
res = "二" not in strvar		# False
res = "大王" in strvar			# True
res = "大帅" in strvar			# False
print(res)

list tuple set

lst = ["王振","刘思敏","主胜","张恒"]
res = "刘思敏" in lst			# True

tup = ("黄俊","尉翼麟","李天兆")
res = "李天兆" not in tup		# True

setvar = {"神秘男孩","金角大王","银角大王"}
res = "银角大王" in setvar		# True					

dict

  • in 和 not in 在字典中只判断键,不判断值
dic = {"ww":"帅气,潇洒","dw":"英俊,气质非凡","yc":"有才,真诚"}

res = "英俊,气质非凡" in dic		# False
res = "dw" in dic				# True
res = "yc" not in dic			# False

(5) 身份运算符: is 和 is not (检测两个数据在内存中是否是同一个值)

仅在python3.6以上版本中

  • 之前讲过的变量缓存机制,不同变量被赋予了特定的相同内存空间的值,
    就可用该运算符比较id

我们拿整形的缓存机制做个试验:

var1 = 90
var2 = 90
res = var1 is var2
print(res)			# True

(6) 逻辑运算符: and or not

and 逻辑与

  • 全真则真,一假则假
res = True and True  	# True
res = True and False 	# False
res = False and True 	# False
res = False and False	# False

or 逻辑或

  • 全假则假,一真则真
res = True or True   # True
res = True or False  # True
res = False or True  # True
res = False or False # False

not 逻辑非

  • 真变假,假变真
res = not True		# False
res = not False		# True

逻辑短路

  • 如果出现了短路效果,后面的代码就不执行了
(1) True or 表达式
(2) False and 表达式
True or print(111)		# 输出这段后'print(111)'并没有执行

# 2
False and print(222)	# 输出这段后得到 222

res = 5 or 6
print(res)				# 输出后得到 5(代表True)

res = 0 and 9
print(res)				# 输出后得到 0(代表False)

逻辑运算符的优先级

  • () > not > and > or
res = 5 or 6 and 7 # 5 or 7 => 5
res = (5 or 6) and 7 # 5 and 7 => 7
res = not(5 or 6) and 7 # not 5 and 7 => False and 7 => False
print(res)

res = 1>2 or 3<4 and 5>10 or 11<12 and 13>16
# res = False or True and False or True and False	# 将比较运算输出为bool
# res = False or False or False						# 将and比较运算输出为bool
# res = False or False								# 从左至右输出or
# res = False										# 得到最终结果
print(res)

(7) 位运算符:& | ^ << >> ~

按位与:&

  • 转化为二进制后,1代表True,0代表False,每一位都用and输出
print(19 & 15)  # 输出为 3
# 运算步骤:
'''
	   19的二进制: 000 ... 10011
	   15的二进制: 000 ... 01111
每一位都用and输出: 000 ... 00011
'''

按位或 |

  • 转化为二进制后,1代表True,0代表False,每一位都用or输出
print(19 | 15)
"""
       19的二进制: 000 ... 10011
       15的二进制: 000 ... 01111
每一位都用and输出: 000 ... 11111
"""

按位异或 ^

  • 两者之间不一样返回真,一样返回假
print(19 ^ 15)
"""
     19的二进制: 000 ... 10011
     15的二进制: 000 ... 01111
一样为1,不同为0: 000 ... 11100
"""

<< 左移

  • 左移相当于做乘法: a * 2的b次幂
res = 4 << 2	# 16
res = 5 << 3    # 40
print(res)
"""
   5的二进制: 000 ... 0101   # 5
向左移动一位: 000 ... 1010   # 10
向左移动两位: 000 .. 10100	# 20
"""

>> 右移

右移相当于做除法: a // 2的b次幂

res = 5 >> 1
res = 5 >> 2
print(res)
"""
   5的二进制: 000 ... 0101   # 5
向右移动一位: 000 ... 0010   # 2
向右移动两位: 000 ... 0001	# 1
"""

~ 按位非

  • 针对于补码进行操作,按位取反,包括符号位

原码转换成补码,对补码取反(包括符号位),再将所得值作为补码,转换成原码(最终结果)

公式 :~n = -(n+1)

var = ~19
print(var)	# -20
"""
原码:000 ... 10011
反码:000 ... 10011
补码:000 ... 10011

补码:   000 ... 10011
按位非: 111 ... 01100

给补码求原码:
补码: 111 ... 01100
反码: 100 ... 10011
原码: 100 ... 10100  -20
"""
var = ~(-19)
print(var)
"""
原码: 100 ... 10011
反码: 111 ... 01100
补码: 111 ... 01101

补码:   111 ... 01101
按位非: 000 ... 10010

正数 : 补码 = 反码 = 原码
000 ... 10010  => 18
"""

优先级总结:

  • (1) 个别运算符优先级
	优先级最高的 ** 幂运算
	优先级最低的 =  赋值运算
	( ) 括号可以提升运算的优先级
  • (2) 整体 一元运算符 > 二元运算符
	一元运算符: 同一时间,只操作一个值, - ~
	二元运算符: 同一时间,操作两个值 , + - * / ...
  • (3) 同一层级优先级
	逻辑运算符:  () > not > and > or 
	算数运算符:  乘除 > 加减
	位运算符:(<< >>)  > (&)  >  (^)  >  (|)
  • (4) 其他情况优先级
	算数运算符 > 位运算符 > 比较运算符 > 身份运算符 > 成员运算符 > 逻辑运算符
	赋值运算符用来将算好的值赋值给等号左侧变量,做收尾工作.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值