《老鸟python 系列》视频上线了,全网稀缺资源,涵盖python人工智能教程,爬虫教程,web教程,数据分析教程以及界面库和服务器教程,以及各个方向的主流实用项目,手把手带你从零开始进阶高手之路!点击 链接 查看详情




初级运算符

阅读:227570672    分享到

程序中少了运算就如人不会说话,不会行走,便成了行尸走肉,我要要让程序动起来,自然是少不了运算。

在编程语言中运算符是一种告诉解释器或编译器执行特定的数学或逻辑操作的符号,大家注意 Python 是动态语言所以是调用解释器执行代码。

Python 语言内置了丰富的运算符,并提供了以下类型的运算符:算术运算符、比较运算符、位运算符、逻辑算符、成员运算符、身份运算符、三目算符等等。

注意:由于变量,常量,自定义类型变量都可以通过运算符进行运算,在本节的描述中,我们且把参与运算的各种类型的数据统一称为对象。

算术运算符

编程语言中的算符运算符和数学中的算术运算符大体一致, 但有一些地方会不同,假设对象 a = 7, b = 3,通过各种算符运算后的结果如下表格。

算术运算符 解释 例子
+ 加(表示两个对象相加) a + b 结果为 10
- 减(表示两个对象相减或表示负数) a - b 结果为 4, -a 的结果为 -7
* 乘(表示两个对象相乘) a * b 结果 为 21
/ 除(表示两个对象相除) a / b 结果为 2.3333333333333335
** 幂(a的b次幂) a ** b 结果为 343
// 整除(得到商的整数部分) a // b 结果为 2
% 取模(取除法的余数) a % b 结果为 1

我们要区分算术运算符 / 和 // 的区别,运算符 / 的结果和数学上的除法结果一样,而 // 的结果是取运算结果的 整数部分(注意,如果参与运算的数据有任意一个数是小数,则整数部分用浮点数表示)。

