05 TIANCHI_Python_运算符及位运算
作者:互联网
大家好!
我是小黄,很高兴又跟大家见面啦 !
拒绝水文,从我做起 !!!!
今天更新的是:
- 05 TIANCHI_Python_运算符及位运算 。
- 往期检索:程序设计学习笔记——目录
创建时间:2021年2月10日
软件: Python 3 、Pycharm
- 先放一张思维导图,大致知道操作系统的具体功能和目标,然后再一一展开叙述。
05 TIANCHI_Python_运算符及位运算:
1. Python 运算符:
1.1 什么是运算符:
# 什么是运算符、操作数?
4 + 5 = 9
4 和 5 被称为操作数,+ 称为运算符。
1.2 Python 运算符的类型:
- Python 运算符分为七类 :
算数运算符、比较(关系)运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符。
1.2.1 Python 算数运算符:
- 举个例子:
a = 21
b = 10
c = 0
c = a + b
print("1 - c 的值为:", c)
c = a - b
print("2 - c 的值为:", c)
c = a * b
print("3 - c 的值为:", c)
c = a / b
print("4 - c 的值为:", c)
c = a % b
print("5 - c 的值为:", c)
# 修改变量 a 、b 、c
a = 2
b = 3
c = a ** b
print("6 - c 的值为:", c)
a = 10
b = 5
c = a // b
print("7 - c 的值为:", c)
# 1 - c 的值为: 31
# 2 - c 的值为: 11
# 3 - c 的值为: 210
# 4 - c 的值为: 2.1
# 5 - c 的值为: 1
# 6 - c 的值为: 8
# 7 - c 的值为: 2
1.2.2 Python 比较(关系)运算符:
- 举个例子:
a = 21
b = 10
c = 0
if (a == b):
print("1 - a 等于 b")
else:
print("1 - a 不等于 b")
if (a != b):
print("2 - a 不等于 b")
else:
print("2 - a 等于 b")
if (a < b):
print("3 - a 小于 b")
else:
print("3 - a 大于等于 b")
if (a > b):
print("4 - a 大于 b")
else:
print("4 - a 小于等于 b")
# 修改变量 a 和 b 的值
a = 5
b = 20
if (a <= b):
print("5 - a 小于等于 b")
else:
print("5 - a 大于 b")
if (b >= a):
print("6 - b 大于等于 a")
else:
print("6 - b 小于 a")
# 1 - a 不等于 b
# 2 - a 不等于 b
# 3 - a 大于等于 b
# 4 - a 大于 b
# 5 - a 小于等于 b
# 6 - b 大于等于 a
1.2.3 Python 赋值运算符:
- 举个例子:
a = 21
b = 10
c = 0
c = a + b
print("1 - c 的值为:", c)
c += a
print("2 - c 的值为:", c)
c *= a
print("3 - c 的值为:", c)
c /= a
print("4 - c 的值为:", c)
c = 2
c %= a
print("5 - c 的值为:", c)
c **= a
print("6 - c 的值为:", c)
c //= a
print("7 - c 的值为:", c)
# 1 - c 的值为: 31
# 2 - c 的值为: 52
# 3 - c 的值为: 1092
# 4 - c 的值为: 52.0
# 5 - c 的值为: 2
# 6 - c 的值为: 2097152
# 7 - c 的值为: 99864
1.2.4 Python 逻辑运算符:
- 举个例子:
a = 10
b = 20
if (a and b):
print("1 - 变量 a 和 b 都为 true")
else:
print("1 - 变量 a 和 b 有一个不为 true")
if (a or b):
print("2 - 变量 a 和 b 都为 true,或其中一个变量为 true")
else:
print("2 - 变量 a 和 b 都不为 true")
# 修改变量 a 的值
a = 0
if (a and b):
print("3 - 变量 a 和 b 都为 true")
else:
print("3 - 变量 a 和 b 有一个不为 true")
if (a or b):
print("4 - 变量 a 和 b 都为 true,或其中一个变量为 true")
else:
print("4 - 变量 a 和 b 都不为 true")
if not (a and b):
print("5 - 变量 a 和 b 都为 false,或其中一个变量为 false")
else:
print("5 - 变量 a 和 b 都为 true")
# 1 - 变量 a 和 b 都为 true
# 2 - 变量 a 和 b 都为 true,或其中一个变量为 true
# 3 - 变量 a 和 b 有一个不为 true
# 4 - 变量 a 和 b 都为 true,或其中一个变量为 true
# 5 - 变量 a 和 b 都为 false,或其中一个变量为 false
1.2.5 Python 位运算符:
# 按位非操作 ~
# ~ 把 num 的补码中的 0 和 1 全部取反(0 变为 1,1 变为 0)有符号整数的符号位在 ~ 运算中同样会取反。
~ 1 = 0
~ 0 = 1
00 00 01 01 -> 5
~
---
11 11 10 10 -> -6
11 11 10 11 -> -5
~
---
00 00 01 00 -> 4
# 按位与操作 &
# 只有两个对应位都为 1 时才为 1
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
0 00 01 01 -> 5
&
00 00 01 10 -> 6
---
00 00 01 00 -> 4
# 按位或操作 |
# 只要两个对应位中有一个 1 时就为 1
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
00 00 01 01 -> 5
|
00 00 01 10 -> 6
---
00 00 01 11 -> 7
# 按位异或操作 ^
# 只有两个对应位不同时才为 1
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
00 00 01 01 -> 5
^
00 00 01 10 -> 6
---
00 00 00 11 -> 3
# 异或操作的性质:满足交换律和结合律
A: 00 00 11 00
B: 00 00 01 11
A^B: 00 00 10 11
B^A: 00 00 10 11
A^A: 00 00 00 00
A^0: 00 00 11 00
A^B^A: = A^A^B = B = 00 00 01 11
# 按位左移操作 <<
# num << i 将 num 的二进制表示向左移动 i 位所得的值。
00 00 10 11 -> 11
11 << 3
---
01 01 10 00 -> 88
# 按位右移操作 >>
# num >> i 将 num 的二进制表示向右移动 i 位所得的值。
00 00 10 11 -> 11
11 >> 2
---
00 00 00 10 -> 2
# 三元运算符
x, y = 4, 5
if x < y:
small = x
else:
small = y
print(small)
# 4
# 三元运算符 一条语句来完成以下的条件判断和赋值操作。
x, y = 4, 5
small = x if x < y else y
print(small)
# 4
- 举个例子:
a = 10
b = 20
list = [1, 2, 3, 4, 5]
if (a in list):
print("1 - 变量 a 在给定的列表中 list 中")
else:
print("1 - 变量 a 不在给定的列表中 list 中")
if (b not in list):
print("2 - 变量 b 不在给定的列表中 list 中")
else:
print("2 - 变量 b 在给定的列表中 list 中")
# 修改变量 a 的值
a = 2
if (a in list):
print("3 - 变量 a 在给定的列表中 list 中")
else:
print("3 - 变量 a 不在给定的列表中 list 中")
# 1 - 变量 a 不在给定的列表中 list 中
# 2 - 变量 b 不在给定的列表中 list 中
# 3 - 变量 a 在给定的列表中 list 中
1.2.5 Python 位运算符_利用位运算实现整数集合:
- 一个数的二进制表示可以看作是一个集合(0 表示不在集合中,1 表示在集合中)。
- 比如集合
{1, 3, 4, 8}
,可以表示成01 00 01 10 10
而对应的位运算也就可以看作是对集合进行的操作。
# 元素与集合的操作:
a | (1<<i) -> 把 i 插入到集合中
a & ~(1<<i) -> 把 i 从集合中删除
a & (1<<i) -> 判断 i 是否属于该集合(零不属于,非零属于)
# 集合之间的操作:
a 补 -> ~a
a 交 b -> a & b
a 并 b -> a | b
a 差 b -> a & (~b)
1.2.7 Python 身份运算符:
- Python 身份运算符比较两个对象的存储单元。
注: id() 函数用于获取对象内存地址。
a = 20
b = 20
if (a is b):
print("1 - a 和 b 有相同的标识")
else:
print("1 - a 和 b 没有相同的标识")
if (id(a) == id(b)):
print("2 - a 和 b 有相同的标识")
else:
print("2 - a 和 b 没有相同的标识")
# 修改变量 b 的值
b = 30
if (a is b):
print("3 - a 和 b 有相同的标识")
else:
print("3 - a 和 b 没有相同的标识")
if (a is not b):
print("4 - a 和 b 没有相同的标识")
else:
print("4 - a 和 b 有相同的标识")
# 1 - a 和 b 有相同的标识
# 2 - a 和 b 有相同的标识
# 3 - a 和 b 没有相同的标识
# 4 - a 和 b 没有相同的标识
1.3 Python 运算符优先级:
- 一元运算符优于二元运算符。如正负号。
- 先算术运算,后移位运算,最后位运算。例如 1 << 3 + 2 & 7等价于 (1 << (3 + 2)) & 7
- 逻辑运算最后结合
Pyhton3 已不支持 <> 运算符,可以使用 ! = 代替.
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)
- and 拥有更高优先级:
x = True
y = False
z = False
if x or y and z:
print("yes")
else:
print("no")
# yes
1.4 Python 运算符补充:
1.4.1 Python中 is 和 == 的区别:
- is 判断两个对象是否为同一对象(is 表示对象标识符即 object identity),
即用 id() 函数查看的地址是否相同,如果相同则返回True,如果不同则返回 False。
is 不能被重载;当两个基本类型数据(或元组)内容相同时, id 会相同, 但并不代表 a 会随 b 的改变而改变。
== 是比较两个对象的内容(值)是否相等,此操作符内部调用的是 __eq__() 方法。所以 a==b 等效于a.__eq__(b),所以 = 可以被重载。
# 1. 当列表,元组,字典中的值都引用 a,b 时,总是返回 True,不受 a,b 值大小的影响
a=1000
b=1000
list1=[a,3,5]
list2=[b,4,5]
print(list1[0] is list2[0])
tuple1=(a,3,5)
tuple2=(b,4,5)
print(tuple1[0] is tuple2[0])
dict1={6:a,2:3,3:5}
dict2={1:b,2:4,3:7}
print(dict1[6] is dict2[1])
# True
# True
# True
# 2. 只要是变量的值相同,标识都相同,没有-5~256的限制:
a = 100000
b = 100000
if a is b:
print('a 和 b 标识相同,标识为:',id(a))
else:
print('a 和 b 标识不相同,a 标识为:',id(a),'b 标识为:',id(b))
# a 和 b 标识相同,标识为: 20004272
# 3. 同样的如果是负数,仍然没有上述限制:
a = -100000
b = -100000
if a is b:
print('a 和 b 标识相同,标识为:',id(a))
else:
print('a 和 b 标识不相同,a 标识为:',id(a),'b 标识为:',id(b))
# a 和 b 标识相同,标识为: 30357680
# 4. 列表也是一样的,只要是列表项数值一样,那么标识也是一样的。例子如下:
list1 = [10000,20000,30000]
list2 = [10000,12000,15000]
if list1[0] is list2[0]:
print('list1[0] 和 list2[0] 标识相同,标识为:',id(list1[0]))
else:
print('list1[0] 和 list2[0] 标识不相同,list1[0]标识为:',id(list1[0]),'list2[0]标识为:',id(list2[0]))
# list1[0] 和 list2[0] 标识相同,标识为: 10370480
# 5. 元组的标识是跟着变量名的,变量名不一样,标识也不一样,上例子:
tuple1 = (10000,20000,30000)
tuple2 = (10000,12000,15000)
if tuple1[0] is tuple2[0]:
print('tuple1[0] 和 tuple2[0] 标识相同,标识为:',id(tuple1[0]))
else:
print('tuple1[0] 和 tuple2[0] 标识不相同,tuple1[0] 标识为:',id(tuple1[0]),'tuple2[0]标识为:',id(tuple2[0]))
# tuple1[0] 和 tuple2[0] 标识相同,标识为: 10763696
# 6. 字典和列表是一样的,只要是列表项数值一样,那么标识也是一样的。
tuple1 = (10000,20000,30000)
tuple2 = (10000,12000,15000)
dict1 = {1:10000,2:20000,3:30000}
dict2 = {1:10000,2:12000,3:15000}
if dict1[1] is tuple2[1]:
print('dict1[1] 和 tuple2[1] 标识相同,标识为:',id(dict1[1]))
else:
print('dict1[1] 和 tuple2[1] 标识不相同,dict1[1] 标识为:',id(dict1[1]),'tuple2[1] 标识为:',id(dict2[1]))
# dict1[1] 和 tuple2[1] 标识不相同,dict1[1] 标识为: 15285680 tuple2[1] 标识为: 15285680
下期预告:
- 06 TIANCHI_Python_字符串
各位路过的朋友,如果觉得可以学到些什么的话,点个赞 再走吧,欢迎各位路过的大佬评论,指正错误,也欢迎有问题的小伙伴评论留言,私信。
每个小伙伴的关注都是本人更新博客的动力!!!
请微信搜索【 在下小黄 】文章更新将在第一时间阅读 !
把握现在 ,展望未来 ,加油 !
由于水平有限 ,写的难免会有些不足之处 ,恳请各位大佬不吝赐教 !
标签:00,标识,Python,else,运算符,及位,print 来源: https://blog.csdn.net/weixin_44519789/article/details/113782603