2.5 运算符和优先级

微视频

Python语言支持的运算符包括算术运算符、比较运算符、赋值运算符、逻辑运算符、位运算符、成员运算符和身份运算符。

2.5.1 算术运算符

Python语言中常见的算术运算符如表2-1所示。

表2-1 算术运算符

【例2.5】计算部门的销售业绩差距和平均值(源代码\ch02\2.5.py)。

这里首先定义两个变量,用于存储各部门的销售额,然后使用减法计算销售业绩差距,最后应用加法和除法计算平均值。

    branch1=760000
    branch2=540000
    sub= branch1- branch2
    avg= (branch1+ branch2)/2
    savg=int(avg)
    print("部门1和部门2的销售业绩差距是:"+ str(sub))
    print("两个部门销售业绩的平均值是:"+ str(savg))

保存并运行程序,结果如图2-5所示。

图2-5 例2.5的程序运行结果

2.5.2 比较运算符

Python语言支持的比较运算符如表2-2所示。

表2-2 比较运算符

【例2.6】使用比较运算符(源代码\ch02\2.6.py)。

    branch1=760000                                                       #定义变量,存储部门1的销售额
    branch2=540000                                                       #定义变量,存储部门2的销售额
    print("部门1的销售业绩是:"+str(branch1)+",部门2的销售业绩是:"+str(branch2))
    print("部门1==部门2的结果是:"+str(branch1== branch1))               #等于操作
    print("部门1!=部门2的结果是:"+str(branch1!= branch1))               #不等于操作
    print("部门1>部门2的结果是:"+str(branch1>  branch1))                #大于操作
    print("部门1<部门2的结果是:"+str(branch1<  branch1))                #小于操作
    print("部门1<=部门2的结果是:"+str(branch1<=branch1))                #小于或等于操作

保存并运行程序,结果如图2-6所示。

图2-6 例2.6的程序运行结果

2.5.3 赋值运算符

赋值运算符表示将右边变量的值赋给左边变量,常见的赋值运算符的含义如表2-3所示。

表2-3 赋值运算符

【例2.7】使用赋值运算符(源代码\ch02\2.7.py)。

    a = 36
    b = 69
    c = 60
    #简单的赋值运算
    c = a + b
    print ("c 的值为:", c)
    #加法赋值运算
    c += a
    print ("c 的值为:", c)
    #乘法赋值运算
    c *= a
    print ("c 的值为:", c)
    #除法赋值运算
    c /= a
    print ("c 的值为:", c)
    #取模赋值运算
    c = 12
    c %= a
    print ("c 的值为:", c)
    #幂赋值运算
    a=3
    c **= a
    print ("c 的值为:", c)
    #取整除赋值运算
    c //= a
    print ("c 的值为:", c)

保存并运行程序,结果如图2-7所示。

图2-7 例2.7的程序运行结果

2.5.4 逻辑运算符

Python语言支持的逻辑运算符如表2-4所示。

表2-4 逻辑运算符

【例2.8】验证军队的夜间口令和编号(源代码\ch02\2.8.py)。

    print ("开始验证军队的夜间口令")                #输出提示消息
    password=input("请输入今天夜间的口令:")        #使用input()函数接收输入的信息
    num=input("请输入军队的编号:")
    number=int(num)                                 #将输入的信息转换为整数类型
    if(password=="鸡肋" and (number==1002 or number==1006)):
        print ("恭喜您,口令正确!")
    else:
        print ("对不起,口令错误!")

保存并运行程序,结果如图2-8所示。

图2-8 例2.8的程序运行结果

2.5.5 位运算符

在Python语言中,位运算符把数字看作二进制来进行计算。Python语言支持的位运算符如表2-5所示。

表2-5 位运算符

【例2.9】使用位运算符(源代码\ch02\2.9.py)。

    a = 12             #12 =0000 1100
    b = 6              #6= 0000 0110
    c = 0
    #按位与运算
    c = a & b;         #4 = 0000 0100
    print ("c 的值为:", c)
    #按位或运算
    c = a | b;         #14 = 0000 1110
    print ("c 的值为:", c)
    #按位异或运算
    c = a ^ b;         #10 = 0000 1010
    print ("c 的值为:", c)
    #按位取反运算
    c = ~a;           #-13 = 1000 1101
    print ("c 的值为:", c)
    #左移动运算
    c = a << 2;        #48 = 0011 0000
    print ("c 的值为:", c)
    #右移动运算
    c = a >> 2;        #3 = 0000 0011
    print ("c 的值为:", c)

保存并运行程序,结果如图2-9所示。

图2-9 例2.9的程序运行结果

2.5.6 成员运算符

Python语言还支持成员运算符,其测试例中包含了一系列的成员,如字符串、列表、元组。成员运算符包括in和not in。例如,x in y表示:若x在y序列中,则返回True;x not in y表示:若x不在y序列中,则返回True。