a = 7
b = 3
print(a / b)    # 2.3333333333333335
print(a // b)   # 取整数部分 2

a = 7.0
b = 3
print(a / b)    # 2.3333333333333335
print(a // b)   # 取整数部分 2,用浮点数 2.0 表示

注意:Python 语言中没有 ++ 和 -- 运算符,这两种运算符在其它语言中很常用。

比较运算符

编程语言中的比较运算符和数学上一致, 假设对象 a = 7, b = 3,通过各种比较运算后的结果如下表格。

比较运算符 解释 例子
== 等于(判断运算的两个对象是否相等) a == b 结果为 False
!= 不等于(判断运算的两个对象是否不相等) a != b 结果为 True
<> 不等于(判断运算的两个对象是否不相等) a <> b 结果为 True
> 大于(判断运算符左侧对象是否大于右侧对象) a > b 结果为 True
< 小于(判断运算符左侧对象是否小于右侧对象) a < b 结果为 False
>= 大于等于(判断运算符左侧对象是否大于等于右侧对象) a >= b 结果为 True
<= 小于(判断运算符左侧对象是否小于等于右侧对象) a <= b 结果为 False

无论参与比较运算的是什么类型的对象,得出的结果都是布尔类型,注意:字符串做运算符 > 和 <比较时,双方必须为字符串类型,否则语法错误 。

a = 7
b = "老鸟Python"

print(a == b)  # False
print(a > b)   # 语法报错,Python2 则可以比较
print(a < False)

注意:不要把数学中的等号 = 和程序中的等号 == 混淆,大于等于号 >= 不要写成 ≥,小于等于号 <= 不要写成 ≤。

赋值运算符

目前我们知道 = 是赋值运算符,但在编程语言中不止一种赋值运算符,假设对象 a = 7, b = 3,通过各种赋值运算后的结果如下表格。

赋值运算符 解释 例子
= 直接赋值 b = a 意思为 a 赋值给 b
+= 加运算后赋值 b += a 意思为 b = b + a
*= 乘运算后赋值 b *= a 意思为 b = b * a
/= 除运算后赋值 b /= a 意思为 b = b / a
**= 幂运算后赋值 b **= a 意思为 b = b ** a
//= 取整后赋值 b //= a 意思为 b = b // a
%= 取余后赋值 b %= a 意思为 b = b % a

注意:对于直接赋值运算符 = 和所有算术运算符结合的间接赋值运算符, python 解释器在执行该语句时,会先把这条间接赋值运算语句进行拆分, 先执行算术运算符,然后再执行直接赋值运算符 =,最后得到算术运算符执行的结果。

a = 240
a += 10           # Python 解释器把该语句拆分成下面两句
#########################我是分割线########################
temp = a + 10     # Python 解释器先创建一个临时变量 temp
a = temp          # 把临时变量 temp 赋值给变量 a

位运算符

虽然平时很少用到位运算符,但是在某些时候,位运算符确实能够给我们提供很好的解决方案, 位运算符是把数字看作二进制来进行计算的,假设对象 a = 7,b = 3,对应的二进制格式为:a = 0000 0111,b = 0000 0011, 通过各种位运算后的结果如下表格。

位运算符 解释 例子
& 按位与运算(双目运算:当对应的两个二进制位都为 1 则结果为 1,否则结果为 0) b & a 结果为 3
按位或运算(双目运算:当对应的两个二进制位有一个为 1 则结果为 1,否则结果为 0) b ❘ a 结果为 7
^ 按位异或运算(双目运算:当对应的两个二进制位不同时 则结果为 1,否则结果为 0) b ^ a 结果为 4
~ 按位取反运算(单目运算:对数据的每个二进制取反,既把 1 变为 0, 把 0 变为 1) ~a 结果为 -8
<< 左移运算(单目运算:运算数据的各个二进制位全部左移, << 符号右边数字指定了移动的位数,高位丢弃,低位补 0) a << 3 结果为 56
>> 右移运算(单目运算:运算数据的各个二进制位全部右移, >> 符号右边数字指定了移动的位数,低位丢弃,高位补 0) a >> 3 结果为 0

注意:Python 语言中没有同或运算符,当然,我们可以对异或取反实现同或。

逻辑运算符

逻辑运算非常简单,当参与布尔运算的对象是布尔类型时,结果为布尔值。其它非布尔类型的对象进行 and 或 or 进行布尔运算时,结果是参与运算的最终类型值,但无论对什么类型的对象进行 not 运算,结果一定为布尔值。 假设对象 a = 7,b = "Hello",通过各种逻辑运算后的结果如下表格。

逻辑运算符 解释 例子
and 布尔与运算(如果 a 为真,则运算结果为 b,否则运算结果为 a a and b 结果为 "hello"
or 布尔或运算(如果 a 为真,则运算结果为 a,否则运算结果为 b a or b 结果为 7
not 布尔非运算(如果 a 为真,则运算结果为 False,否则运算结果为 True not a 结果为 False

and 运算规则:从参与运算的第一个值开始判断,如果是假值则停止运算,如果是真值则继续往后运算,一直运算到假值或者最后一个值,运算的结果为最后一个参与运算的值; or 运算规则:从参与运算的第一个值开始判断,如果是真值则停止运算,如果是假值则继续往后运算,一直运算到真值或者最后一个值,运算的结果为最后一个参与运算的值。

a = -1
b = ""
c = 0.2

print(a and b and c)  # ""
print(a and b or c)   # 0.2
print(a or b or c)    # -1
print(a or b and c)   # -1

本节重要知识点

牢记比较运算符的结果永远为布尔类型值。

知道 Python 语言中各种类型的假值。

作业

著名公司(某宝)笔试题:对于如下代码,猜一下输出值为多少,为什么?

a = -1
b = ""
c = 0

print(a or b and c)   # -1

如果以上内容对您有帮助,请老板用微信扫一下赞赏码,赞赏后加微信号 birdpython 领取免费视频。


登录后评论

user_image
王烽a
2020年8月6日 07:54 回复

-1

运算符之间有优先级,and的优先级高于or。所以先进行b and c 运算,在进行or运算


user_image
芳草天
2020年8月3日 18:40 回复

-1


user_image
聂玉翠
2020年7月31日 09:08 回复

-1 and的优先级高于or a or (b and c)

b and c的结果为"" a or (b and c)的结果为-1


user_image
15137884849
2020年7月31日 08:54 回复

-1

运算符之间有优先级,and的优先级高于or。所以先进行b and c 运算,在进行or运算


user_image
15136883790
2020年7月31日 08:41 回复

-1

因为and的优先级高于or,先判断b and c,and遇假返回假值,b为假值,返回b的值为空,再判断a or b,or遇真返回真值,a为真值,返回a的值,-1


user_image
王梅因
2020年7月31日 08:08 回复

-1

因为and的优先级高于or,所以先看b and c,b是假值,所以结果是b,即 " " , 然后看a or b,a是真值,所以最终结果为a,即-1.


user_image
13781435268
2020年7月31日 07:40 回复

-1

先看b and c 返回结果为b

再看a or b 返回结果为a


user_image
ayyhw
2020年7月30日 23:49 回复
a = -1
b = ""
c = 0

print(a or b and c) 

-1


user_image
ayyhw
2020年7月30日 23:50
-1

user_image
YT.
2020年7月30日 23:46 回复

-1 and的优先级高于or 先 b and c,and遇假返假,返回b, " " 再 a or b,or遇真返真,返回a, -1


user_image
xrw
2020年7月30日 22:33 回复
-1

user_image
15137867545
2020年7月30日 22:21 回复

-1


user_image
wuqidi
2020年7月30日 22:01 回复

作业中最后的输出值应该为 -1。

  • and的优先级高于or,所以先检查b and c,and遇假返假,b与c中b为假,所以返回b的值,即:空;

  • 接着再判断a or b,or遇真返真,所以返回a的值,即:-1


user_image
wly
2020年7月30日 16:16 回复

and的优先级高于or,先判断b and c,and遇假返回假值,返回b的值为空,再判断a or b,or遇真返回真值,返回a的值,-1


user_image
yyj
2020年7月30日 09:41 回复

输出值:-1

a = -1

b = ""

c = 0

print(a or b and c)

-1

b and c:b假,结果为“”

则上式可写为:a or b,a为真,故结果为-1.


user_image
研上~琑死
2020年7月29日 14:09 回复

作业:-1

and优先级高于or,故将前半部分 a or b 看做一个整体,or遵循遇真则返,a = -1为真,所以输出值为-1


user_image
金少海
2019年11月25日 03:11 回复

以前在学校的时候看老师写的代码,一句代码中,and 和 or 好几个,根本就看不懂,现在才知道代码简洁才是真理!


user_image
Sarakeal
2019年6月1日 01:13 回复

代码书写规范很重要,学到了,谢谢大佬~~


user_image
David-Lau
2019年1月3日 08:59 回复

赋值运算符优先级最低