• day4. 运算符


    运算符包括算数运算符、比较运算符、赋值运算符、成员运算符、身份运算符、逻辑运算符、位运算符

    python运算符注意点
    算数运算符 % 取余 , //地板除 , ** 幂运算
    比较运算符 == 比较两个值是否相等 != 比较两个值是否不同
    赋值运算符 a += 1 => a = a+1
    成员运算符 in 或 not in 判断某个值是否包含在(或不在)一个容器类型数据当中
    身份运算符 is 和 is not 用来判断内存地址是否相同
    逻辑运算符 优先级 () > not > and > or
    位运算符 优先级 (<<或 >> ) > & > ^ > | 

    一、算数运算符 + - * / // % **

    1、 +、 -、 *、 /

    # (1) 算数运算符  + - * / // % **
    var1 = 6
    var2 = 4
    # + 
    res = var1 + var2
    print(res)
    
    # -
    res = var1 - var2
    print(res)
    
    # *
    res = var1 * var2
    print(res)
    
    # / 除法 (结果为小数)
    res = var1 / var2
    res = 10 / 5
    print(res)
    
    
    # // 地板除 (返回整数)
    res = 10 // 5
    res = 11 // 4
    print(res)
    
    # 如果被除数或者除数是一个小数,结果加上.0
    res = 11.0 // 4
    print(res)
    +、-、*、/

    2、取余 %

    res = 11 % 4
    res = -11 % 4  # -3 + 4 = 1
    res = 11 % -4  # 3 + (-4) = -1
    res = -11 % -4 # -3(如果被除数和除数都是负数,在正常得到的结果前面填上负号即可.)
    print(res)
    
    res = -17 % 7 # -3 + 7 = 4
    res = 17 % -7 # 3 + (-7) = -4
    res = -17 % -7 #-3
    print(res)
    取余

    3、幂运算 **

    res = 3 ** 2
    res = 3 ** 4
    print(res)
    幂运算

    二、比较运算符  > < >= <= == != 

    比较运算符只会差生两种结果: True 真的 ,False 假的

    var1 = 100
    var2 = 100
    
    res = var1 > var2
    res = var1 < var2
    res = var1 >= var2
    res = var1 <= var2
    print(res)
    
    
    # 注意点
    res = var1 == var2
    print(res)
    
    res = var1 != var2
    print(res)
    比较运算符

    三、赋值运算符 = += -= *= /= //= %= **=

    1、= += -= *= /=

    # = 从右向左,将右侧的值赋值给左侧变量
    var1 = 9 
    var2 = 2
    
    
    # += 
    """var1 = var1 + var2"""
    # var1 += var2
    # print(var1)
    
    # -=
    """var1 = var1 - var2"""
    # var1 -= var2
    # print(var1)
    
    # *=
    """var1 = var1 * var2"""
    # var1 *= var2
    # print(var1)
    
    # /=
    """var1 = var1 / var2"""
    # var1 /= var2
    # print(var1)
    = += -= *= /=

    2、//= %= **=

    # //=
    """var1 = var1 // var2"""
    # var1 //= var2
    # print(var1)
    
    # %= 
    """var1 = var1 % var2"""
    # var1 %= var2
    # print(var1)
    
    # **=
    """var1 = var1 ** var2"""
    var1 **= var2
    print(var1)
    //= %= **=

    四、 成员运算符 in、 not in (针对容器类型数据)

    字符串必须是一个连续的片段

    strvar = "happy new year, "
    res = "new" in strvar
    res = "kxq" not in strvar
    res = "yea" in strvar
    res = ',' not in strvar
    print(res)
    
    
    # list tuple set
    lst = ["jack", "kxq", "xiaoming", "aaa", "bbb"]
    res = "jack" in lst
    print(res)
    
    tup = ("jack", "kxq", "xiaoming", "aaa", "bbb")
    res = "kxq" not in tup
    print(res)
    
    setvar = {"jack", "kxq", "xiaoming"}
    res = "xiaoming" in setvar
    print(res)
    
    # dict
    """ in  和 not in 在字典中只判断键,不判断值 """
    dic = {"name": "jack", "age": "18", "gender": "0"}
    
    res = "ll" in dic # False
    res = "name" in dic
    res = "age" not in dic
    print(res) 
    
    innot in
    in 和 not in

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

    1、整型 -5 ~ 正无穷

    var1 = 1000
    var2 = 1000
    res = var1 is var2
    print(res)
    整形

    2、浮点型 非负数

    var1 = -5.78
    var2 = -5.78
    res = var1 is not var2
    print(res)
    浮点型 非负数

    3、布尔型 只要值相同即可

    var1 = True
    var2 = True
    res = var1 is var2
    print(res)
    布尔型

    4、复数 实数+虚数永远不同 (只有虚数的条件例外)

    var1 = 4-90j
    var2 = 4-90j
    res = var1 is var2
    print(res)
    复数

    5、容器类型

    var1 = (1,2,3)
    var2 = (1,2,3)
    res = var1 is var2
    print(res)
    容器

    六、逻辑运算符 and or not

    1、and 逻辑与

    """全真则真,一假则假"""
    res = True and True   # True
    res = True and False  # False
    res = False and True  # False
    res = False and False # False
    print(res)
    and

    2、 or 逻辑或

    """全假则假,一真则真"""
    res = True or True   # True
    res = True or False  # True
    res = False or True  # True
    res = False or False # False
    print(res)
    or

    3、 not 逻辑非

    """真变假,假变真"""
    res = not True
    res = not False
    print(res)
    not

    4、逻辑短路

    如果出现了短路效果,后面的代码不执行

    """
    短路:
    (1) True or 表达式
    (2) False and 表达式
    """
    """
    True or print("紫月真胖呀")
    True or True  => True
    True or False => True
    
    False and print("紫月真猛呀")
    False and False => False
    False and True  => False
    """
    
    """
    bool 类型为假的十种情况
    0 0.0 0j False '' [] () {} set() None
    先用大脑算一下布尔值真假,是否出现短路情况
    如果出现了直接返回当前值,没出现,继续向右执行;
    """
    
    
    res = 5 or 6
    res = 0 or 6
    res = 0 and 9
    print(res)
    逻辑短路

    5、逻辑运算符的优先级 

    () > 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>15 or 100<1000 and 1<2
    # res = False or True and False or True and False or True and True
    # res = False or False or False or True
    # res = False or False or True
    # res = False or True
    # res = True
    print(res)
    优先级

    七、位运算符

    1、按位与 &

    var1 = 19
    var2 = 15
    print(var1 & var2)
    """
    19的二进制
    0000 ... 10011
    15的二进制
    0000 ... 01111
    
    0000 ... 10011
    0000 ... 01111
    0000 ... 00011 => 3
    """
    &

    2、按位或 |

    var1 = 19
    var2 = 15
    print(var1 | var2)
    """
    19的二进制
    0000 ... 10011
    15的二进制
    0000 ... 01111
    
    0000 ... 10011
    0000 ... 01111
    0000 ... 11111 => 31
    """
    |

    3、按位异或 ^ 两个值不一样,返回真,否则返回假

    """
    1 0 => 1
    1 1 => 0
    0 0 => 0
    0 1 => 1
    """
    var1 = 19
    var2 = 15
    print(var1 ^ var2)
    """
    19的二进制
    0000 ... 10011
    15的二进制
    0000 ... 01111
    
    0000 ... 10011
    0000 ... 01111
    0000 ... 11100 => 28
    """
    ^

    4、<< 左移

    """ 左移相当于做乘法 : 5 * 2的n次幂 """
    res = 5 << 1 # 10
    res = 5 << 2 # 20
    res = 5 << 3 # 40
    print(res)
    """
    0000 ...  101
    0000 ... 1010  移动一位 10
    0000    10100  移动二位 20
    """
    <<

    5、 >> 右移

    """ 右移相当于做除法 : 5 // 2的n次幂 """
    res = 5 >> 1 # 2
    res = 5 >> 2 # 1
    res = 5 >> 3 # 0
    print(res)
    """
    0000 ...  101
    0000 ...  010  移动一位 2
    0000 ...  001  移动二位 1
    0000 ...  000  移动三位 0
    """
    >>

    6、 ~ 按位非 (针对于补码进行操作,按位取反,包括符号位)

    """公式: -(n+1)"""
    var1 = ~19
    print(var1)
    """
    ~ 按位非每一位都取反,包括符号位,求反码每一位除了符号位,都取反.
    
    原码:0000 ... 10011
    反码:0000 ... 10011
    补码:0000 ... 10011
    
    补码:     0000 ... 10011
    按位非:   1111 ... 01100
    
    给你补码求原码:
    补码: 1111 ... 01100
    反码: 1000 ... 10011
    原码: 1000 ... 10100 => -20
    """
    
    var1 = ~(-22)
    print(var1)
    """
    原码: 1000 ... 10011
    反码: 1111 ... 01100
    补码: 1111 ... 01101
    
    补码:    1111 ... 01101
    按位非:  0000 ... 10010
    
    给你补码求原码:
    正数 : 补码 = 反码 = 原码
    
    原码:  0000 ... 10010 => 18
    """
    ~

    7、运算符总结

     1 """
     2 (1) 个别运算符:
     3     优先级最高 ** 幂运算
     4     优先级最低 =  赋值运算符
     5     () 括号可以提升运算优先级
     6     
     7 (2) 整体 一元运算符 > 二元运算符
     8     一元运算符: 同一时间,只操作一个值 - ~
     9     二元运算符: 同一时间,操作两个值 + - * / ...
    10     
    11 (3) 同一层级
    12     逻辑: () > not > and > or
    13     算数: 乘除 > 加减
    14     位运算符: ( << >> ) > & > ^ > |
    15 
    16 (4) 其他运算符
    17     算数运算符 > 位运算符 > 比较运算符 > 身份运算符> 成员运算符 > 逻辑运算符
    18     赋值运算符是最后算完进行赋值,做收尾工作的.
    19 """    
    20 res = 5+5 << 6//3 is 40 and True
    21 print(res)
    22 
    23 """
    24 res = 10 << 2 is 40 and True
    25 res = 40 is 40 and True
    26 res = True and True
    27 res = True
    28 """
    29 # 加上括号包起来,让别人能看懂代码;
    30 res = (5+5) << (6//3) is 40 and True
  • 相关阅读:
    OpenStack IceHouse版cinder模块新添加功能
    最小代价生成树
    HDU 3065 病毒侵袭持续中(AC自己主动机)
    POJ--2284--That Nice Euler Circuit【平面图欧拉公式】
    java工具类(四)之实现日期随意跳转
    Metasploit学习笔记之——情报搜集
    POJ 2378 Tree Cutting 子树统计
    cocos2d-x 3.0 touch事件官方解释
    html_entity_decode() 将 HTML 实体转成字符原型
    微信公众平台开发(81) 2014新年微信贺卡
  • 原文地址:https://www.cnblogs.com/kongxiangqun/p/13225699.html
Copyright © 2020-2023  润新知