05 TIANCHI_Python_运算符及位运算

大家好!
我是小黄,很高兴又跟大家见面啦 !
拒绝水文,从我做起 !!!!
今天更新的是:

  • 05 TIANCHI_Python_运算符及位运算 。
  • 往期检索:程序设计学习笔记——目录

创建时间:2021年2月10日
软件: Python 3 、Pycharm


  • 先放一张思维导图,大致知道操作系统的具体功能和目标,然后再一一展开叙述。

05 TIANCHI_Python_运算符及位运算:

  • 1. Python 运算符:
    • 1.1 什么是运算符:
    • 1.2 Python 运算符的类型:
      • 1.2.1 Python 算数运算符:
      • 1.2.2 Python 比较(关系)运算符:
      • 1.2.3 Python 赋值运算符:
      • 1.2.4 Python 逻辑运算符:
      • 1.2.5 Python 位运算符:
      • 1.2.5 Python 位运算符_利用位运算实现整数集合:
      • 1.2.7 Python 身份运算符:
    • 1.3 Python 运算符优先级:
    • 1.4 Python 运算符补充:
      • 1.4.1 Python中 is 和 == 的区别:
  • 下期预告:

1. Python 运算符:

1.1 什么是运算符:

# 什么是运算符、操作数?
4 + 5 = 9

45 被称为操作数,+ 称为运算符。

1.2 Python 运算符的类型:

  • Python 运算符分为七类 :算数运算符、比较(关系)运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符。

1.2.1 Python 算数运算符:

05 TIANCHI_Python_运算符及位运算_第1张图片

  • 举个例子:
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 比较(关系)运算符:

05 TIANCHI_Python_运算符及位运算_第2张图片

  • 举个例子:
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 赋值运算符:

05 TIANCHI_Python_运算符及位运算_第3张图片

  • 举个例子:
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 逻辑运算符:

05 TIANCHI_Python_运算符及位运算_第4张图片

  • 举个例子:
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 位运算符:

05 TIANCHI_Python_运算符及位运算_第5张图片

# 按位非操作 ~
# ~ 把 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 身份运算符比较两个对象的存储单元。

05 TIANCHI_Python_运算符及位运算_第6张图片

注: 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 已不支持 <> 运算符,可以使用 ! = 代替.

05 TIANCHI_Python_运算符及位运算_第7张图片

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_字符串

各位路过的朋友,如果觉得可以学到些什么的话,点个赞 再走吧,欢迎各位路过的大佬评论,指正错误,也欢迎有问题的小伙伴评论留言,私信。

每个小伙伴的关注都是本人更新博客的动力!!!
请微信搜索【 在下小黄 】文章更新将在第一时间阅读 !

把握现在 ,展望未来 ,加油 !


由于水平有限 ,写的难免会有些不足之处 ,恳请各位大佬不吝赐教 !

你可能感兴趣的:(#,从零开始学习Python专栏,阿里云-TIANCHI天池,#,TIANCHI-Python,python,编程语言,数据挖掘,深度学习)