【例2.10】使用成员运算符(源代码\ch02\2.10.py)。

    a ='苹果'
    b = '香蕉'
    fruit = ['苹果', '荔枝', '橘子', '橙子', '柚子' ];
    #使用in 成员运算符
    if ( a in fruit ):
       print ("变量a 在给定的列表fruit 中")
    else:
       print ("变量a 不在给定的列表fruit 中")
    #使用not in 成员运算符
    if ( b not in fruit ):
       print ("变量b 不在给定的列表fruit 中")
    else:
       print ("变量b 在给定的列表fruit 中")
    #修改变量a 的值
    a = '哈密瓜'
    if ( a in fruit ):
       print ("变量a 在给定的列表fruit 中")
    else:
       print ("变量a 不在给定的列表fruit 中")

保存并运行程序,结果如图2-10所示。

图2-10 例2.10的程序运行结果

2.5.7 身份运算符

Python语言支持的身份运算符为is和not is。其中,is判断两个标识符是不是引用自一个对象;is not判断两个标识符是不是引用自不同对象。

【例2.11】使用身份运算符(源代码\ch02\2.11.py)。

    a ='苹果'
    b ='苹果'
    #使用is 身份运算符
    if ( a is b):
       print ("a 和b 有相同的标识")
    else:
       print ("a 和b 没有相同的标识")
    #使用not is 身份运算符
    if ( a not in b ):
       print ("a 和b 没有相同的标识")
    else:
       print ("a 和b 有相同的标识")
    #修改变量a 的值
    a = '香蕉'
    if ( a is b):
       print ("修改后的a 和b 有相同的标识")
    else:
       print ("修改后的a 和b 没有相同的标识")

保存并运行程序,结果如图2-11所示。

图2-11 例2.11的程序运行结果

2.5.8 运算符的优先级

下面是Python语言的运算符,以处理顺序的先后排列。

(1)()、[]、{}。

(2)object。

(3)object[i]、object[1:r]、object.attribute、function()。

“.”符号用来存取对象的属性与方法。下面的案例调用对象t的append()方法,在对象t的结尾添加一个字符"t":

    >>> t = ["P","a","r","r","o"]
    >>> t.append("t")
    >>> t
    ['P', 'a', 'r', 'r', 'o', 't']

(4)+x、-x、~x。

(5)x**y:x的y次方。

(6)x * y、x/y、x % y:x乘以y、x除以y、x除以y的余数。

(7)x + y、x – y:x加y、x减y。

(8)x << y、x >> y:x左移y位、x右移y位。例如:

    >>> x = 4
    >>> x << 2
    16

(9)x & y:位AND运算符。

(10)x ^ y:位XOR运算符。

(11)x | y:位OR运算符。

(12)<、<=、>、>=、==、!=、<>、is、is not、in、not in。

in与not in运算符应用于列表(list)。is运算符用于检查两个变量是否属于相同的对象;is not运算符则用于检查两个变量是否不属于相同的对象。

!=与<>运算符是相同功能的运算符,都用来测试两个变量是否不相等。Python建议使用!=运算符,而不使用<>运算符。

(13)not。

(14)and。

(15)or、lambda args:expr。

使用运算符时需要注意以下事项:

(1)除法应用在整数时,其结果会是一个浮点数。例如,8/4会等于2.0,而不是2。余数运算会将x/y所得的余数返回来,如7%4 =3。

(2)如果将两个浮点数相除取余数,那么返回值也会是一个浮点数,计算方式是x – int(x /y) * y。例如:

    >>>7.0 % 4.0
    3.0

(3)比较运算符可以连在一起处理,如a < b < c < d,Python会将这个式子解释成a < b and b < c and c < d。像x < y > z也是有效的表达式。

(4)如果运算符(operator)两端的运算数(operand),其数据类型不相同,那么Python就会将其中一个运算数的数据类型转换为与另一个运算数一样的数据类型。转换顺序为:若有一个运算数是复数,则另一个运算数也会被转换为复数;若有一个运算数是浮点数,则另一个运算数也会被转换为浮点数。

(5)Python有一个特殊的运算符—lambda。利用lambda运算符能够以表达式的方式创建一个匿名函数。lambda运算符的语法如下:

    lambda args : expression

args是以逗号(,)隔开的参数列表list,而expression则是对这些参数进行运算的表达式。

例如:

    >>>a=lambda x,y:x + y
    >>>print (a(3,4))
    7

x与y是a()函数的参数,而a()函数的表达式是x+y。lambda运算符后只允许有一个表达式。如要达到相同的功能也可以使用函数来定义a,如下所示:

    >>> def a(x,y):     #定义一个函数
     return x + y       #返回参数的和
    >>> print (a(3,4))
    7

【例2.12】运算符的优先级(源代码\ch02\2.12.py)。

    a = 5
    b = 8
    c = 4
    d = 2
    e = 0
    e = (a + b)   * c / d        #(13  *4 ) / 2
    print ("(a + b)    * c / d 运算结果为:",  e)
    e = ((a + b)   * c) / d      #(13     *4 ) /2
    print ("((a + b)    * c) / d 运算结果为:",  e)
    e = (a + b)   * (c / d);     #(13)* (4/2)
    print ("(a + b)    * (c / d)   运算结果为:",  e)
    e = a + (b * c) / d;         #5 + (32/2)
    print ("a + (b * c) / d 运算结果为:",  e)

保存并运行程序,结果如图2-12所示。

图2-12 例2.12的程序运行结果