0
点赞
收藏
分享

微信扫一扫

Python各种运算符

at小涛 2022-04-07 阅读 46
python

运算符

  • 算数运算符: + - * / // % **

    • / 除法(结果永远是小数)

    res = 8 / 4
    print(res)          # 2.0
    
    • // 地板除

      被除数 ÷ 除数 = 商    是整数的时候会舍去小数部分
      res = 13 // 3
      
      如果被除数或者除数是小数,结果就是小数.在正常得到结果后带上.0
      
      res = 13.0 // 3
      print(res)
      
    • % 取余

      (1)3+(-4) = -1
      (2)-3+4 = 1
      (3)被除数和除数都是负数,结果直接取负
      
      res = 7 % 4          # 3
      res = 7 % -4         # -1
      res = -7 % 4         # 1
      res = -7 % -4        # -3
      res = 81 % 7         # 4
      res = -81 % 7        # 3   -4+7 = 3
      res = 81 % -7        # -3  4+-7=-3
      res = -81 % -7       # -4
      print(res)
      
    • ** 次方

      res = 3 ** 4
      print(res)           #81
      
  • 比较运算符: > < >= <= == !=

    比较运算符最后的结果只有True或者False
    res = 4 > 3
    res = 4 == 3
    res = 4 != 3
    print(res)
    
  • 赋值运算符 = += -= *= /= //= %= **=

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

    特指容器  in 在..里面
    str
    
    必须是连续的片段
    strvar = "5月26日,晚上7点有血月"
    res = "晚" in strvar                 # True
    res = "晚上" in strvar               # True 
    res = "晚上血月" in strvar            # False
    print(res)                          
    
    lst = ["王海洋","石啸","张猛","董银银","雷亮"]
    tup = ("王海洋","石啸","张猛","董银银","雷亮")
    setvar = {"王海洋","石啸","张猛","董银银","雷亮"}
    res = "雷亮" not in lst              # False
    res = "董银银" in tup                # True
    res = "石啸啸啸" in setvar           # False
    print(res) 
    
  • dict :in 或者是 not in 用来判断字典的键,不是值

    dic = {"why":"王海洋","sx":"石啸","dyy":"董银银","ll":"雷亮"}
    res = "王海洋" in dic              # Flase
    res = "why" in dic                # True
    print(res)
    
  • 身份运算符 is / is not (判断地址)

    • 整型而言 -5 ~ 正无穷

      var1 = 200
      var2 = 200
      
      res = var1 is var2
      print(res)                    # true
      
    • 浮点型 非负数

      var1 = -90
      var2 = -90
      
      res = var1 is var2
      print(res)                     # True
      
    • 布尔型 相同即可

      var1 = True
      var2 = False
      
      res = var1 is not var2
      print(res)
      
    • 复数 :实数+虚数 永不相同 (只有虚数情况下)

      var1 = 3+4j
      var2 = 3+4j
      
      res = var1 is not var2
      print(res)
      
    • 容器 : 相同的字符串 相同的空元组 地址相等

      var1 = "你好"
      var2 = "你好"
      print(var1 is var2)           # True
      
      var1 = ()
      var2 = ()
      print(var1 is var2)
      
      剩下的容器,地址都不一样
      var1 = [1,2,3]
      var2 = [1,2,3]
      print(var1 is not var2)       # True
      
      res = 5 == 5                  #比较值的大小
      res = 5 is 5                  #比较值的地址
      
  • 逻辑运算符

    • 逻辑与 and

      全真则真 一假则假
      res = True and True           # True
      res = True and False          # False
      res = False and True          # False
      res = False and False         # False
      print(res)
      
    • 逻辑或 or

      一真则真 全假则假
      res = True or True            # True
      res = True or False           # True
      res = False or True           # True
      res = False or False          # False
      print(res)
      
    • 逻辑非 not

      真变假 假变真
      res = not True
      res = not False
      print(res)
      
    • 短路现象

      • True or 表达式

      True or print(123)
      
      无论后面的表达式是什么,改变不了最后的结果,于是短路
      True or True => True
      True or False => True
      
      • False and 表达式

      False and print(456)
      
      无论后面的表达式是什么,改变不了最后的结果,于是短路
      False and False => False
      False and True  => False
      
      res = 5 or 6             # 5
      res = 5 and 6            # 6
      res = 0 and 7            # 0
      res = 0 or 6             # 6
      res = not 0              # true
      res = not 1              # flase
      print(res)
      
      执行过程:
      1.先脑补5的布尔值是真还是假
      2.是否出现了短路现象
      3.如果是短路现象,返回前者
        如果不是短路现象,返回后者
      
    • 逻辑运算符的优先级 () > not > and > or

      res = 5 or 6 and 7
      print(res)
      
      res = 5 or 7              # 先算and = 7
      res = 5
      
      res = 5 and 6 or 7
      print(res)
      
      # res = 6 or 7
      res = 6
      
      res = (5 or 6) and 7
      print(res)
      
      res = 5 and 7 
      res = 7
      
      res = not (5 or 6) and 7
      print(res)
      
      res = not 5 and 7
      res = False and 7
      res = False
      
      res = 1>2 and 3<4 or 5>7 and 5<1 or 1>2 and 34>89
      print(res)
      
      res = False and True or False and False or False and False
      res = False or False or False
      res = False or False
      res = Flase
      

    位运算符: & | ~ ^ << >>

    var1 = 19                      # 10011  二进制
    var2 = 15                      # 1111
    
    • & 按位与 用在二进制上

    res = var1 & var2
    print(res)                 # 3
    
    10011
    
    01111
    
    00011
    
  • | 按位或

    res = var1 | var2
    print(res)
    
    10011
    
    01111
    
    11111
    
  • ^ 按位异或

    当两个值不一样时, 返回真
    
    res = var1 ^ var2
    print(res)
    
    真 ^ 假 = 真
    假 ^ 真 = 真
    真 ^ 真 = 假
    假 ^ 假 = 假
    
    
    10011
    
    01111
    
    11100
    
  • << 左移

    结论 : 任意数 << n => 任意数 *      # 2的n次幂 
    res = 5 << 1                     # 10
    res = 5 << 2                     # 20
    res = 5 << 3                     # 40
    print(res)
    
    000 ... 101  101是5的二进制
    000 ...1010  移动一位 10
    000 ..10100  移动二位 20
    000 .101000  移动三位 40
    
  • 右移<<

    结论 : 任意数 >> n => 任意数      # 2的n次幂 
    res = 5 >> 1
    res = 5 >> 2
    res = 5 >> 3
    print(res)
    
    000 ... 101
    000 ... 010 移动一位 2
    000 ... 001 移动二位 1
    000 ... 000 移动三位 0
    
  • ~ 按位非(了解)

    公式: -(n+1)
    
    res = ~-19                     # 18
    res = ~-40                     # 39
    print(res)
    
    按位非: ~ 对补码进行按位取反(每一位都取反)
    反码: 除了第一个符号位,剩下每一位取反;
    
    19
    原码:000 ... 10011
    反码:000 ... 10011
    补码:000 ... 10011
    
    补码:000 ... 10011
    按位非:111 ... 01100
    
    给你补码 求 原码
    补码:111 ... 01100
    反码:100 ... 10011
    原码:100 ... 10100 => -20
    
    -19
    原码:100 ... 10011
    反码:111 ... 01100
    补码:111 ... 01101
    
    对补码运算
    补码:111 ... 01101
    按位非:000 ... 10010
    
    给你补码 求 原码
    补码:000 ... 10010
    反码:000 ... 10010
    原码:000 ... 10010 => 18
    
  • 运算符总结:

    运算符优先级最高的: **
    运算符优先级最低的: =

    • 整体来看: 一元运算符 > 二元运算符

    一元运算符: 同一时间,操作一个数字 (-19 , ~19)
    二运运算符: 同一时间,操作二个数字 (+ - * / …) 3+5

    • 具体来看:

    ​ 算数运算符: 先算乘除 再算加减
    ​ 逻辑运算符: () > not > and > or
    ​ 位运算符 : (<< , >> ) > & > ^ > |

    • 分布来看:

    算数运算符 > 位运算符 > 比较运算符 > 身份运算符 > 成员运算符 > 逻辑运算符
    ​ 赋值运算符用来收尾

    res = 5+5<<10//5 is 40 or True and False
    print(res)
    
    res = 10 << 2 is 40 or True and False
    res = 40 is 40 or True and False
    res = True or True and False
    res = True or False
    res = True
    
    # 套上括号
    res = (5+5) << (10//5) is 40 or True and False
    
举报

相关推荐

Python运算符——布尔运算符

0 条评论